138 DBMS_ROLLING

DBMS_ROLLING PL/SQLパッケージを使用して、Active Data Guardを使用したローリング・アップグレード機能を実装します。この機能によって、Data Guard構成でOracle Databaseソフトウェアをアップグレードするプロセスがローリング形式で効率化されます。Active Data Guardを使用したローリング・アップグレード機能は、Oracle Active Data Guardオプション用のライセンスが必要で、Oracle Database 12cの最初のパッチセットで開始されるデータベース・バージョンのアップグレードに使用できます。

さらに、この機能は、他のデータベース・メンテナンス・タスクでもすぐに使用できます。メンテナンスが実行されるデータベースは、Oracle Database 12cリリース1(12.1)以上で実行される必要があります。このようなメンテナンス・タスクには、次のものが含まれます。

  • パーティション化されていない表へのパーティションの追加

  • BasicFiles LOBからSecureFiles LOBへの変更

  • CLOBとして格納されるXMLTypeからバイナリXMLとして格納されるXMLtypeへの変更

  • OLTP圧縮化対象への表の変更

この章のトピックは、次のとおりです:

参照:

138.1 DBMS_ROLLINGの概要

DBMS_ROLLING PL/SQLパッケージは、Oracle Databaseソフトウェアのローリング・アップグレードなど、Data Guardの構成全体にローリング形式で任意の変更を加えるために使用できるプロシージャを提供します。このドキュメントではローリング・アップグレード操作を中心に取り上げていますが、この内容は、ローリングによるすべての変更のデプロイに適用できます。

現行のプライマリ・データベースですべてのプロシージャが実行されます。これにより、リモート・データベース間でローリング・アップグレードに関する様々な操作を実行する際に、移行の混乱が生じる可能性を排除します。必要な場合は、すべてのプロシージャを再度コールして、エラーや中断が発生した後のローリング・アップグレードを再開できます。(このアップグレード・スクリプトもスタンバイでの実行が必要です。)

このパッケージは、ユーザーがローリング・アップグレードを破棄する必要がある場合に、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)として参照されます。これらの用語は、このドキュメントを通じて使用されます。

138.2 DBMS_ROLLINGのセキュリティ・モデル

DBMS_ROLLINGパッケージを使用できるのは、DBAロールを付与されたユーザーです。

138.3 DBMS_ROLLINGサブプログラムの要約

この表では、DBMS_ROLLINGパッケージのサブプログラムをリストし、簡単に説明します。

表138-1 DBMS_ROLLINGパッケージのサブプログラム

サブプログラム 説明

INIT_PLANプロシージャ

システムによって生成されたデフォルト値を使用して、ローリング操作計画を初期化します。

DESTROY_PLANプロシージャ

既存のローリング操作計画とそのパラメータ、およびローリング操作に関連付けられたすべてのリソースを破棄します。

BUILD_PLANプロシージャ

計画のパラメータを検証し、ローリング操作計画を作成または変更します。

SET_PARAMETERプロシージャ

ローリング操作のパラメータを変更します。

START_PLANプロシージャ

ローリング操作を開始します。

SWITCHOVERプロシージャ

現在のプライマリ・データベースと一時的なロジカル・スタンバイ・データベースとの間でスイッチオーバーを実行します。

FINISH_PLANプロシージャ

ローリング操作を終了します。

ROLLBACK_PLANプロシージャ

ローリング操作を完全にロールバックします。

138.3.1 INIT_PLANプロシージャ

このプロシージャは、システムによって生成されたデフォルト値を使用して、ローリング操作計画を初期化します。

構文

DBMS_ROLLING.INIT_PLAN (
   future_primary   IN VARCHAR2);
	   

パラメータ

表138-2 INIT_PLANプロシージャのパラメータ

パラメータ 説明

future_primary

将来のプライマリ(先頭グループ・マスター(LGM)としても知られている)のDB_UNIQUE_NAME

例外

  • ORA-45400: 現在のデータベースでは操作は許可されていません

  • ORA-45401: アップグレード計画はすでにアクティブです

  • ORA-45402: LOG_ARCHIVE_CONFIGにはDG_CONFIG属性が含まれている必要があります

  • ORA-45403: データベース%sはDG_CONFIGDG_CONFIGに指定されている必要があります

  • ORA-45411: 操作には追加の引数が必要です

  • ORA-65040: プラガブル・データベース内からの操作は許可されていません

