Oracleのインストールに付属しているdbstart/ dbshutスクリプトを使用できます。これらはで入手できます$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.8GHzシステムでの時間、ハードディスクの回転が遅い。)
dbstart / dbshutの仕組み
dbstart $ORACLE_HOME$コールは、基本的に同等です。
$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog
そしてa 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サービスは必要ありません。