
Preciso chamar sqlplus
com o usuário Oracle Sudo para um banco de dados claramente especificado (env var ORACLE_SID
) por um comando de linha. A maneira usual de fazer isso consiste em 2 etapas:
$ sudo -u oracle -i
$ ORACLE_SID=DBNAME sqlplus / as sysdba
Mas preciso fazer isso em uma linha (para economizar tempo, razoavelmente). Eu tento fazer simplesmente assim:
$ sudo -u oracle -i ORACLE_SID=DBNAME sqlplus / as sysdba
Mas parece que sqlplus
não vê mudança de ORACLE_SID
env var e se conecta ao banco de dados padrão. Além disso, não posso excluir -i
a opção sudo porque preciso ter certeza de que todas as outras variáveis de ambiente foram inicializadas perfeitamente.
Como posso executar o aplicativo com sudo e variável de ambiente personalizada no meu caso?
Responder1
Experimente o seguinte comando:
sudo -i su - oracle -c 'ORACLE_SID=DBNAME && sqlplus'
Explicação:
"sudo -i" will take care of the environment variables.
"su - user" will consider the user's environment variables
"-c" -> the command you wish to issue.
Responder2
A melhor maneira de resolver a questão é usar o seguinte comando:
sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba"
E se quisermos passar o script sql diretamente em uma linha:
sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba" <<-EOF
SELECT 1 FROM DUAL;
EOF