168 DBMS_ROLLING
DBMS_ROLLING PL/SQLパッケージは、Active Data Guardを使用したローリング・アップグレードを実装するために使用します。
Oracle Data GuardのActive Data Guard機能は、ローリング形式でData Guard構成のOracle Databaseソフトウェアをアップグレードするプロセスを効率化します。 Active Data Guardを使用したローリング・アップグレード機能には、Oracle Active Data Guardオプションのライセンスが必要です。 この機能は、Oracle Database 12cの最初パッチセット以降のデータベース・リリースのアップグレードに使用できます。
Oracle Database 23ai以降、トランザクション・ガードはDBMS_ROLLING操作中に動作し、DBMS_ROLLINGによって一時ロジカル・スタンバイに発行されるスイッチオーバー中にアプリケーション機能を継続できるようにします。 トランザクション・ガードは、エラーまたは停止が発生したときに現在の処理中トランザクションのコミット結果を返します。 アプリケーションは、トランザクション・ガードAPIをエラー処理手順に組み込んで、停止後に処理中の作業が失われたり重複して発行されずに作業が続行されるようにします。
さらに、この機能は、他のデータベース・メンテナンス・タスクでもすぐに使用できます。 メンテナンスが実行されるデータベースは、Oracle Database 12cリリース1(12.1)以上で実行される必要があります。 このようなメンテナンス・タスクには、次のものが含まれます。
- パーティション化されていない表へのパーティションの追加
- BasicFiles LOBからSecureFiles LOBへの変更
CLOBとして格納されるXMLTypeからバイナリXMLとして格納されるXMLtypeへの変更- OLTP圧縮化対象への表の変更
この章のトピックは、次のとおりです:
参照:
DBMS_ROLLINGを使用してローリング・アップグレードを実行する方法の詳細は、『Oracle Data Guard概要および管理』を参照してください
168.1 DBMS_ROLLING概要
DBMS_ROLLING PL/SQLパッケージは、Data Guardの構成全体にローリング形式で任意の変更を加えるために使用できるプロシージャを提供します。
これらの手順には、Oracle Databaseソフトウェアのローリング・アップグレードが含まれています。 このドキュメントではローリング・アップグレード操作を中心に取り上げていますが、この内容は、ローリングによるすべての変更のデプロイに適用できます。
Oracle Database 23ai以降、トランザクション・ガードはDBMS_ROLLING操作中に動作し、DBMS_ROLLINGによって一時ロジカル・スタンバイに発行されるスイッチオーバー中にアプリケーション機能を継続できるようにします。
現行のプライマリ・データベースですべてのプロシージャが実行されます。これにより、リモート・データベース間でローリング・アップグレードに関する様々な操作を実行する際に、移行の混乱が生じる可能性を排除します。 必要な場合は、すべてのプロシージャを再度コールして、エラーや中断が発生した後のローリング・アップグレードを再開できます。 (このアップグレード・スクリプトもスタンバイでの実行が必要です。)
このパッケージは、ユーザーがローリング・アップグレードを破棄する必要がある場合に、Data Guardの構成をアップグレード前の元の状態に戻すことができるプロシージャも提供します。
ローリング・アップグレードの実際の実行ステップは3つに減少しました(Oracle Databaseソフトウェア自体のアップグレードと新しいOracle Databaseソフトウェアのディスク上の設定が除外されました)。 Data Guardの構成のサイズによってステップの数が変化することはありません。
DBMS_ROLLINGパッケージでは、概念上、Data Guardの構成を先頭グループと後続グループの2つに分けます。 まず、先頭グループのデータベースに対してアップグレード操作(またはデプロイするその他の変更)が実行されます。 後続グループのデータベースにおけるOracle Databaseソフトウェア(またはデプロイしているその他すべての変更)のアップグレードは、スイッチオーバー操作後にのみ実行されます。 それらはアップグレード対象にならないため、先頭グループのデータベースに加えられた変更の影響を評価する時間を確保できます。
各グループにはマスター・データベースがあります。DBMS_ROLLING.INIT_PLANプロシージャで指定される将来のプライマリ・データベースは、先頭グループ・マスター(LGM)と呼ばれる先頭グループのマスターです。一方、元のプライマリ・データベースは、後続グループ・マスター(TGM)と呼ばれる後続グループのマスターです。 LGMとTGMを保護するようにデータベースを構成できます。 LGMを保護するように指定されたスタンバイは、先頭グループ・スタンバイ(LGS)として参照されます。 TGMを保護するように指定されたスタンバイは、後続グループ・スタンバイ(TGS)として参照されます。 これらの用語は、このドキュメントを通じて使用されます。
一時ロジカル・スタンバイ・データベース(DBMS_ROLLINGの使用を含む)を使用してローリング・アップグレードを実行する場合、スイッチオーバーの前に、オペレーティング・システムのあふれた場所から監査レコードを手動でロードする必要があります。 DBMS_ROLLING.SWITCHOVERを実行する前に、後続のグループ・マスター(現在のプライマリ・データベース)でDBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILESを実行します。
168.3 DBMS_ROLLINGサブプログラムの要約
この表では、DBMS_ROLLINGパッケージのサブプログラムをリストし、簡単に説明します。
表168-1 DBMS_ROLLINGパッケージ・サブプログラム
| サブプログラム | 説明 |
|---|---|
|
システムによって生成されたデフォルト値を使用して、ローリング操作計画を初期化します。 |
|
|
既存のローリング操作計画とそのパラメータ、およびローリング操作に関連付けられたすべてのリソースを破棄します。 |
|
|
計画のパラメータを検証し、ローリング操作計画を作成または変更します。 |
|
|
ローリング操作のパラメータを変更します。 |
|
|
ローリング操作を開始します。 |
|
|
現在のプライマリ・データベースと一時的なロジカル・スタンバイ・データベースとの間でスイッチオーバーを実行します。 |
|
|
ローリング操作を終了します。 |
|
|
ローリング操作を完全にロールバックします。 |
168.3.1 INIT_PLANプロシージャ
このプロシージャは、システムによって生成されたデフォルト値を使用して、ローリング操作計画を初期化します。
構文
DBMS_ROLLING.INIT_PLAN ( future_primary IN VARCHAR2);
パラメータ
表168-2 INIT_PLANプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
将来のプライマリ(先頭グループ・マスター(LGM)としても知られている)の |
例外
-
ORA-45400: 現在のデータベースでは操作は許可されていません -
ORA-45401: アップグレード計画はすでにアクティブです -
ORA-45402:LOG_ARCHIVE_CONFIGにはDG_CONFIG属性が含まれている必要があります -
ORA-45403: データベース%sはDG_CONFIGDG_CONFIGに指定されている必要があります -
ORA-45411: 操作には追加の引数が必要です -
ORA-65040: プラガブル・データベース内からの操作は許可されていません
使用上のノート
-
このプロシージャは、
init.oraのlog_archive_configパラメータに定義されているすべてのデータベースと通信し、各データベースがローリング・アップグレードの有効な参加者であることを検証します。 プライマリ・データベース以外の有効な参加者には、フィジカル・スタンバイ、DGまたはロジカル・スタンバイのいずれかのデータベース・ロールが必要となります。 - 指定する将来のプライマリは、フィジカル・スタンバイまたはADGである必要があります。
168.3.2 DESTROY_PLANプロシージャ
このプロシージャは、既存のアップグレード計画とそのパラメータ、およびローリング操作に関連付けられたすべてのリソースを破棄します。
構文
DBMS_ROLLING.DESTROY_PLAN ();
パラメータ
このプロシージャのパラメータはありません。
例外
-
ORA-45422: 操作には既存の計画が必要です -
ORA-65040: プラガブル・データベース内からの操作は許可されていません
使用上のノート
-
ローリング操作が完了したら、このプロシージャをコールし、ローリング操作に関連付けられたすべての状態を完全にパージできます。
- このプロシージャは、
ROLLBACK_PLANの後にもコールしてメタデータをパージする必要があります。
168.3.3 BUILD_PLANプロシージャ
このプロシージャは、計画のパラメータを検証し、ローリング操作計画を作成または変更します。
ローリング操作を実行するには、正しく作成された計画が必要です。 START_PLANプロシージャをコールしてローリング操作を開始するには、このプロシージャから正常に結果が戻される必要があります。 計画の作成後にパラメータを変更すると、既存の計画を変更するために、BUILD_PLANプロシージャのコールが必要になる場合があります。 DBA_ROLLING_EVENTSビューでは、SET_PARAMETERプロシージャをコールすると、計画を再構築する必要があるかどうかが示されます。 計画を再構築しないと、ローリング操作を再開しようとしたときに、ORA-45416エラーが発生します。
構文
DBMS_ROLLING.BUILD_PLAN ();
パラメータ
このプロシージャのパラメータはありません。
例外
-
ORA-45400: 現在のデータベースでは操作は許可されていません -
ORA-45403:データベース%sはDG_CONFIGに指定されている必要があります -
ORA-45414: リモート・データベースに接続できませんでした -
ORA-45419:DB_UNIQUE_NAMEパラメータを指定する必要があります -
ORA-45433: サポートされていないデータベースでフェイルオーバーが検出されました -
ORA-45434: 同じタイプのフェイルオーバーが複数検出されました -
ORA-65040: プラガブル・データベース内からの操作は許可されていません
使用上のノート
-
このプロシージャは、計画のパラメータとして指定されたデータベースに接続します。 これらのインスタンスは、マウントされているかオープンしている必要があり、さらにネットワーク経由でアクセスできる必要があります。
168.3.4 SET_PARAMETERプロシージャ
このプロシージャは、ローリング操作のパラメータを変更します。
Oracle Database 20c以降では、BLOCK_UNSUPPORTEDという新しいパラメータがDBMS_ROLLING.SET_PARAMETERプロシージャに追加されています。 デフォルトでは、BLOCK_UNSUPPORTEDは1に設定されており、一時的なロジカル・スタンバイによってサポートされない表で実行される操作はプライマリ・データベースでブロックされます。 0に設定した場合、DBMS_ROLLINGパッケージは、サポートされない表に対する操作をブロックしません。 これらの表は一時的なロジカル・スタンバイによって保持されず、プライマリ・データベースとは異なります。
構文
DBMS_ROLLING.SET_PARAMETER ( scope IN VARCHAR2 DEFAULT NULL, name IN NUMBER, value IN VARCHAR2);
パラメータ
表168-3 SET_PARAMETERプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
パラメータの有効範囲。 グローバル・パラメータの場合はNULL、ローカル・パラメータの場合は特定のデータベースの |
|
|
特定のパラメータの |
|
|
パラメータの新しい値を指定するか、NULLを指定してデフォルト値に戻します。 |
例外
-
ORA-45400: 現在のデータベースでは操作は許可されていません -
ORA-45408: パラメータ名が不明です -
ORA-45409: パラメータ値が無効か範囲外です -
ORA-45410: パラメータを変更できません -
ORA-45411: 操作には追加の引数が必要です -
ORA-45412: パラメータの有効範囲引数が不明です -
ORA-45413: パラメータにデフォルト値がありません -
ORA-45414: リモート・データベースに接続できませんでした -
ORA-65040: プラガブル・データベース内からの操作は許可されていません
使用上のノート
-
パラメータ値を変更すると、既存の計画を変更するために、
DBMS_ROLLING.BUILD_PLANプロシージャのコールが必要になる場合があります。 ユーザーは、パラメータの設定後にDBA_ROLLING_EVENTSビューをチェックして、再構築が必要かどうかを判断します。 -
「表168-4」は、使用可能なすべてのパラメータとその説明をリストします。 表に記載されているパラメータ名と値は、すべて
VARCHAR2型です。 -
DBA_ROLLING_PARAMETERSビューのMINVALおよびMAXVAL列は、パラメータの値の有効範囲を示します。DBMS_ROLLING.INIT_PLANプロシージャが正常にコールされるまで、このビューにはパラメータが含まれません。
表168-4 DBMS_ROLLING.SET_PARAMETERプロシージャの有効値
| パラメータ名 | グローバルかどうか | 説明 | デフォルト |
|---|---|---|---|
|
|
はい |
ローリング・アップグレードを停止するまでに |
3600 |
|
|
はい |
スイッチオーバー操作がアクティブなセッションの完了を待機するかどうかを指定します。 1に設定されている場合、 |
0 |
|
|
はい |
ローリング・アップグレード中に作成されるバックアップ制御ファイルのファイル名。 |
rolling_change_backup.f |
BLOCK_UNSUPPORTED |
はい |
ローリング・アップグレードにこのパラメータを設定して、ソース・データベースでのサポートされていない操作をブロックできます。 使用可能な値は、
0および1です。
|
1 |
DGBROKER |
はい | 適用、リカバリおよびログのアーカイブ先の管理には、Data Guard Brokerを使用します。 | Brokerが有効な場合は1、そうでない場合は0。 |
|
|
はい |
ローリング・アップグレードを停止するまでに |
3600 |
|
|
はい |
一時的なロジカル・スタンバイのインスタンス化で、REDOにデータ・ディクショナリのスナップショットのロード完了の待機を含めるかどうか。 1に設定した場合、 |
|
|
|
はい |
データ・ディクショナリをREDOに書き込むためにPL/SQLアクティビティを停止する試行と試行の間で待機する時間(秒)。 |
300 |
|
|
はい |
データ・ディクショナリをREDOに書き込むためにPL/SQLアクティビティの停止を試行する最長時間(秒)。 |
3600 |
|
|
はい |
|
|
|
|
はい |
フェイルオーバー・イベントが発生した場合、自動的にアップグレード計画の調整を試行します。 このパラメータは、その次の |
|
|
|
はい |
|
|
|
|
はい |
|
|
|
|
はい |
次のローリング操作の開始時に、前回発生したエラーを無視します。 このパラメータは、ローリング・アップグレードを再開するプロシージャのコール時に、値を0に設定します。 |
|
|
|
はい |
有効になったログのアーカイブ先がVALID状態になるまでの最長待機時間(秒)。 |
600 |
|
|
はい |
|
|
|
|
いいえ |
指定したデータベースがメンバーであるアップグレード・グループ。 値 値 |
|
|
|
はい |
|
600 |
|
|
はい |
ローリング・アップグレードを停止するまでに |
60 |
|
|
はい |
|
0 |
|
|
はい |
|
600 |
|
|
はい |
ローリング・アップグレードを停止するまでに |
60 |
|
|
はい |
|
1 |
|
|
はい |
|
60 |
|
|
はい |
ローリング・アップグレードを停止するまでに |
60 |
|
|
はい |
|
0 |
|
|
はい |
ローリング・アップグレードを停止するまでに |
10800 |
|
|
はい |
|
1 |
|
|
はい |
ローリング・アップグレードを停止するまでに |
10800 |
|
|
はい |
|
1 |
168.3.5 START_PLANプロシージャ
このプロシージャは、ローリング操作を開始します。 正常にローリング操作を開始するには、プライマリ・データベースでこのプロシージャを実行する必要があります。
START_PLANプロシージャが完了すると、INIT_PLANプロシージャ内のfuture_primaryパラメータは、完全構成された一時ロジカル・スタンバイ・データベースに変換されます。
構文
DBMS_ROLLING.START_PLAN ();
パラメータ
このプロシージャのパラメータはありません。
例外
-
ORA-45400: 現在のデータベースでは操作は許可されていません -
ORA-45414: リモート・データベースに接続できませんでした -
ORA-45415: 指示の実行に失敗しました -
ORA-45416: 計画が再作成されるまで操作を開始できません -
ORA-45417: 現在のフェーズが%sではなかったため、操作は許可されませんでした -
ORA-45422: 操作には既存の計画が必要です -
ORA-45426: 管理対象のリカバリ・プロセスは実行されていません -
ORA-45427: ロジカル・スタンバイREDO Applyプロセスは実行されていません -
ORA-45428: データベースは予期されるデータベース・ロールではありません -
ORA-45435: 管理対象のリカバリ・プロセスが実行されていました -
ORA-45436: ロジカル・スタンバイREDO Applyプロセスが実行されていました -
ORA-45438: データベースがマウント・モードではありません -
ORA-45439: データベースが読取り/書込みモードでオープンしていません -
ORA-45486: データベース更新の進行状況に一貫性がありません -
ORA-65040: プラガブル・データベース内からの操作は許可されていません
使用上のノート
-
ローリング操作計画が、
BUILD_PLANプロシージャを使用して生成済である必要があります。
168.3.6 SWITCHOVERプロシージャ
このプロシージャは、現在のプライマリ・データベースと一時的なロジカル・スタンバイ・データベースとの間でスイッチオーバーを実行します。
このプロシージャが正常終了すると、LGMがData Guard構成のプライマリ・ロールを担当します。
構文
DBMS_ROLLING.SWITCHOVER ();
パラメータ
このプロシージャのパラメータはありません。
例外
ORA-16224:Database Guardは有効です-
ORA-45400: 現在のデータベースでは操作は許可されていません -
ORA-45414: リモート・データベースに接続できませんでした -
ORA-45415: 指示の実行に失敗しました -
ORA-45416: 計画が再作成されるまで操作を開始できません -
ORA-45417: 現在のフェーズが%sではなかったため、操作は許可されませんでした -
ORA-45422: 操作には既存の計画が必要です -
ORA-45426: 管理対象のリカバリ・プロセスは実行されていません -
ORA-45427: ロジカル・スタンバイREDO Applyプロセスは実行されていません -
ORA-45428: データベースは予期されるデータベース・ロールではありません -
ORA-45435: 管理対象のリカバリ・プロセスが実行されていました -
ORA-45436: ロジカル・スタンバイREDO Applyプロセスが実行されていました -
ORA-45438: データベースがマウント・モードではありません -
ORA-45439: データベースが読取り/書込みモードでオープンしていません -
ORA-45486: データベース更新の進行状況に一貫性がありません -
ORA-65040: プラガブル・データベース内からの操作は許可されていません
使用上のノート
-
このプロシージャをコールできるのは、一時的なロジカル・スタンバイを手動でアップグレードし、それを上位バージョンのOracle Databaseでオープンした後のみです。
-
将来のプライマリがアップグレードされたら、ロジカル適用を再起動して、プライマリに追いつくことができるようにする必要があります。プライマリは業務用にオープンされていて、スタンバイにすぐに適用する必要があるREDOが生成されているためです。 そうしないと、そのREDOをすべて適用する必要があるため、スイッチオーバーに長い時間がかかります。
168.3.7 FINISH_PLANプロシージャ
このプロシージャは、ローリング操作を終了します。
以前のプライマリを前に作成されたGRP (保証付きリストア・ポイント)にフラッシュバックし、そのロールをフィジカル・スタンバイに変換してから、新しいプライマリで生成されたすべてのREDO (アップグレードのREDO、およびアップグレードの前後に生成されたその他のREDOを含む)をリカバリする管理リカバリを開始することによって、以前のプライマリを新しいプライマリのフィジカル・スタンバイとして構成します。
構文
DBMS_ROLLING.FINISH_PLAN ();
パラメータ
このプロシージャのパラメータはありません。
例外
-
ORA-45400: 現在のデータベースでは操作は許可されていません -
ORA-45414: リモート・データベースに接続できませんでした -
ORA-45415: 指示の実行に失敗しました -
ORA-45416: 計画が再作成されるまで操作を開始できません -
ORA-45417: 現在のフェーズが%sではなかったため、操作は許可されませんでした -
ORA-45422: 操作には既存の計画が必要です -
ORA-45426: 管理対象のリカバリ・プロセスは実行されていません -
ORA-45427: ロジカル・スタンバイREDO Applyプロセスは実行されていません -
ORA-45428: データベースは予期されるデータベース・ロールではありません -
ORA-45435: 管理対象のリカバリ・プロセスが実行されていました -
ORA-45436: ロジカル・スタンバイREDO Applyプロセスが実行されていました -
ORA-45438: データベースがマウント・モードではありません -
ORA-45439: データベースが読取り/書込みモードでオープンしていません -
ORA-45486: データベース更新の進行状況に一貫性がありません -
ORA-65040: プラガブル・データベース内からの操作は許可されていません
使用上のノート
-
このプロシージャをコールできるのは、上位バージョンのOracle Databaseで以前のプライマリと残りのフィジカル・スタンバイを再マウントした後のみです。
168.3.8 ROLLBACK_PLANプロシージャ
このプロシージャは、構成全体のローリング操作をロールバックします。
完了すると、先頭グループに含まれるすべてのデータベースが、元のプライマリ・データベースのフィジカル・スタンバイになります。 このプロシージャをコールできるのは、START_PLANプロシージャが起動した後で構成のスイッチオーバー操作が発生していない場合のみです。
構文
DBMS_ROLLING.ROLLBACK_PLAN;
パラメータ
このプロシージャのパラメータはありません。
例外
-
ORA-45400: 現在のデータベースでは操作は許可されていません -
ORA-45414: リモート・データベースに接続できませんでした -
ORA-45415: 指示の実行に失敗しました -
ORA-45441: ロールバックの対象となるデータベースがありません -
ORA-45442: ロールの変更後はロールバックは実行できません -
ORA-65040: プラガブル・データベース内からの操作は許可されていません
使用上のノート
-
一時的なロジカル・スタンバイのアップグレードがすでに実行されている場合、下位バージョンのOracle Databaseでメディア・リカバリを手動で再開する必要があります。