しばらく二足の草鞋でやらねばならない気配。まーじでー。
ポイントは、前の仕事の客先テストがまだ終わってない=私の対応不具合でるかもしれないということです。てかまだ私のモジュールにテストがたどり着いてないとかどんだけー……

で、昨日、今日で対応した不具合がなかなか面白かったので曝します。
オラクルデータベースの話。

OSはRedhatLinux。オラクルのバージョンは10g2SEですよ。Linuxのカーネルは忘れた。
ほとんど私の備忘のためのメモ(笑)

Physical Standbyになってるオラクルを、プライマリに切り替え。
プライマリ切り替えは、Listener経由だと上手くいかない(シャットダウンするから)ので、ネットワーク経由で遠隔操作したかったらSSHでShellを蹴った方がいい。
それはともかく。

当初のコマンドとしては、SQLPlusで
ALTER DATABASE ACTIVATE STANDBY DATABASE;
SHUTDOWN IMMEDIATE;
STARTUP;

だったんですよ。こっちの単体テストもそれで通ってたの。
ところが、Standby Databaseを、予備がわりに読み取り専用で使ってるんですね。そうすると、読み取り専用でアクセスしてる輩(プロセス)がいたりするわけです。
で。
一行目、
ALTER DATABASE ACTIVATE STANDBY DATABASE;
は、内部的に通信遮断を待つようになってるみたいで、見てる輩がいると、もうだめ。待機がタイムアウトして、この行でORA-03113かな、通信チャネルでEnd of Fileが検出されました、なるエラーが出て、切り替えに失敗するわけっすよ。

じゃあ、ALTER DATABASE ACTIVATE 〜てする前に、シャットダウンしましょうかとなるんですが、前述のコマンドにこだわるとオープンまでかけた上でコマンド投げるしかなくて、オープンからコマンドの間の一瞬に再接続とかされちゃったら結局意味が無くなるのです。

で。
出てこい、オラクルドキュメント。
「Data Guardの概要」という項目でありましたよー。
ただ、オラクルSEでは、DATA Guard使えないんだけどね。DATA GuardはEEの機能だから。

で、最終的にこんなことになりました↓。sysdba権限で接続して、
SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT;
ALTER DATABASE MOUNT STANDBY DATABASE;
ALTER DATABASE ACTIVATE STANDBY DATABASE;
ALTER DATABASE OPEN;


シャットダウンして自分以外の全接続を遮断
スタンバイで起動(接続開放はしない)
スタンバイをアクティブに切り替え
接続可能に開放

こんな感じに。
ちなみにここまでスペルはうろ覚えですので、ご利用の際は確認の上、自己責任でよろしく。
このコマンドで不利益とか被られても私は責任負いませんよー。

これ、テストがやたら大変で、スタンバイをアクティブにすると、スタンバイに戻せないので、ドロップして作り直しになるんですが、それが非常に時間のかかる作業でして、プライマリから同期まで取って1時間以上?
コードの調査より、スタンバイ作る方が大変ですよという話。
コメント
コメントする
トラックバック
災害により建物ごと被害を受けてしまう・・・というような障害に対するディザスタリカバリ用途としてDataGuardという機能があります。 DataGuardはプライマリサイトの更新を自動的にスタンバイサイトへ反映し...
  • サクサクIT
  • 2012/05/02 9:47 PM
この記事のトラックバックURL