Я использую следующую команду Oracle, чтобы узнать режим ведения журнала базы данных Oracle:
select name,log_mode from v$database
Эта команда без проблем выполняется из интерактивного сеанса:
SQL> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
T2 NOARCHIVELOG
Но не удалось правильно запустить при запуске из сценария:
#!/bin/sh
export ORACLE_HOME=/oracle/app/oracle/product/12.1.0/dbhome_1;export ORACLE_SID=T2;/oracle/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus -L -s "user/password" <<EOF
select name,log_mode from v$database;
quit
EOF
Со следующим сообщением об ошибке:
ERROR at line 1:
ORA-00942: table or view does not exist
При проверке stdout
я вижу, что остальные команда после знака $
игнорируется:
StdOut = select name,log_mode from v
*
ERROR at line 1:
ORA-00942: table or view does not exist
Я пробовал несколько способов обработки проблемного знака c $
, используя: ""
, ''
, "\
Но пока никто из них не поможет. моя последняя попытка выглядит следующим образом:
#!/bin/sh
export ORACLE_HOME=/oracle/app/oracle/product/12.1.0/dbhome_1;export ORACLE_SID=T2;/oracle/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus -L -s "user/password" <<EOF
select name,log_mode from v'$'database;
quit
EOF
Но теперь Stdout с одинарными кавычками:
StdOut = select name,log_mode from v'$'database
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
Стоит отметить, что используемая учетная запись имеет SELECT ANY DICTIONARY
привилегия и роль SELECT_CATALOG_ROLE
.