使用上のノート

  • このプロシージャは、init.oralog_archive_configパラメータに定義されているすべてのデータベースと通信し、各データベースがローリング・アップグレードの有効な参加者であることを検証します。プライマリ・データベース以外の有効な参加者には、フィジカル・スタンバイ、DGまたはロジカル・スタンバイのいずれかのデータベース・ロールが必要となります。

  • 指定する将来のプライマリは、フィジカル・スタンバイまたはADGである必要があります。

138.3.2 DESTROY_PLANプロシージャ

このプロシージャは、既存のアップグレード計画とそのパラメータ、およびローリング操作に関連付けられたすべてのリソースを破棄します。

構文

DBMS_ROLLING.DESTROY_PLAN ();   

パラメータ

このプロシージャのパラメータはありません。

例外

  • ORA-45422: 操作には既存の計画が必要です

  • ORA-65040: プラガブル・データベース内からの操作は許可されていません

使用上のノート

  • ローリング操作が完了したら、このプロシージャをコールし、ローリング操作に関連付けられたすべての状態を完全にパージできます。

  • このプロシージャは、ROLLBACK_PLANの後にもコールしてメタデータをパージする必要があります。

138.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: プラガブル・データベース内からの操作は許可されていません

使用上のノート

  • このプロシージャは、計画のパラメータとして指定されたデータベースに接続します。これらのインスタンスは、マウントされているかオープンしている必要があり、さらにネットワーク経由でアクセスできる必要があります。

138.3.4 SET_PARAMETERプロシージャ

このプロシージャは、ローリング操作のパラメータを変更します。

構文

DBMS_ROLLING.SET_PARAMETER (
   scope    IN VARCHAR2 DEFAULT NULL,
   name     IN NUMBER,
   value    IN VARCHAR2);

パラメータ

表138-3 SET_PARAMETERプロシージャのパラメータ

パラメータ 説明

scope

パラメータの有効範囲。グローバル・パラメータの場合はNULL、ローカル・パラメータの場合は特定のデータベースのDB_UNIQUE_NAMEを指定します。

name

特定のパラメータのDBMS_ROLLING定数。

value

パラメータの新しい値を指定するか、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ビューをチェックして、再構築が必要かどうかを判断します。

  • 表138-4に、使用可能なパラメータとその説明を示します。表に記載されているパラメータ名と値は、すべてVARCHAR2型です。

  • DBA_ROLLING_PARAMETERSビューのMINVALおよびMAXVAL列は、パラメータの値の有効範囲を示します。DBMS_ROLLING.INIT_PLANプロシージャが正常にコールされるまで、このビューにはパラメータが含まれません。

表138-4 DBMS_ROLLING.SET_PARAMETERプロシージャの有効な値

パラメータ名 グローバルかどうか 説明 デフォルト

ACTIVE_SESSIONS_TIMEOUT

はい

ローリング・アップグレードを停止するまでにACTIVE_SESSIONS_WAITを実行する最長時間(秒)。このパラメータは、ACTIVE_SESSIONS_WAITが1に設定されている場合にのみ有効です。

3600

ACTIVE_SESSIONS_WAIT

はい

スイッチオーバー操作がアクティブなセッションの完了を待機するかどうかを指定します。1に設定されている場合、SWITCHOVERプロシージャはアクティブなセッションの完了を待機します。0に設定されている場合、SWITCHOVERプロシージャはスイッチオーバーを処理するためにアクティブなセッションを終了します。

0

BACKUP_CONTROLFILE

はい

ローリング・アップグレード中に作成されるバックアップ制御ファイルのファイル名。

rolling_change_backup.f

DGBROKER はい 適用、リカバリおよびログのアーカイブ先の管理には、Data Guard Brokerを使用します。 Brokerが有効な場合は1、そうでない場合は0。

DICTIONARY_LOAD_TIMEOUT

はい

ローリング・アップグレードを停止するまでにDICTIONARY_LOAD_WAITを実行する最長時間(秒)。このパラメータは、DICTIONARY_LOAD_WAITが1に設定されている場合にのみ有効です。

3600

DICTIONARY_LOAD_WAIT

はい

