Estoy intentando almacenar el valor de sqlplus en una variable en Linux.
El script funciona bien cuando se activa manualmente. Pero el valor de la variable no se almacena cuando se llama al script desde crontab.
Código:
#!/bin/ksh
~/.profile
v=`sqlplus -s <<!
<<DB details>>
select sysdate from dual;
!
`
echo "$v"
Respuesta1
Ejecutar sqlplus
desde una entrada de crontab puede resultar frustrante. Obtiene una variable PATH muy escasa ya que el shell que crond
se bifurca no lee el archivo "rc".
En su archivo ".profile", ¿configura ORACLE_HOME? ¿Incluye $ORACLE_HOME/bin en PATH y exporta ORACLE_HOME y PATH? Comprueba eso primero. Además, debo tener en cuenta que su código muestra el ksh
en cuestión.ejecutandonoabastecimientoel ~/.profile
archivo. Su script debería "obtener" ese archivo. También parece que tengo una superstición acerca de configurar y exportar TNS_ADMIN, así:
export TNS_ADMIN=$ORACLE_HOME/network/admin
Puede incluir el ID de usuario y la contraseña de la base de datos en el "documento aquí" utilizando la /nolog
opción de sqlplus
para evitar mostrar esos detalles a cualquiera que ejecute 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