IANADBA ですが、Oracle スタンバイ データベースがアクティブ化されていない限りアクションを実行するスクリプトを作成しています。探しているのは、2 つのクエリ (または必要に応じてクエリのセット) です。
1 - データベースはマウントされていますか (つまり、誰かが「alter database mount standby database」を実行しましたか)
2 - データベースがアクティブ化されているかどうかはどうすればわかりますか (「alter database activate standby database」のように)?
先ほども申し上げたように、私は質問を探していますが、システム内で判断する方法があれば、それも構いません。ありがとうございます!
アップデート
私は以下の提案を採用しました (Oracle 8i を扱っているため、若干修正しました)。その結果、次のようになりました。
SQL> SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE from v$instance;
INSTANCE_NAME DATABASE_STATUS INSTANCE_ROLE
---------------- ----------------- ------------------
RGR01 ACTIVE PRIMARY_INSTANCE
現在、このインスタンスはアーカイブ ログをアクティブに回復していますが、「ライブ」ではありません。スタンバイ データベースとしてマウントされていないかどうかを確認する方法をまだ探しています。
答え1
わかった!
v$databaseのCONTROLFILE_TYPEがキーです
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
CURRENT
対
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
STANDBY
答え2
これは、フィジカルスタンバイ、Oracle 10g(およびそれ以降)で機能します。
v$databaseからopen_modeを選択します。
値が次の場合:
- 「MOUNTED」、データベースがマウントされました。
- 「READ WRITE」であれば、アクティブ化されていると想定できます。
- 「読み取り専用」の場合、クエリ用に読み取り専用モードで開かれますが、アクティブ化されません。
- アクティブ データガードを使用する場合は、「READ ONLY WITH APPLY」を使用します。
プライマリの場合:
select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
スレーブの場合:
OPEN_MODE
-------------------- --------------------
MOUNTED or READ ONLY WITH APPLY
他にも値があるかもしれませんが、よくわかりません。
HTH
答え3
「Oracleデータベースがマウントされアクティブ化されているかどうかはどうすればわかりますか?」という質問に対する答えは本当にわかりませんが、この投稿の回答のほとんどがひどく間違っているので、誤解されないように人々に知らせるために回答を投稿する必要があります。。
「v$instance」を使用すると言う人は完全に間違っています。なぜなら、それは「instance」がマウントされているか、起動しているか、アクティブかどうかを示すからです。データベースとデータベースインスタンスは異なるものであることに注意してください違いが分からない場合は、読んでみてください。Oracle RAC および Oracle Data Guard。
あなたが使用している
select CONTROLFILE_TYPE from v$database;
と言っているものも正しくありません。オラクルこの列は制御ファイル情報を示し、データベースがスタンバイ モードかアクティブ モードかを示します。これは、データベースがマウントされているかどうかや、データベースがアクティブかどうかとは異なります。
先ほども述べたように、データベースとデータベース インスタンスの違いを理解し、Oracle RAC と Oracle Data Gurard が何であるかを知ることは非常に重要だと思います。
プライマリ データベースと別のスタンバイ データベースがあり、両方のデータベース/インスタンスがアクティブで使用可能であるとします。ただし、以下のスクリーン ショットから違いを確認してください。
プライマリデータベース:
スタンバイ データ ガード データベース:
答え4
netstat/lsof 経由でデータベースへの接続を監視できますか? おそらく、クライアントがそれを使い始めていることに気付くでしょう。
これらのコマンドのアーカイブ ログを監視することもできます。