一時的なロジカル・スタンバイのインスタンス化で、REDOにデータ・ディクショナリのスナップショットのロード完了の待機を含めるかどうか。1に設定した場合、START_PLANプロシージャでは、完全にロードするまでディクショナリを戻しません。0に設定した場合、START_PLANプロシージャで、ディクショナリのロードが開始されたことの確認のみが行われます。

0

DICTIONARY_PLS_WAIT_INIT

はい

データ・ディクショナリをREDOに書き込むためにPL/SQLアクティビティを停止する試行と試行の間で待機する時間(秒)。

300

DICTIONARY_PLS_WAIT_TIMEOUT

はい

データ・ディクショナリをREDOに書き込むためにPL/SQLアクティビティの停止を試行する最長時間(秒)。

3600

EVENT_RECORDS

はい

DBA_ROLLING_EVENTSで許可するレコードの最大数。

10000

FAILOVER

はい

フェイルオーバー・イベントが発生した場合、自動的にアップグレード計画の調整を試行します。このパラメータは、その次のBUILD_PLANへのコールの終了時に、値を0に設定します。

0

GRP_PREFIX

DBMS_ROLLINGに含まれるプロシージャを実行すると、多くの保証付きリストア・ポイント(GRP)が、Data Guard構成内の様々なデータベースで作成されます。そのようなGRPの名前には、同一の接頭辞が含まれます。このパラメータを使用すると、デフォルトの接頭辞をオーバーライドできます。

DBMSRU

IGNORE_BUILD_WARNINGS

はい

BUILD_PLANプロシージャの実行中、例外を発生する警告を無視します。

1

IGNORE_LAST_ERROR

はい

次のローリング操作の開始時に、前回発生したエラーを無視します。このパラメータは、ローリング・アップグレードを再開するプロシージャのコール時に、値を0に設定します。

0

LAD_ENABLED_TIMEOUT

はい

有効になったログのアーカイブ先がVALID状態になるまでの最長待機時間(秒)。

600

LOG_LEVEL

はい

DBS_ROLLING PL/SQLパッケージのロギング・レベル。値INFOを指定すると、エラーおよび関連する致命的でない警告のロギングを行います。値FULLを指定すると、すべてのイベントのロギングを行います。

INFO

MEMBER

いいえ

指定したデータベースがメンバーであるアップグレード・グループ。

LEADINGは、スタンバイが先頭アップグレード・グループのメンバーであることを示します。つまり、これは先頭グループ・マスター(LGM)のスタンバイです。LGMは一時的なロジカル・スタンバイに変換されるデータベースです。これはスイッチオーバー後、新しいプライマリ・データベースになります。

TRAILINGは、スタンバイが後続アップグレード・グループのメンバーであることを示します。つまり、これは後続グループ・マスター(TGM)のスタンバイです。TGMは、オリジナルのプライマリ・データベースになります。

LEADING

READY_LGM_LAG_TIME

はい

READY_LGM_LAG_WAITパラメータに関連付けられている適用ラグ時間(秒)。

600

READY_LGM_LAG_TIMEOUT

はい

ローリング・アップグレードを停止するまでにREADY_LGM_LAG_WAITを実行する最長時間(秒)。このパラメータは、READY_LGM_LAG_WAITが1に設定されている場合にのみ有効です。

60

READY_LGM_LAG_WAIT

はい

START_PLANプロシージャで、ユーザー制御を戻す前に、先頭グループ・マスターの適用ラグがREADY_LGM_LAG_TIME秒を下回るまで待機するかどうか。1に設定されている場合、待機が実行されます。0に設定されている場合、待機は実行されません。

0

SWITCH_LGM_LAG_TIME

はい

SWITCH_LGM_LAG_WAITパラメータに関連付けられている適用ラグ時間(秒)。

600

SWITCH_LGM_LAG_TIMEOUT

はい

ローリング・アップグレードを停止するまでにSWITCH_LGM_LAG_WAITを実行する最長時間(秒)。このパラメータは、SWITCH_LGM_LAG_WAITが1に設定されている場合にのみ有効です。

60

SWITCH_LGM_LAG_WAIT

はい

SWITCHOVERプロシージャで、スイッチオーバーを開始する前に、先頭グループ・マスターの適用ラグがSWITCH_LGM_LAG_TIME秒を下回るまで待機するかどうか。1に設定されている場合、待機が実行されます。0に設定されている場合、待機は実行されません。

1

