Ich versuche, einen SQLPlus-Wert in einer Variablen in Linux zu speichern.
Das Skript funktioniert einwandfrei, wenn es manuell ausgelöst wird. Der Wert in der Variable wird jedoch nicht gespeichert, wenn das Skript von Crontab aufgerufen wird.
Code:
#!/bin/ksh
~/.profile
v=`sqlplus -s <<!
<<DB details>>
select sysdate from dual;
!
`
echo "$v"
Antwort1
Das Ausführen sqlplus
von einem Crontab-Eintrag aus kann frustrierend sein. Sie erhalten eine sehr spärliche PATH-Variable, da die Shell, die crond
sich abspaltet, die „rc“-Datei nicht liest.
Legen Sie in Ihrer „.profile“-Datei ORACLE_HOME fest? Schließen Sie $ORACLE_HOME/bin in den PATH ein und exportieren Sie ORACLE_HOME und PATH? Überprüfen Sie das zuerst. Außerdem muss ich feststellen, dass Ihr Code das ksh
fraglicheAusführennichtBeschaffungdie ~/.profile
Datei. Ihr Skript sollte diese Datei als „Quelle“ verwenden. Ich scheine auch einen Aberglauben zu haben, was das Einstellen und Exportieren von TNS_ADMIN angeht, und zwar so:
export TNS_ADMIN=$ORACLE_HOME/network/admin
Sie können die Datenbank-Benutzer-ID und das Kennwort in das „hier-Dokument“ aufnehmen, indem Sie die /nolog
Option verwenden sqlplus
, um zu verhindern, dass diese Details jedem angezeigt werden, der Folgendes ausführt 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