D Oracle Streamsを使用したオンラインでのデータベースのアップグレードおよびメンテナンス
この付録では、Oracle Streamsを使用して、データベースを次のいずれかのOracle Databaseリリースから現在のリリースにアップグレードする方法について説明します。
-
Oracle Database 10gリリース2(10.2)
-
Oracle Database 11gリリース1(11.1)
また、この付録では、Oracle Streamsを使用してOracle Database 11g リリース2 (11.2)以上のデータベースにいくつかのメンテナンス操作を実行する方法についても説明します。これらのメンテナンス操作には、異なるプラットフォームまたはキャラクタ・セットへのOracle Databaseの移行、ユーザー作成アプリケーションのアップグレードおよびOracle Databaseパッチまたはパッチ・セットの適用が含まれます。
この付録で説明するアップグレードおよびメンテナンス操作では、わずかな停止時間または停止時間なしでデータベースを操作するために、Oracle Streamsの機能を使用します。
次の項では、Oracle Streamsを使用したオンラインでのデータベースのメンテナンスについて説明します。
関連項目:
Oracle Database 10gリリース2 (10.2)より前のリリースをアップグレードする手順については、「Oracle Streamsを使用した以前のデータベースのオンラインでのアップグレード」を参照
D.1 Oracle Streamsを使用したアップグレードおよびメンテナンス操作の概要
データベースをアップグレードするには、データベースを長時間停止する必要がある場合があります。また、通常、次のメンテナンス操作を実行するには、データベースを長時間停止する必要があります。
-
異なるプラットフォームへのデータベースの移行
-
異なるキャラクタ・セットへのデータベースの移行
-
ユーザー作成アプリケーションにアップグレードするためのデータベース・スキーマ・オブジェクトの変更
-
Oracle Databaseソフトウェア・パッチまたはパッチ・セットの適用
Oracle Streamsの機能を使用することで、わずかな停止時間または停止時間なしで、これらのアップグレードおよびメンテナンス操作を実行できます。そのためには、Oracle Streamsを使用して、次のデータベースを含むレプリケーション環境を構成します。
-
ソース・データベース: メンテナンス対象の元のデータベース。
-
取得データベース: メンテナンス操作中にソース・データベースに対して行われた変更が取得プロセスによって取得されるデータベース。
-
宛先データベース: メンテナンス操作中にソース・データベースに対して行われた変更が適用プロセスによって適用されるソース・データベースのコピー。
次の一般的な手順で、データベースがオンラインの状態でアップグレードまたはメンテナンス操作を実行できます。
-
空の宛先データベースを作成します。
-
Oracle Streamsのレプリケーション環境を構成します。その環境では、元のデータベースがソース・データベースで、データベースのコピーが宛先データベースです。
DBMS_STREAMS_ADM
パッケージのPRE_INSTANTIATION_SETUP
およびPOST_INSTANTIATION_SETUP
プロシージャで、Oracle Streamsレプリケーション環境を構成します。 -
宛先データベースに対してアップグレードまたはメンテナンス操作を実行します。このとき、元のソース・データベースはオンラインで使用可能です。元のソース・データベースに対する変更は、取得プロセスによって取得されます。
-
Oracle Streamsを使用して、ソース・データベースで行われた変更を宛先データベースに適用します。
-
ソース・データベースで行われた変更を宛先データベースに適用した後、ソース・データベースをオフラインにして、アプリケーションおよびユーザーが宛先データベースを使用できるようにします。
図D-1に、このプロセスの概要を示します。
図D-1 Oracle Streamsを使用したオンラインでのデータベースのアップグレードおよびメンテナンス
![図D-1の説明が続きます 図D-1の説明が続きます](img/strms052.gif)
「図D-1 Oracle Streamsを使用したオンラインでのデータベースのアップグレードおよびメンテナンス」の説明
D.1.1 アップグレードまたはメンテナンス操作中の取得データベース
アップグレードまたはメンテナンス操作中に取得プロセスが作成されるデータベースが、取得データベースです。メンテナンス操作中にソース・データベースにローカル取得プロセスを作成するか、あるいは宛先データベースまたは第3のデータベースにダウンストリーム取得プロセスを作成できます。宛先データベースが取得データベースである場合、取得データベースから宛先データベースへの伝播は不要です。ダウンストリーム取得プロセスを使用すると、メンテナンス操作中にソース・データベースに必要なリソースが削減されます。
注意:
-
Oracle Streamsを使用したデータベースのアップグレードまたはメンテナンス操作を開始する前に、取得データベースとするデータベースを決定してください。
-
RMANの
DUPLICATE
またはCONVERT
DATABASE
コマンドを使用してデータベースのインスタンス化を行う場合、宛先データベースを取得データベースとすることはできません。
関連項目:
D.1.2 アップグレードまたはメンテナンス対象のデータベースの前提条件
この付録で説明する手順は、アップグレードまたはメンテナンス対象のデータベースが次のすべての条件を満たしていることを前提としています。
-
データベースは、既存のOracle Streams環境に含まれない。
-
データベースは、既存のロジカル・スタンバイ環境に含まれない。
-
データベースには、他のデータベースのマテリアライズド・ビューのマスター表である表は存在しない。
-
アップグレードまたはメンテナンス操作中、メッセージはユーザー作成キューにエンキューされない。
D.1.3 ジョブ・スレーブおよびPL/SQLパッケージのサブプログラムに関する考慮事項
可能であれば、アップグレードまたはメンテナンス操作中にジョブ・スレーブを作成、変更または削除しないでください。また、メンテナンス操作中は、ユーザー・データとデータ・ディクショナリ・メタデータを同時に変更するOracle提供のPL/SQLパッケージのサブプログラムを起動しないでください。DBMS_RLS
、DBMS_STATS
およびDBMS_JOB
パッケージには、ユーザー・データとデータ・ディクショナリ・メタデータを同時に変更するサブプログラムが含まれています。
「Oracle Streamsを使用したデータベースのアップグレードまたはメンテナンス操作の実行」の手順19および20で、ソース・データベースと宛先データベースで同じ操作を確実に実行した場合に、データベースでこのような操作が実行される可能性があります。たとえば、メンテナンス操作中に、PL/SQLプロシージャによってソース・データベース上で統計が収集された場合、手順20でも、宛先データベースで同じPL/SQLプロシージャを起動する必要があります。
D.1.4 サポートされないデータベース・オブジェクトの除外
DBMS_STREAMS_ADM
パッケージのPRE_INSTANTIATION_SETUP
およびPOST_INSTANTIATION_SETUP
プロシージャには、次のパラメータがあります。
-
exclude_schemas
-
exclude_flags
これらのパラメータには、Oracle Streams構成から除外するデータベース・オブジェクトを指定します。この付録の例では、これらのパラメータを次の値に設定します。
exclude_schemas => '*', exclude_flags => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED + DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML + DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
これらの値によって、Oracle Streamsでサポートされないすべてのデータベース・オブジェクトが除外されます。exclude_schemas
に指定されているアスタリスク(*
)は、データベース内の各スキーマの一部のデータベース・オブジェクトがレプリケーション環境から除外されることを示します。exclude_flags
パラメータに指定されている値は、サポートされていないすべてのデータベース・オブジェクトに対するDMLおよびDDLの変更がレプリケーション環境から除外されることを示します。ルールは、これらのデータベース・オブジェクトを除外するために取得プロセスのネガティブ・ルール・セットに入れられます。
サポートされていないデータベース・オブジェクトを表示するには、ソース・データベースでDBA_STREAMS_UNSUPPORTED
データ・ディクショナリ・ビューを問い合せます。これらのパラメータ設定を使用すると、このビューに表示されたデータベース・オブジェクトは、メンテナンス操作中にOracle Streamsによってメンテナンスされません。そのため、「タスク1: メンテナンス操作の開始」の手順7では、データベースのアップグレードまたはメンテナンス操作中にこれらのデータベース・オブジェクトが変更されないようにする必要があります。
注意:
「ユーザー定義型を含むデータベースのアップグレードまたはメンテナンスの準備」で、メンテナンス操作中にユーザー定義型を含む表に対して行われる変更を保持する方法について説明しています。この方法を使用すると、メンテナンス操作中に、ユーザー定義型を含む表をオープン状態のままにできます。
関連項目:
exclude_schemas
およびexclude_flags
パラメータの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照
D.2 データベースのアップグレードまたはメンテナンス操作の準備
この項では、Oracle Streamsを使用したデータベースのアップグレードまたはメンテナンス操作を開始する前に完了する必要があるタスクについて説明します。
D.2.1 ダウンストリーム取得の準備
宛先データベースまたは第3のデータベースを取得データベースにすることを決定した場合、ソース・データベースから取得データベースにログ・ファイルがコピーされるように構成して、ダウンストリーム取得のための準備を行う必要があります。ソース・データベースを取得データベースにすることを決定した場合、ログ・ファイルのコピーは不要です。決定については、「アップグレードまたはメンテナンス操作中の取得データベース」を参照してください。
次の手順に従って、ソース・データベースのREDOログ・ファイルを取得データベースにコピーするための準備、および取得データベースでそれらのREDOログ・ファイルを受け入れるための準備を行います。
関連項目:
取得データベースの詳細は、「Oracle Streamsを使用したアップグレードおよびメンテナンス操作の概要」を参照
D.2.2 ユーザー定義型を含むデータベースのアップグレードまたはメンテナンスの準備
ユーザー定義型には、オブジェクト型、REF
値、VARRAY、ネストした表などがあります。今回のリリースでは、Oracle Streamsの取得プロセスおよび適用プロセスでは、ユーザー定義型はサポートされていません。この項では、Oracle Streamsを使用してユーザー定義型を含むデータベースにアップグレードまたはメンテナンス操作を実行する方法について説明します。
1つの方法は、操作中に、ユーザー定義型を含む表に対して、データ操作言語(DML)またはデータ定義言語(DDL)の変更が行われないようにすることです。この場合、これらの表は宛先データベースでインスタンス化され、操作中にその表に対する変更は行われません。操作の完了後に、宛先データベースでユーザー定義型を含む表を読取り/書込み可能にします。
ただし、操作中にユーザー定義型を含む表をオープン状態のままにしておく必要がある場合は、次の一般的な手順を実行して、操作中にこれらのデータ型に対する変更を保持してください。
- ソース・データベースで、ユーザー定義型を含む表に対する行変更を格納するための1つ以上のロギング表を作成します。ロギング表の各列では、Oracle Streamsでサポートされているデータ型を使用する必要があります。
- ソース・データベースで、ユーザー定義のデータ型を含む表で起動されるDMLトリガーを作成します。このトリガーによって、各行変更が等価なリレーショナルに変換され、手順1で作成したロギング表に変更された行が記録されます。
- ロギング表に対する変更を取得し、必要に応じて宛先データベースに伝播するように、取得プロセスおよび伝播が構成されていることを確認します。ユーザー定義型を含む表に対する変更は、取得または伝播されないようにする必要があります。そのため、
PRE_INSTANTIATION_SETUP
およびPOST_INSTANTIATION_SETUP
プロシージャによって、ロギング表が含まれ、ユーザー定義型を含む表が除外されていることを確認します。 - 宛先データベースで、ロギング表に対する変更を処理するDMLハンドラを使用するように適用プロセスを構成します。DMLハンドラによって等価なリレーショナルからユーザー定義型が再構成され、ユーザー定義型を含む表に対する変更が適用されます。
手順については、Webブラウザを使用してMy Oracle Support (旧OracleMetaLink) Webサイトを参照してください。
http://support.oracle.com/
Oracle Streamsの追加のデータ型のサポートについては、データベース掲示板556742.1で説明されています。
関連項目:
-
トリガーを作成する方法の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照
D.2.3 ユーザー作成アプリケーションへのアップグレード準備
この項の内容は、操作にユーザー作成アプリケーションのアップグレードが必要な場合にのみ該当します。ユーザー作成アプリケーションのアップグレード中にスキーマ・オブジェクトを変更できますが、データベースのみでは検出できない論理的な依存性が存在する場合があります。次の各項では、アプリケーションのアップグレード中に発生するこれらの問題を処理する方法について説明します。
D.2.3.1 スキーマ・オブジェクトに対する変更の処理
ユーザー作成アプリケーションをアップグレードする場合は、通常、データベースのスキーマ・オブジェクトを、アップグレード後のアプリケーションをサポートするように変更します。Oracle Streamsでは、行論理変更レコード(LCR)に、DML文の実行結果である行変更の情報が含まれます。宣言ルールベースの変換またはDMLハンドラでは、宛先データベースの変更された表に行LCRが適用されるように、ソース・データベースのREDOログから取得された行LCRを変更できます。
ルールベースの変換は、ポジティブ・ルール・セットのルールがTRUE
に評価される場合に発生するメッセージの変更です。宣言ルールベースの変換では、行LCRの一連の一般的な変換を実行できます。宣言ルールベースの変換は、PL/SQLを使用せずに内部的に実行されます。このような変換は、DBMS_STREAMS_ADM
パッケージのプロシージャを使用して指定します。宣言ルールベースの変換では、取得、伝播または適用中に行LCRを変更できます。
DMLハンドラは、ソース・データベースで実行したDML文によって発生した行LCRを処理するSQL文のコレクションまたはユーザー・プロシージャです。宛先データベースのOracle Streamsの適用プロセスが行LCRをDMLハンドラに渡し、DMLハンドラが行LCRを変更できます。
Oracle Streamsを使用してユーザー作成アプリケーションをアップグレードするプロセスには、インスタンス化後に宛先データベースで行うスキーマ・オブジェクトの変更および作成が含まれる場合があります。宛先データベースで1つ以上の宣言ルールベースの変換およびDMLハンドラを使用して、ソース・データベースからの変更が、変更済のスキーマ・オブジェクトに正確に適用されるように、それらの変更を処理できます。アプリケーションのアップグレード中に宣言ルールベースの変換およびDMLハンドラを使用して、ソース・データベースと宛先データベースの差異を考慮できます。
通常、宣言ルールベースの変換の方がDMLハンドラより簡単に使用できます。そのため、行LCRの変更が必要な場合、まず宣言ルールベースの変換を構成します。宣言ルールベースの変換では不十分な場合には、DMLハンドラを使用します。1つ以上のLOB列が含まれる表の行LCRを変更する必要がある場合、プロシージャDMLハンドラおよびLOBアセンブリを使用する必要があります。
データベースのアップグレードまたはメンテナンス操作を開始する前に、次のタスクを実行して、宣言ルールベースの変換またはDMLハンドラを準備する必要があります。
-
宣言ルールベースの変換について理解します。「宣言ルールベースの変換」を参照してください。
-
DMLハンドラについて理解します。「適用プロセスのメッセージ処理オプション」を参照してください。
-
宛先データベースで宣言ルールベースの変換とDMLハンドラのどちらが必要になるかを決定します。アップグレードしたアプリケーションで必要なスキーマ・オブジェクトへの変更によって、どちらが必要になるが異なります。
-
データベースのメンテナンス操作のDMLハンドラで使用するSQL文またはPL/SQLプロシージャを作成します。PL/SQLプロシージャを作成する方法については、「DMLハンドラの管理」を参照してください。
-
1つ以上のLOB列が含まれる表の行LCRを変更する必要がある場合、LOBアセンブリの使用方法について理解します。『Oracle Streamsレプリケーション管理者ガイド』を参照してください。
注意:
カスタム・ルールベースの変換を使用して、アプリケーションのアップグレード中に行LCRを変更することもできます。ただし、これらの変更はDMLハンドラを使用して実行可能であり、DMLハンドラの方がカスタム・ルールベースの変換より効率的です。
D.2.3.2 論理的な依存性の処理
適用プロセスでは、パラレルで適用される行LCR間の依存性を検出するために、追加の情報が必要になる場合があります。アプリケーションのアップグレード中、次のような状況で、依存性を検出するために適用プロセスに追加の情報が必要になる場合があります。
-
データベースではなくアプリケーションに論理的な依存性がある。
-
アプリケーションのアップグレードをサポートするようにスキーマ・オブジェクトが変更されており、DMLハンドラがソース・データベースと宛先データベースの差異を考慮するために行LCRを変更する。
仮想依存性定義とは、宛先データベースでトランザクション間の依存性を検出するために、適用プロセスで使用される依存性の記述です。仮想依存性定義は、宛先データベースのデータ・ディクショナリの制約としては記述されません。かわりに、DBMS_APPLY_ADM
パッケージのプロシージャを使用して指定されます。仮想依存性定義を使用すると、適用プロセスで、データ・ディクショナリの制約情報のみを使用した場合には検出できない依存性を検出できるようになります。依存性が検出されると、適用プロセスは、LCRおよびトランザクションを正しい順序で適用するようにスケジュールします。
アプリケーションのアップグレードに仮想依存性定義が必要な場合、仮想依存性定義について理解し、アプリケーションのアップグレード中に仮想依存性定義を構成することを計画します。
関連項目:
仮想依存性定義の詳細は、「適用プロセスおよび依存性」を参照
D.2.4 Oracle Streamsを直接構成するかスクリプトを生成するかの決定
DBMS_STREAMS_ADM
パッケージのPRE_INSTANTIATION_SETUP
およびPOST_INSTANTIATION_SETUP
プロシージャで、アップグレードまたはメンテナンス操作中のOracle Streamsレプリケーション環境を構成します。この項のプロシージャでは、Oracle Streamsレプリケーション環境を直接構成するか、または環境を構成するスクリプトを生成できます。
スクリプトを実行するよりプロシージャを使用してレプリケーションを直接構成する方が簡単で、環境が即時に構成されます。ただし、次の理由でスクリプトを生成することもあります。
-
環境を構成する前にプロシージャによって実行される操作を確認する必要がある。
-
構成をカスタマイズするためにスクリプトを変更する必要がある。
これらのプロシージャのいずれかを実行するときにOracle Streamsを直接構成するには、perform_actions
パラメータをTRUE
に設定します。この付録の例では、プロシージャによってOracle Streamsが直接構成されると想定しています。
これらのプロシージャのいずれかを実行するときに構成スクリプトを生成するには、この付録でこれらのプロシージャを実行する際に、次の手順を実行します。
D.2.5 インスタンス化で使用するユーティリティの決定
データベースのアップグレードまたはメンテナンス操作を始める前に、操作中に宛先データベースをインスタンス化するために、エクスポート/インポート・ユーティリティ(データ・ポンプまたはオリジナル)を使用するか、Recovery Manager(RMAN)ユーティリティを使用するかを決定します。宛先データベースのインスタンス化にどちらのユーティリティを使用するかを決定するには、次の事項を考慮します。
-
データベースを異なるプラットフォームに移行する場合は、エクスポート/インポートまたはRMANの
CONVERT
DATABASE
コマンドを使用します。RMANのDUPLICATE
コマンドを使用しても、データベースを異なるオペレーティング・システムに移行できません。 -
データベースを異なるキャラクタ・セットに移行する場合は、エクスポート/インポートを使用する必要があり、新しいキャラクタ・セットは古いキャラクタ・セットのスーパーセットである必要があります。RMANの
DUPLICATE
およびCONVERT
DATABASE
コマンドを使用しても、データベースを異なるキャラクタ・セットに移行できません。 -
以前のリリースのOracle DatabaseをOracle Database 11g リリース2 (11.2)以上にアップグレードする場合は、さらに次の点を考慮してください。
-
RMANを使用できる場合は、特にデータベースが大きい場合に、RMANを使用する方が、エクスポート/インポートを使用するより速くインスタンス化を実行できます。
-
分散トランザクションが可能な環境でインスタンス化を行う場合は、RMANを使用しないことをお薦めします。これを行うと、手動での修正が必要なインダウント・トランザクションが実行される場合があります。
-
RMANの
DUPLICATE
またはCONVERT
DATABASE
コマンドを使用してデータベースのインスタンス化を行う場合、宛先データベースを取得データベースとすることはできません。 -
以前のリリースのOracle DatabaseをOracle Database 11g リリース2 (11.2)以上にアップグレードする場合は、さらに次の点を考慮してください。
-
エクスポート/インポートを使用すると、操作の最初で、宛先データベースをOracle Database 11g リリース2 (11.2)以上のデータベースにできます。つまり、インスタンス化の後、宛先データベースをアップグレードする必要はありません。
-
RMANの
DUPLICATE
を使用する場合は、宛先データベースのデータベース・リリースがソース・データベースと同じである必要があります。 -
RMANの
CONVERT
DATABASE
を使用する場合は、宛先データベースのデータベース・リリースがソース・データベース以上である必要があります。
-
表D-1に、ソース・データベースと宛先データベースのプラットフォームまたはキャラクタ・セットが同じまたは異なる場合に、各インスタンス化方法がサポートされるかどうかを示します。
表D-1 Oracle Streamsを使用したデータベースのメンテナンスのためのインスタンス化方法
インスタンス化方法 | プラットフォームが同じ場合にサポートされるかどうか | プラットフォームが異なる場合にサポートされるかどうか | キャラクタ・セットが同じ場合にサポートされるかどうか | キャラクタ・セットが異なる場合にサポートされるかどうか |
---|---|---|---|---|
データ・ポンプ・エクスポート/インポート |
はい |
はい |
はい |
はい |
RMAN |
はい |
いいえ |
はい |
いいえ |
RMAN |
いいえ |
場合による |
はい |
いいえ |
RMANのCONVERT
DATABASE
コマンドがサポートされるプラットフォームの組合せは限られています。DBMS_TDB
パッケージを使用すると、任意のプラットフォームの組合せでサポートされているかどうかを判別できます。
関連項目:
-
Oracle Streamsのインスタンス化の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照
-
RMANの
DUPLICATE
およびCONVERT
DATABASE
コマンドを使用する手順については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照 -
RMANの
DUPLICATE
およびCONVERT
DATABASE
コマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照 -
DBMS_TDB
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照 -
キャラクタ・セット変換およびエクスポート/インポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照
D.3 Oracle Streamsを使用したデータベースのアップグレードまたはメンテナンス操作の実行
この項では、Oracle Databaseに対して次のいずれかの操作を実行する方法について説明します。
-
Oracle Database 10g リリース2(10.2)またはOracle Database 11g リリース1(11.1)から現在のリリースのOracle Databaseへのアップグレード
-
異なるプラットフォームへのデータベースの移行
-
異なるキャラクタ・セットへのデータベースの移行
-
ユーザー作成アプリケーションにアップグレードするためのデータベース・スキーマ・オブジェクトの変更
-
Oracle Databaseソフトウェア・パッチまたはパッチ・セットの適用
Oracle Streamsを使用すると、わずかな停止時間または停止時間なしで、これらの操作を実行できます。操作中、ソース・データベースは、データベースの操作を実行している既存のデータベースです。取得データベースは、Oracle Streamsの取得プロセスが実行されるデータベースです。宛先データベースは、操作の最後で、ソース・データベースと置き換えられるデータベースです。
Oracle Streamsを使用してデータベースのメンテナンス操作を実行するには、次のタスクを実行します。
D.3.1 タスク1: 操作の開始
次の手順を実行して、Oracle Streamsを使用したアップグレードまたはメンテナンス操作を開始します。
ヒント:
Oracle Database 11g リリース1 (11.1)以上のデータベースでは、ALTER
TABLE
文とともにREAD
ONLY
句を使用して、表を読取り専用にできます。
D.3.2 タスク2: インスタンス化前のOracle Streamsの設定
インスタンス化の前にOracle Streamsを設定する手順は、取得データベースとするデータベースによって異なります。PRE_INSTANTIATION_SETUP
プロシージャを実行すると、常に、このプロシージャが実行されるデータベースに取得プロセスが構成されます。そのため、このプロシージャは取得データベースで実行する必要があります。
このプロシージャを実行する場合、プロシージャによって構成が直接実行されるようにするか、またはプロシージャによって構成アクションが含まれるスクリプトが生成されるようにするかを指定できます。「Oracle Streamsを直接構成するかスクリプトを生成するかの決定」を参照してください。この項の例では、プロシージャによって構成が直接実行されるように指定します。
次のいずれかの項の手順に従ってください。
注意:
perform_actions
パラメータをTRUE
に設定してPRE_INSTANTIATION_SETUP
プロシージャを実行すると、構成アクションに関するメタデータがデータ・ディクショナリ・ビューDBA_RECOVERABLE_SCRIPT
、DBA_RECOVERABLE_SCRIPT_PARAMS
、DBA_RECOVERABLE_SCRIPT_BLOCKS
およびDBA_RECOVERABLE_SCRIPT_ERRORS
に記録されます。エラーが発生したためにプロシージャが停止した場合、DBMS_STREAMS_ADM
パッケージのRECOVER_OPERATION
プロシージャを使用して、エラーの原因となった条件を訂正してから構成を完了できます。スクリプトを使用してレプリケーション環境を構成する場合、これらのビューは移入されません。
関連項目:
-
取得データベースの詳細は、「Oracle Streamsを使用したアップグレードおよびメンテナンス操作の概要」を参照
-
RECOVER_OPERATION
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照
D.3.2.1 取得データベースにソース・データベースを使用する場合
取得データベースにソース・データベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。
D.3.3 タスク3: データベースのインスタンス化
「インスタンス化で使用するユーティリティの決定」で、データベース全体をインスタンス化するための様々な方法について説明しています。使用するインスタンス化方法に基づいて、次のいずれかの項の手順を実行します。
関連項目:
インスタンス化の実行の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照
D.3.3.2 RMANのDUPLICATEコマンドを使用したデータベースのインスタンス化
同じプラットフォーム上でのインスタンス化にRMANのDUPLICATE
コマンドを使用する場合、次の手順を実行します。
関連項目:
RMANのDUPLICATE
コマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。
D.3.3.3 RMANのCONVERT DATABASEコマンドを使用したデータベースのインスタンス化
インスタンス化にRMANのCONVERT
DATABASE
コマンドを使用してデータベースを異なるプラットフォームに移行する場合、次の手順を実行します。
-
ソース・データベースのバックアップを作成します(存在しない場合)。RMANでは、有効なバックアップが必要です。ここでは、バックアップがまだの場合は、
orcl.example.com
のバックアップを作成します。 -
SQL*Plusで、ソース・データベースに管理ユーザーとして接続します。
SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
-
現行のオンラインREDOログをアーカイブします。次に例を示します。
ALTER SYSTEM ARCHIVE LOG CURRENT;
-
データベースの変換用に環境を準備します。たとえば、ソース・データベースを読取り専用モードでオープンします。手順は次のとおりです。
-
ソース・データベースがオープンしている場合は、停止して読取り専用モードで起動します。
-
DBMS_TDB
パッケージのCHECK_DB
およびCHECK_EXTERNAL
ファンクションを実行します。結果をチェックして、RMANのCONVERT
DATABASE
コマンドで変換がサポートされていることを確認します。
関連項目:
これらの手順の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照
-
-
ソース・データベースの現行のSCNを判別します。
SET SERVEROUTPUT ON SIZE 1000000 DECLARE current_scn NUMBER; BEGIN current_scn:= DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER; DBMS_OUTPUT.PUT_LINE('Current SCN: ' || current_scn); END; /
戻されたSCN値を書き留めます。「タスク4: インスタンス化後のOracle Streamsの設定」で、インスタンス化SCNにこの数を使用します。この例では、戻される値を
748044
と想定しています。 -
RMANクライアントを起動し、
TARGET
としてのソース・データベースorcl.example.com
に管理ユーザーとして接続します。RMANの
CONNECT
コマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。 -
CONVERT
DATABASE
コマンドを実行します。CONVERT
DATABASE
コマンドでNEW
DATABASE
database_name
を使用して、宛先データベースの名前を指定する必要があります。この例では、宛先データベースの名前をstms
とします。つまり、この例のCONVERT
DATABASE
コマンドには、NEW
DATABASE
stms
が含まれます。Linux
IA
(64-bit)
プラットフォームで実行される宛先データベースに対するRMANのCONVERT
DATABASE
コマンドの例を次に示します。CONVERT DATABASE NEW DATABASE 'stms' TRANSPORT SCRIPT '/tmp/convertdb/transportscript.sql' TO PLATFORM 'Linux IA (64-bit)' DB_FILE_NAME_CONVERT = ('/home/oracle/dbs','/tmp/convertdb');
-
RMANの
CONVERT
DATABASE
コマンドによって生成されたデータファイル、PFILEおよびSQLスクリプトを、宛先データベースが実行されているコンピュータ・システムに転送します。 -
宛先データベースが実行されているコンピュータ・システムで、制限付きセッションが有効にされた状態で宛先データベースが常にオープンするようにSQLスクリプトを変更します。
次のスクリプトの例では、必要な変更を太字で示しています。
-- The following commands will create a control file and use it -- to open the database. -- Data used by Recovery Manager will be lost. -- The contents of online logs will be lost and all backups will -- be invalidated. Use this only if online logs are damaged. -- After mounting the created controlfile, the following SQL -- statement will place the database in the appropriate -- protection mode: -- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE STARTUP NOMOUNT PFILE='init_00gd2lak_1_0.ora' CREATE CONTROLFILE REUSE SET DATABASE "STMS" RESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 32 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 '/tmp/convertdb/archlog1' SIZE 25M, GROUP 2 '/tmp/convertdb/archlog2' SIZE 25M DATAFILE '/tmp/convertdb/systemdf', '/tmp/convertdb/sysauxdf', '/tmp/convertdb/datafile1', '/tmp/convertdb/datafile2', '/tmp/convertdb/datafile3' CHARACTER SET WE8DEC ; -- NOTE: This ALTER SYSTEM statement is added to enable restricted session. ALTER SYSTEM ENABLE RESTRICTED SESSION; -- Database can now be opened zeroing the online logs. ALTER DATABASE OPEN RESETLOGS; -- No tempfile entries found to add. -- set echo off prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ prompt * Your database has been created successfully! prompt * There are many things to think about for the new database. Here prompt * is a checklist to help you stay on track: prompt * 1. You may want to redefine the location of the directory objects. prompt * 2. You may want to change the internal database identifier (DBID) prompt * or the global database name for this database. Use the prompt * NEWDBID Utility (nid). prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SHUTDOWN IMMEDIATE -- NOTE: This startup has the UPGRADE parameter. -- The startup already has restricted session enabled, so no change is needed. STARTUP UPGRADE PFILE='init_00gd2lak_1_0.ora' @@ ?/rdbms/admin/utlirp.sql SHUTDOWN IMMEDIATE -- NOTE: The startup below is generated without the RESTRICT clause. -- Add the RESTRICT clause. STARTUP RESTRICT PFILE='init_00gd2lak_1_0.ora' -- The following step will recompile all PL/SQL modules. -- It may take serveral hours to complete. @@ ?/rdbms/admin/utlrp.sql set feedback 6;
スクリプトに対して他の変更が必要な場合もあります。たとえば、宛先データベースのコンピュータ・システムの正しい位置を指すようにデータファイルの位置およびPFILEの位置を変更する必要がある場合があります。
-
SQL*Plusで、宛先データベースにシステム管理者として接続します。
-
グローバル名を変更します。RMANを使用してデータベースをインスタンス化すると、宛先データベースとソース・データベースのグローバル名が同じになりますが、宛先データベースの名前は、メンテナンス操作が完了するまで元の名前である必要があります。次の文を使用して、宛先データベースのグローバル名を元の名前に戻します。
ALTER DATABASE RENAME GLOBAL_NAME TO stms.example.com;
-
データベースを以前のリリースからOracle Database 11g リリース2以上にアップグレードする場合は、宛先データベースをアップグレードします。詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。データベースをアップグレードしない場合は、この手順をスキップし、次の手順に進んでください。
-
新しいグローバル名を使用して、宛先データベースにOracle Streams管理者として接続します。
-
ソース・データベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK orcl.example.com CONNECT TO strmadmin IDENTIFIED BY password USING 'orcl.example.com';
このデータベース・リンクは、
POST_INSTANTIATION_SETUP
プロシージャによって、宛先データベースでDBMS_APPLY_ADM
パッケージのSET_GLOBAL_INSTANTIATION_SCN
プロシージャが実行されるために必要です。SET_GLOBAL_INSTANTIATION_SCN
プロシージャには、データベース・リンクが必要です。 -
ソース・データベースと取得データベースが同じデータベースの場合、SQL*Plusで宛先データベースにOracle Streams管理者として接続した状態で、ソース・データベースからクローニングされた、ソース・データベースから宛先データベースへのデータベース・リンクを削除します。
DROP DATABASE LINK stms.example.com;
D.3.4 タスク4: インスタンス化後のOracle Streamsの設定
インスタンス化の後にOracle Streamsを設定するには、POST_INSTANTIATION_SETUP
プロシージャを実行します。POST_INSTANTIATION_SETUP
プロシージャは、「タスク2: インスタンス化前のOracle Streamsの設定」でPRE_INSTANTIATION_SETUP
プロシージャを実行したデータベースで実行する必要があります。
POST_INSTANTIATION_SETUP
プロシージャを実行する場合、プロシージャによって構成が直接実行されるようにするか、またはプロシージャによって構成アクションが含まれるスクリプトが生成されるようにするかを指定できます。「Oracle Streamsを直接構成するかスクリプトを生成するかの決定」を参照してください。この項の例では、プロシージャによって構成が直接実行されるように指定します。
perform_actions
、script_name
、script_directory_object
およびstart_processes
を除き、PRE_INSTANTIATION_SETUP
とPOST_INSTANTIATION_SETUP
プロシージャに指定されているパラメータ値は一致する必要があります。次の例では、2つのプロシージャのすべてのパラメータ値が一致しています。
POST_INSTANTIATION_SETUP
プロシージャのinstantiation_scn
パラメータを正しく設定することが重要です。このパラメータを設定するには、次の手順を実行します。
-
インスタンス化にRMANを使用した場合、
instantiation_scn
パラメータをインスタンス化中に判別した値に設定します。この値は、「RMANのDUPLICATEコマンドを使用したデータベースのインスタンス化」または「RMANのCONVERT DATABASEコマンドを使用したデータベースのインスタンス化」でインスタンス化を実行したときに判別した値です。この項に示すソース・データベースと第3のデータベースの例では、次のような理由で、
instantiation_scn
パラメータを748044
に設定します。-
インスタンス化にRMANの
DUPLICATE
コマンドを使用した場合、UNTIL
SCN
句で指定したSCN値より1少ないSCNまでデータベースが複製されます。つまり、「RMANのDUPLICATEコマンドを使用したデータベースのインスタンス化」の手順7でDUPLICATE
コマンドを実行したときに指定した終了SCN値から1を引きます。この場合、終了SCN値は748045
でした。つまり、instantiation_scn
パラメータは、 748045 - 1で748044
となります。 -
インスタンス化にRMANの
CONVERT
DATABASE
コマンドを使用した場合、instantiation_scn
パラメータはCONVERT
DATABASE
コマンドを実行する直前に判別したSCN値に設定する必要があります。この値は、「RMANのCONVERT DATABASEコマンドを使用したデータベースのインスタンス化」の手順5で判別しています。
-
-
インスタンス化にエクスポート/インポートを使用した場合、インスタンス化SCNはインポート中に設定されているため、
instantiation_scn
パラメータをNULL
に設定する必要があります。この項に示す宛先データベースの例では、宛先データベースを取得データベースとする場合にはデータベースのインスタンス化にRMANを使用できないため、instantiation_scn
をNULL
に設定します。
インスタンス化の後にOracle Streamsを設定する手順は、取得データベースとするデータベースによって異なります。次のいずれかの項の手順に従ってください。
注意:
perform_actions
パラメータをTRUE
に設定してPOST_INSTANTIATION_SETUP
プロシージャを実行すると、構成アクションに関するメタデータがデータ・ディクショナリ・ビューDBA_RECOVERABLE_SCRIPT
、DBA_RECOVERABLE_SCRIPT_PARAMS
、DBA_RECOVERABLE_SCRIPT_BLOCKS
およびDBA_RECOVERABLE_SCRIPT_ERRORS
に記録されます。エラーが発生したためにプロシージャが停止した場合、DBMS_STREAMS_ADM
パッケージのRECOVER_OPERATION
プロシージャを使用して、エラーの原因となった条件を訂正してから構成を完了できます。スクリプトを使用してレプリケーション環境を構成する場合、これらのビューは移入されません。
関連項目:
-
取得データベースの詳細は、「Oracle Streamsを使用したアップグレードおよびメンテナンス操作の概要」を参照
-
RECOVER_OPERATION
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照
D.3.4.1 取得データベースにソース・データベースを使用する場合
取得データベースにソース・データベースを使用する場合、次の手順を実行して、インスタンス化の後にOracle Streamsを設定します。
D.3.5 タスク5: アップグレードまたはメンテナンス操作の完了およびOracle Streamsの削除
次の手順を実行して、Oracle Streamsを使用したアップグレードまたはメンテナンス操作を完了し、Oracle Streamsコンポーネントを削除します。
-
宛先データベースで、ソース・データベースからレプリケートされるデータを変更するインポート済のジョブを無効にします。
DBA_JOBS
データ・ディクショナリ・ビューを問い合せて、ジョブを表示します。 -
ここで、パッチまたはパッチ・セットを宛先データベースに適用します。パッチまたはパッチ・セットに付属の手順に従います。パッチまたはパッチ・セットを適用しない場合は、この手順をスキップし、次の手順に進んでください。
-
ユーザー作成アプリケーションをアップグレードする場合は、宛先データベースで、次の手順の実行が必要な場合があります。
-
データベースのスキーマ・オブジェクトを、アップグレード後のユーザー作成アプリケーションをサポートするように変更します。
-
ソース・データベースからの行LCRが、適用プロセスによって変更済のスキーマ・オブジェクトに正確に適用されるように、これらの行LCRを変更する1つ以上の宣言ルールベースの変換およびプロシージャDMLハンドラを構成します。たとえば、アップグレード済のユーザー作成アプリケーションをサポートするように列名が変更された場合、宣言ルールベースの変換では、列を含む行LCRで列の名前が変更される必要があります。
「スキーマ・オブジェクトに対する変更の処理」を参照してください。
-
適用プロセスのみでは検出できない論理的な依存性が行LCRに含まれる場合、1つ以上の仮想依存性定義を構成します。
「論理的な依存性の処理」を参照してください。
-
-
SQL*Plusで、管理ユーザーとして宛先データベースに接続します。
SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
-
RESTRICTED
SESSION
を無効にするには、ALTER
SYSTEM
文を使用します。ALTER SYSTEM DISABLE RESTRICTED SESSION;
-
SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。
-
適用プロセスを開始します。次に例を示します。
BEGIN DBMS_APPLY_ADM.START_APPLY( apply_name => 'apply_maint'); END; /
-
SQL*Plusで、Oracle Streams管理者として取得データベースに接続します。
-
取得プロセスを起動します。次に例を示します。
BEGIN DBMS_CAPTURE_ADM.START_CAPTURE( capture_name => 'capture_maint'); END; /
この手順は、宛先データベースのインスタンス化中に、ソース・データベースに対して行われた変更をレプリケートするプロセスを起動します。
-
適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用するまで、Oracle Streams環境を監視します。
適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用したかどうかを判断するには、次の手順を実行します。
-
取得プロセスのエンキュー・メッセージ番号、および適用プロセスのシステム変更番号(SCN)が最も古いメッセージを問い合せ、これらがほとんど等しいかどうかを確認します。
たとえば、取得プロセスの名前が
capture_maint
、適用プロセスの名前がapply_maint
の場合は、取得データベースで次の問合せを実行します。COLUMN ENQUEUE_MESSAGE_NUMBER HEADING 'Captured SCN' FORMAT 99999999999 COLUMN OLDEST_SCN_NUM HEADING 'Oldest Applied SCN' FORMAT 99999999999 SELECT c.ENQUEUE_MESSAGE_NUMBER, a.OLDEST_SCN_NUM FROM V$STREAMS_CAPTURE c, V$STREAMS_APPLY_READER@stms.example.com a WHERE c.CAPTURE_NAME = 'CAPTURE_MAINT' AND a.APPLY_NAME = 'APPLY_MAINT';
この問合せで戻される2つの値がほぼ同じ場合は、ソース・データベースからのほとんどの変更が宛先データベースに適用済で、次の手順に進むことができます。この時点では、ソース・データベースがまだ変更可能であるため、この問合せで同じ値が戻されることはありません。
この問合せで結果が返されない場合は、取得データベースの
DBA_CAPTURE
ビューおよび宛先データベースのDBA_APPLY
ビューのSTATUS
列を問い合せて、環境のOracle Streamsクライアントが有効かどうかを確認します。伝播を使用する場合、「伝播ジョブのスケジュールに関する情報の表示」にある問合せを実行して、伝播の状態を確認できます。Oracle Streamsクライアントが無効な場合は、再起動します。Oracle Streamsクライアントが再起動されない場合は、「Oracle Streams環境内での問題の特定」を参照して、環境に対するトラブルシューティングを実行します。
-
宛先データベースでの適用サーバーの適用プロセスの状態を問い合せ、変更の適用が終了しているかどうかを確認します。
たとえば、適用プロセスの名前が
apply_maint
である場合は、ソース・データベースで次の問合せを実行します。COLUMN STATE HEADING 'Apply Server State' FORMAT A20 SELECT STATE FROM V$STREAMS_APPLY_SERVER@stms.example.com WHERE APPLY_NAME = 'APPLY_MAINT';
すべての適用サーバーの状態が
IDLE
であれば、次の手順に進むことができます。
-
-
宛先データベースにOracle Streams管理者として接続します。
-
次の問合せを実行して、適用エラーがないことを確認します。
SELECT COUNT(*) FROM DBA_APPLY_ERROR;
この問合せで0(ゼロ)が戻されたら、次の手順に進みます。この問合せでエラー・キューにエラーが表示される場合は、エラーを解決してから次の手順に進みます。詳細は、「適用エラーの管理」を参照してください。
-
ソース・データベースから、すべてのアプリケーションとユーザーの接続を切断します。
-
ソース・データベースに管理ユーザーとして接続します。
-
データベースへのアクセスを制限します。次に例を示します。
ALTER SYSTEM ENABLE RESTRICTED SESSION;
-
SQL*Plusでソース・データベースに管理ユーザーとして接続した状態で、手順1010.aで実行した問合せを再度実行します。この問合せで返される2つの値が同じ場合は、ソース・データベースからのすべての変更が宛先データベースに適用済で、次の手順に進むことができます。
-
宛先データベースにOracle Streams管理者として接続します。
-
手順12で実行した問合せを再度実行します。この問合せで0(ゼロ)が戻されたら、次の手順に進みます。この問合せでエラー・キューにエラーが表示される場合は、エラーを解決してから次の手順に進みます。詳細は、「適用エラーの管理」を参照してください。
-
アップグレードまたはメンテナンス操作中にソース・データベースでジョブ・スレーブを作成、変更または削除するアクションを実行した場合は、同じアクションを宛先データベースで実行します。詳細は、「ジョブ・スレーブおよびPL/SQLパッケージのサブプログラムに関する考慮事項」を参照してください。
-
ユーザー・データとディクショナリ・メタデータを同時に変更するアップグレードまたはメンテナンス操作中に、Oracleが提供するPL/SQLパッケージのサブプログラムをソース・データベースで起動した場合、同じサブプログラムを宛先データベースで起動します。詳細は、「ジョブ・スレーブおよびPL/SQLパッケージのサブプログラムに関する考慮事項」を参照してください。
-
両方のデータベースから、
ANYDATA
キュー、サプリメンタル・ロギングの指定、取得プロセス、伝播(存在する場合)、適用プロセスなど、不要になったOracle Streamsコンポーネントを削除します。SQL*Plusで、取得データベースにOracle Streams管理者として接続し、CLEANUP_INSTANTIATION_SETUP
プロシージャを実行して両方のデータベースからOracle Streamsコンポーネントを削除します。取得データベースにソース・データベースまたは第3のデータベースを使用する場合、次のプロシージャを実行します。
DECLARE empty_tbs DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET; BEGIN DBMS_STREAMS_ADM.CLEANUP_INSTANTIATION_SETUP( maintain_mode => 'GLOBAL', tablespace_names => empty_tbs, source_database => 'orcl.example.com', destination_database => 'stms.example.com', perform_actions => TRUE, script_name => NULL, script_directory_object => NULL, capture_name => 'capture_maint', capture_queue_table => 'strmadmin.capture_q_table', capture_queue_name => 'strmadmin.capture_q', propagation_name => 'prop_maint', apply_name => 'apply_maint', apply_queue_table => 'strmadmin.apply_q', apply_queue_name => 'strmadmin.apply_q_table', bi_directional => FALSE, change_global_name => TRUE); END; /
取得データベースに宛先データベースを使用する場合、次のプロシージャを実行します。
DECLARE empty_tbs DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET; BEGIN DBMS_STREAMS_ADM.CLEANUP_INSTANTIATION_SETUP( maintain_mode => 'GLOBAL', tablespace_names => empty_tbs, source_database => 'orcl.example.com', destination_database => 'stms.example.com', perform_actions => TRUE, script_name => NULL, script_directory_object => NULL, capture_name => 'capture_maint', capture_queue_table => 'strmadmin.streams_q_table', capture_queue_name => 'strmadmin.streams_q', apply_name => 'apply_maint', apply_queue_table => 'strmadmin.streams_q', apply_queue_name => 'strmadmin.streams_q_table', bi_directional => FALSE, change_global_name => TRUE); END; /
宛先データベースを取得データベースとする場合、伝播が不要なために
propagation_name
パラメータが省略されることに注意してください。change_global_name
パラメータがTRUE
に設定されているため、この手順に示す両方のサンプル・プロシージャによって、宛先データベースのグローバル名がorc1.example.com
に変更されます。 -
ソース・データベースを停止します。このデータベースは再度オープンしないでください。
-
宛先データベースで、以前に無効にしたジョブを有効にします。
-
宛先データベースを、アプリケーションおよびユーザーからアクセスできるようにします。ソース・データベースに接続していたアプリケーションおよびユーザーを、宛先データベースにリダイレクトします。必要に応じて、ソース・データベースと通信していたシステムが宛先データベースと通信できるように、ネットワークおよびOracle Netを再構成します。詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
-
宛先データベースでOracle Streams管理者が不要になった場合は、SQL*Plusで宛先データベースに管理ユーザーとして接続し、次の文を実行します。
DROP USER strmadmin CASCADE;
これで、アップグレードまたはメンテナンス操作は完了です。