SWITCH_LGS_LAG_TIME

はい

SWITCH_LGS_LAG_WAITパラメータに関連付けられている適用ラグ時間(秒)。

60

SWITCH_LGS_LAG_TIMEOUT

はい

ローリング・アップグレードを停止するまでにSWITCH_LGS_LAG_WAITを実行する最長時間(秒)。このパラメータは、SWITCH_LGS_LAG_WAITが1に設定されている場合にのみ有効です。

60

SWITCH_LGS_LAG_WAIT

はい

SWITCHOVERプロシージャで、スイッチオーバーを開始する前に、先頭グループ・スタンバイの適用ラグがSWITCH_LGS_LAG_TIME秒を下回るまで待機するかどうか。1に設定されている場合、待機が実行されます。0に設定されている場合、待機は実行されません。

0

UPDATED_LGS_TIMEOUT

はい

ローリング・アップグレードを停止するまでにUPDATED_LGS_WAITを実行する最長時間(秒)。このパラメータは、UPDATED_LGS_WAITが1に設定されている場合にのみ有効です。

10800

UPDATED_LGS_WAIT

はい

SWITCHOVERプロシージャで、スイッチオーバーを開始する前に、先頭グループ・スタンバイがアップグレードの再実行のリカバリをすべて完了するまで待機するかどうか。1に設定されている場合、待機が実行されます。0に設定されている場合、待機は実行されません。

1

UPDATED_TGS_TIMEOUT

はい

ローリング・アップグレードを停止するまでにUPDATED_TGS_WAITを実行する最長時間(秒)。このパラメータは、UPDATED_TGS_WAITが1に設定されている場合にのみ有効です。

10800

UPDATED_TGS_WAIT

はい

FINISH_PLANプロシージャで、ユーザーに制御を戻す前に、後続グループ・スタンバイがアップグレードの再実行のリカバリをすべて完了するまで待機するかどうか。1に設定されている場合、待機が実行されます。0に設定されている場合、待機は実行されません。

1

138.3.5 START_PLANプロシージャ

このプロシージャは、ローリング操作を開始します。正常にローリング操作を開始するには、プライマリ・データベースでこのプロシージャを実行する必要があります。

START_PLANプロシージャが完了すると、LGM(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プロシージャを使用して生成済である必要があります。

138.3.6 SWITCHOVERプロシージャ

このプロシージャは、現在のプライマリ・データベースと一時的なロジカル・スタンバイ・データベースとの間でスイッチオーバーを実行します。

このプロシージャが正常終了すると、LGMがData Guard構成のプライマリ・ロールを担当します。

構文

DBMS_ROLLING.SWITCHOVER (); 

パラメータ

このプロシージャのパラメータはありません。

例外

  • 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をすべて適用する必要があるため、スイッチオーバーに長い時間がかかります。

138.3.7 FINISH_PLANプロシージャ

このプロシージャは、ローリング操作を終了します。

フィジカル・スタンバイとしては前回のプライマリ(TGMとも呼ばれる)が構成され、残りのフィジカル・スタンバイは、将来のプライマリによるアップグレードの再実行をリカバリするために構成されます。

構文

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で以前のプライマリと残りのフィジカル・スタンバイを再マウントした後のみです。

138.3.8 ROLLBACK_PLANプロシージャ

このプロシージャは、構成全体のローリング操作をロールバックします。

完了すると、先頭グループに含まれるすべてのデータベースが、元のプライマリ・データベースのフィジカル・スタンバイになります。このプロシージャをコールできるのは、START_PLANプロシージャが起動した後で構成のスイッチオーバー操作が発生していない場合のみです。

構文

DBMS_ROLLING.ROLLBACK_PLAN;

パラメータ

このプロシージャのパラメータはありません。

例外

  • ORA-45400: 現在のデータベースでは操作は許可されていません

  • ORA-45414: リモート・データベースに接続できませんでした

  • ORA-45415: 指示の実行に失敗しました

  • ORA-45441: ロールバックの対象となるデータベースがありません

  • ORA-45442: ロールの変更後はロールバックは実行できません

  • ORA-65040: プラガブル・データベース内からの操作は許可されていません

使用上のノート

  • 一時的なロジカル・スタンバイのアップグレードがすでに実行されている場合、下位バージョンのOracle Databaseでメディア・リカバリを手動で再開する必要があります。