Linux에서 sqlplus 값을 변수에 저장하려고 합니다.
수동으로 실행하면 스크립트가 제대로 작동합니다. 그러나 crontab에서 스크립트를 호출하면 변수의 값이 저장되지 않습니다.
암호:
#!/bin/ksh
~/.profile
v=`sqlplus -s <<!
<<DB details>>
select sysdate from dual;
!
`
echo "$v"
답변1
sqlplus
crontab 항목에서 실행하면 실망스러울 수 있습니다. 분기된 쉘은 crond
"rc" 파일을 읽지 않기 때문에 매우 희박한 PATH 변수로 끝나게 됩니다 .
".profile" 파일에서 ORACLE_HOME을 설정했습니까? PATH에 $ORACLE_HOME/bin을 포함하고 ORACLE_HOME 및 PATH를 내보냈습니까? 먼저 확인해 보세요. 또한 귀하의 코드에 ksh
문제가 있는 것으로 나타났습니다.구현하다아니요구입문서 ~/.profile
. 스크립트는 파일을 "가져와야" 합니다. 나는 또한 다음과 같이 TNS_ADMIN을 설정하고 내보내는 것에 대해 미신적인 것 같습니다.
export TNS_ADMIN=$ORACLE_HOME/network/admin
/nolog
sqlplus
다음 명령을 실행하는 사람에게 이러한 세부 정보가 표시되지 않도록 다음 옵션을 사용하여 여기에 문서에 데이터베이스 사용자 ID 및 비밀번호를 포함할 수 있습니다 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