web-dev-qa-db-ja.com

Oracle 11をすばやく起動/シャットダウンする方法

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で動作し、無料(ビールのまま)の「標準バージョン」です。

9
maxschlepzig

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

そして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サービスは必要ありません。

8
maxschlepzig

なぜそれが必要なのですか?理由は何ですか?シャットダウンの場合、3つのオプションがあります。

  • プレーンshutdown-セッションの終了を待ちます
  • shutdown immediate-セッションをロールバックして終了します(ロールバックの終了を待ちます)
  • shutdown abort-すべてを殺します-通常、データベースは起動時に何らかのリカバリを実行する必要があります。

PS:テスト専用のデータベースが必要な場合は、Enterprise Managerを実行する必要はおそらくありません。 Oracle dbstart/dbshutスクリプトを使用します。 EMが本当に必要な場合は、バックグラウンドで起動してください。

1
ibre5041

yasir-arsanukaev:一時停止(一時停止)できますかVM状態を保存していますディスクに?

colin-t-hart:これがテストマシンの場合は、スナップショットを作成します。マシンを起動し、dbstartを使用してOracleを起動します。完了したらマシンを強制的にオフにして、スナップショットにロールバックします。

0
user126897