Estou tentando armazenar o valor sqlplus em uma variável no Linux.
O script está funcionando bem quando acionado manualmente. Mas o valor na variável não é armazenado quando o script é chamado do crontab.
Código:
#!/bin/ksh
~/.profile
v=`sqlplus -s <<!
<<DB details>>
select sysdate from dual;
!
`
echo "$v"
Responder1
Executar sqlplus
a partir de uma entrada do crontab pode ser frustrante. Você obtém uma variável PATH muito esparsa, pois o shell que crond
se bifurca não lê o arquivo "rc".
No seu arquivo ".profile" você configura ORACLE_HOME? Você inclui $ORACLE_HOME/bin no PATH e exporta ORACLE_HOME e PATH? Verifique isso primeiro. Além disso, devo observar que seu código mostra o que ksh
está em questãoexecutandonãoabastecimentoo ~/.profile
arquivo. Seu script deve "fonte" desse arquivo. Também parece que tenho uma superstição sobre como configurar e exportar TNS_ADMIN, assim:
export TNS_ADMIN=$ORACLE_HOME/network/admin
Você pode incluir ID de usuário e senha do banco de dados no "documento aqui" usando a /nolog
opção de sqlplus
para evitar a exibição desses detalhes para qualquer pessoa que execute ps
:
sqlplus -s /nolog 2>&1 << END_ZERO_ROW_CHECK
connect $USER_NAME/$PASSWORD@$SID_INSTANCE
whenever oserror exit failure
whenever sqlerror exit failure
...
END_ZERO_ROW_CHECK