Oracle DBデーモン(テストマシンにインストールされているOracle 11.2)を適切に起動/シャットダウンする最も速い方法は何でしょうか。
OCI/Pro * C APIを使用するC/C++プログラムに必要です。
これは、PostgreSQLの起動速度に慣れており、デーモンがテストケースでのみ(オンデマンドで)起動される仮想マシンで実行されるためです。
現在私はそれをこのようにスクリプト化しています-スタートアップ:
sqlplus /nolog <<EOF
connect / as sysdba
startup
quit
EOF
lsnrctl start
emctl start dbconsole
そしてシャットダウン:
emctl stop dbconsole
lsnrctl stop
sqlplus /nolog <<EOF
connect / as sysdba
shutdown
quit
EOF
これは機能します-プログラムは期待どおりに機能しますが、この手順は非常に低速です。
Oracle DBはCentOS 6.3で動作し、無料(ビールのまま)の「標準バージョン」です。
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 $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'
を使用して、すべてがシャットダウンされているかどうかを確認できます)
コマンドの順序が重要であることに注意してください。つまり、sqlplus-startupコマンドの後にlsnrctl start
が実行された場合、Pro * C/OCIプログラムは、使用できないTNSリスナーについてまだ文句を言います。
そして、これはまさに問題のコマンドシーケンスの問題です。emctl start
は、TNSリスナーのセットアップ部分を修正するため、誤った順序を回避します。
また、Pro * C/OCIプログラムを実行する場合、EMCTLサービスは必要ありません。
なぜそれが必要なのですか?理由は何ですか?シャットダウンの場合、3つのオプションがあります。
shutdown
-セッションの終了を待ちますshutdown immediate
-セッションをロールバックして終了します(ロールバックの終了を待ちます)shutdown abort
-すべてを殺します-通常、データベースは起動時に何らかのリカバリを実行する必要があります。PS:テスト専用のデータベースが必要な場合は、Enterprise Managerを実行する必要はおそらくありません。 Oracle dbstart
/dbshut
スクリプトを使用します。 EMが本当に必要な場合は、バックグラウンドで起動してください。
yasir-arsanukaev:一時停止(一時停止)できますかVM状態を保存していますディスクに?
colin-t-hart:これがテストマシンの場合は、スナップショットを作成します。マシンを起動し、dbstart
を使用してOracleを起動します。完了したらマシンを強制的にオフにして、スナップショットにロールバックします。