Вы можете использовать скрипты dbstart
/, dbshut
которые поставляются с установкой Oracle. Они доступны под $ORACLE_HOME/bin
.
После новой установки вы должны отредактировать /etc/oratab
файл:
# cat /etc/oratab
# format: $ORACLE_SID:$ORACLE_HOME:N|Y
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:N
# sed -i 's/:N$/:Y/' /etc/oratab
# grep my_sid /etc/oratab
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:Y
Тогда вы можете использовать сценарии, как это:
$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME
dbstart
выводит все, что необходимо для программ Pro * C / OCI.
Использование dbstart
/ dbshut
является улучшением по сравнению с пользовательским методом, упомянутым в вопросе:
method time called tools
―――――――――――――――――――――――――――――――――――――――――――――――――――――
dbstart 5.7 s lsnrctl, sqlplus
dbshut 5.7 s lsnrctl, sqlplus
custom startup 27.9 s lsnrctl, sqlplus, emctl
custom shutdown 31.0 s lsnrctl, sqlplus, emctl
(раз в системе Core i7 / 2,8 ГГц, жесткий диск медленно вращается.)
Как работает dbstart / dbshut
dbstart $ORACLE_HOME$
Вызов в основном эквивалентен:
$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog
А в dbshut $ORACLE_HOME$
основном эквивалентно:
$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog
(Вы можете проверить, все ли выключено через ps aux | grep 'tnsl\|ora'
)
Обратите внимание, что порядок команд важен. Это означает, что когда lsnrctl start
выполняется после команды sqlplus-startup, тогда программа Pro * C / OCI все еще жалуется на недоступного TNS-слушателя.
И это как раз та проблема с последовательностью команд в вопросе - где emctl start
просто обходится неправильный порядок, потому что это исправляет часть настройки TNS-слушателя.
Также обратите внимание, что для выполнения программ Pro * C / OCI служба EMCTL не требуется.