ヘッダーをスキップ
Oracle® Streams概要および管理
11gリリース2 (11.2)
B61351-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

D Oracle Streamsを使用したオンラインでのデータベースのアップグレードおよびメンテナンス

この付録では、Oracle Streamsを使用して、データベースを次のいずれかのOracle Databaseリリースから現在のリリースにアップグレードする方法について説明します。

また、この付録では、Oracle Streamsを使用してOracle Database 11g リリース2 (11.2)データベースにいくつかのメンテナンス操作を実行する方法についても説明します。これらのメンテナンス操作には、異なるプラットフォームまたはキャラクタ・セットへのOracle Databaseの移行、ユーザー作成アプリケーションのアップグレードおよびOracle Databaseパッチまたはパッチ・セットの適用が含まれます。

この付録で説明するアップグレードおよびメンテナンス操作では、わずかな停止時間または停止時間なしでデータベースを操作するために、Oracle Streamsの機能を使用します。

次の項では、Oracle Streamsを使用したオンラインでのデータベースのメンテナンスについて説明します。


関連項目:

Oracle Database 10g リリース2 (10.2)より前のリリースをアップグレードする手順については、付録E「Oracle Streamsを使用した10.1以下のデータベースのオンラインでのアップグレード」を参照

Oracle Streamsを使用したアップグレードおよびメンテナンス操作の概要

データベースをアップグレードするには、データベースを長時間停止する必要がある場合があります。また、通常、次のメンテナンス操作を実行するには、データベースを長時間停止する必要があります。

  • 異なるプラットフォームへのデータベースの移行

  • 異なるキャラクタ・セットへのデータベースの移行

  • ユーザー作成アプリケーションにアップグレードするためのデータベース・スキーマ・オブジェクトの変更

  • Oracle Databaseソフトウェア・パッチまたはパッチ・セットの適用

Oracle Streamsの機能を使用することで、わずかな停止時間または停止時間なしで、これらのアップグレードおよびメンテナンス操作を実行できます。そのためには、Oracle Streamsを使用して、次のデータベースを含むレプリケーション環境を構成します。

  • ソース・データベース: メンテナンス対象の元のデータベース。

  • 取得データベース: メンテナンス操作中にソース・データベースに対して行われた変更が取得プロセスによって取得されるデータベース。

  • 宛先データベース: メンテナンス操作中にソース・データベースに対して行われた変更が適用プロセスによって適用されるソース・データベースのコピー。

次の一般的な手順で、データベースがオンラインの状態でアップグレードまたはメンテナンス操作を実行できます。

  1. 空の宛先データベースを作成します。

  2. Oracle Streamsのレプリケーション環境を構成します。その環境では、元のデータベースがソース・データベースで、データベースのコピーが宛先データベースです。DBMS_STREAMS_ADMパッケージのPRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャで、Oracle Streamsレプリケーション環境を構成します。

  3. 宛先データベースに対してアップグレードまたはメンテナンス操作を実行します。このとき、元のソース・データベースはオンラインで使用可能です。元のソース・データベースに対する変更は、取得プロセスによって取得されます。

  4. Oracle Streamsを使用して、ソース・データベースで行われた変更を宛先データベースに適用します。

  5. ソース・データベースで行われた変更を宛先データベースに適用した後、ソース・データベースをオフラインにして、アプリケーションおよびユーザーが宛先データベースを使用できるようにします。

図D-1に、このプロセスの概要を示します。

図D-1 Oracle Streamsを使用したオンラインでのデータベースのアップグレードおよびメンテナンス

図D-1の説明が続きます
「図D-1 Oracle Streamsを使用したオンラインでのデータベースのアップグレードおよびメンテナンス」の説明

アップグレードまたはメンテナンス操作中の取得データベース

アップグレードまたはメンテナンス操作中に取得プロセスが作成されるデータベースが、取得データベースです。メンテナンス操作中にソース・データベースにローカル取得プロセスを作成するか、あるいは宛先データベースまたは第3のデータベースにダウンストリーム取得プロセスを作成できます。宛先データベースが取得データベースである場合、取得データベースから宛先データベースへの伝播は不要です。ダウンストリーム取得プロセスを使用すると、メンテナンス操作中にソース・データベースに必要なリソースが削減されます。


注意:

  • Oracle Streamsを使用したデータベースのアップグレードまたはメンテナンス操作を開始する前に、取得データベースとするデータベースを決定してください。

  • RMANのDUPLICATEまたはCONVERT DATABASEコマンドを使用してデータベースのインスタンス化を行う場合、宛先データベースを取得データベースとすることはできません。


アップグレードまたはメンテナンス対象のデータベースの前提条件

この付録で説明する手順は、アップグレードまたはメンテナンス対象のデータベースが次のすべての条件を満たしていることを前提としています。

  • データベースは、既存のOracle Streams環境に含まれない。

  • データベースは、既存のロジカル・スタンバイ環境に含まれない。

  • データベースは、既存のAdvanced Replication環境に含まれない。

  • データベースには、他のデータベースのマテリアライズド・ビューのマスター表である表は存在しない。

  • アップグレードまたはメンテナンス操作中、メッセージはユーザー作成キューにエンキューされない。

ジョブ・スレーブおよびPL/SQLパッケージのサブプログラムに関する考慮事項

可能であれば、アップグレードまたはメンテナンス操作中にジョブ・スレーブを作成、変更または削除しないでください。また、メンテナンス操作中は、ユーザー・データとデータ・ディクショナリ・メタデータを同時に変更するOracle提供のPL/SQLパッケージのサブプログラムを起動しないでください。DBMS_RLSDBMS_STATSおよびDBMS_JOBパッケージには、ユーザー・データとデータ・ディクショナリ・メタデータを同時に変更するサブプログラムが含まれています。

「Oracle Streamsを使用したデータベースのアップグレードまたはメンテナンス操作の実行」の手順19および20で、ソース・データベースと宛先データベースで同じ操作を確実に実行した場合に、データベースでこのような操作が実行される可能性があります。たとえば、メンテナンス操作中に、PL/SQLプロシージャによってソース・データベース上で統計が収集された場合、手順20でも、宛先データベースで同じPL/SQLプロシージャを起動する必要があります。

サポートされないデータベース・オブジェクトの除外

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パッケージおよびタイプ・リファレンス』を参照

データベースのアップグレードまたはメンテナンス操作の準備

この項では、Oracle Streamsを使用したデータベースのアップグレードまたはメンテナンス操作を開始する前に完了する必要があるタスクについて説明します。

ダウンストリーム取得の準備

宛先データベースまたは第3のデータベースを取得データベースにすることを決定した場合、ソース・データベースから取得データベースにログ・ファイルがコピーされるように構成して、ダウンストリーム取得のための準備を行う必要があります。ソース・データベースを取得データベースにすることを決定した場合、ログ・ファイルのコピーは不要です。決定については、「アップグレードまたはメンテナンス操作中の取得データベース」を参照してください。

次の手順に従って、ソース・データベースのREDOログ・ファイルを取得データベースにコピーするための準備、および取得データベースでそれらのREDOログ・ファイルを受け入れるための準備を行います。

  1. ソース・データベースが取得データベースと通信できるように、Oracle Netを構成します。


    関連項目:

    『Oracle Database Net Services管理者ガイド』

  2. REDOデータの転送がサポートされるように両方のデータベースで認証を構成します。

    REDO転送セッションは、Secure Sockets Layer(SSL)プロトコルまたはリモート・ログイン・パスワード・ファイルのいずれかを使用して認証されます。ソース・データベースにリモート・ログイン・パスワード・ファイルがある場合は、ダウンストリーム取得データベース・システムの適切なディレクトリにこのファイルをコピーします。パスワード・ファイルは、ソース・データベースおよびダウンストリーム取得データベースで同じである必要があります。


    関連項目:

    REDO転送の認証要件の詳細は、『Oracle Data Guard概要および管理』を参照

  3. ソース・データベースで、REDOデータをソース・データベースからダウンストリーム・データベースに送信するようにREDO転送サービスを構成するために、次の初期化パラメータを設定します。

    • LOG_ARCHIVE_DEST_n: ダウンストリーム・データベースにREDOデータを送信するように1つ以上のLOG_ARCHIVE_DEST_n初期化パラメータを設定します。これを行うには、このパラメータの次の属性を設定します。

      • SERVICE: ダウンストリーム・データベースのネットワーク・サービス名を指定します。

      • ASYNCまたはSYNC: REDO転送モードを指定します。

        ASYNCを指定するメリットは、ソース・データベースのパフォーマンスへの影響が、ほとんどまたはまったくないことです。ダウンストリーム・データベースまたはネットワークのパフォーマンスが低い場合は、ASYNCを使用してソース・データベースのパフォーマンスへの影響を回避することをお薦めします。

        SYNCを指定するメリットは、ASYNCを指定した場合より速くREDOデータがダウンストリーム・データベースに送信されることです。また、SYNC AFFIRMを指定すると、MAXIMUM AVAILABILITYスタンバイ保護モードと同様の動作になります。ALTER DATABASE STANDBY DATABASE TO MAXIMIZE AVAILABILITY SQL文を指定しても、Oracle Streamsの取得プロセスには影響しないことに注意してください。

      • NOREGISTER: アーカイブREDOログ・ファイルの場所がダウンストリーム・データベース制御ファイルに記録されないようにこの属性を指定します。

      • VALID_FOR: (ONLINE_LOGFILE,PRIMARY_ROLE)または(ONLINE_LOGFILE,ALL_ROLES)を指定します。

      • TEMPLATE: ダウンストリーム・データベースのアーカイブREDOログのディレクトリおよび書式テンプレートを指定します。TEMPLATE属性は、ダウンストリーム・データベースのLOG_ARCHIVE_FORMAT初期化パラメータ設定より優先されます。TEMPLATE属性は、リモートの宛先でのみ有効です。各ソース・データベースで、書式に%t%sおよび%rのすべての変数が使用されるようにしてください。

      • DB_UNIQUE_NAME: ダウンストリーム・データベースの一意の名前。ダウンストリーム・データベースでDB_UNIQUE_NAME初期化パラメータに指定した名前を使用します。

      取得データベース(DBS2.EXAMPLE.COM)を指定するLOG_ARCHIVE_DEST_n設定の例を次に示します。

      LOG_ARCHIVE_DEST_2='SERVICE=DBS2.EXAMPLE.COM ASYNC NOREGISTER
         VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
         TEMPLATE=/usr/oracle/log_for_dbs1/dbs1_arch_%t_%s_%r.log
         DB_UNIQUE_NAME=dbs2'
      

      ヒント:

      TEMPLATE属性に、リモート・ソース・データベースのログ・ファイルを、ローカル・データベースのログ・ファイルとは別に格納する値を指定します。また、ダウンストリーム・データベースに複数のソース・データベースからのログ・ファイルが含まれている場合は、各ソース・データベースからのログ・ファイルを個別に格納する必要があります。

    • LOG_ARCHIVE_DEST_STATE_n: ダウンストリーム・データベースのLOG_ARCHIVE_DEST_STATE_nパラメータに対応する初期化パラメータをENABLEに設定します。

      たとえば、ダウンストリーム・データベースにLOG_ARCHIVE_DEST_2初期化パラメータが設定されている場合、LOG_ARCHIVE_DEST_STATE_2パラメータを次のように設定します。

      LOG_ARCHIVE_DEST_STATE_2=ENABLE 
      
    • LOG_ARCHIVE_CONFIG: ソース・データベースおよびダウンストリーム・データベースのDB_UNIQUE_NAMEを含むように、この初期化パラメータのDB_CONFIG属性を設定します。

      たとえば、ソース・データベースのDB_UNIQUE_NAMEdbs1で、ダウンストリーム・データベースのDB_UNIQUE_NAMEdbs2の場合は、次のパラメータを指定します。

      LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbs1,dbs2)'
      

      LOG_ARCHIVE_CONFIGパラメータは、デフォルトでデータベースによるREDOの送受信を可能にします。


    関連項目:

    これらの初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Data Guard概要および管理』を参照

  4. ダウンストリーム・データベースで、ソース・データベースおよびダウンストリーム・データベースのDB_UNIQUE_NAMEを含むように、LOG_ARCHIVE_CONFIG初期化パラメータのDB_CONFIG属性を設定します。

    たとえば、ソース・データベースのDB_UNIQUE_NAMEdbs1で、ダウンストリーム・データベースのDB_UNIQUE_NAMEdbs2の場合は、次のパラメータを指定します。

    LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbs1,dbs2)'
    

    LOG_ARCHIVE_CONFIGパラメータは、デフォルトでデータベースによるREDOの送受信を可能にします。

  5. 手順3または手順4で、データベースでのインスタンスの実行中にいずれかの初期化パラメータをリセットした場合は、データベースの再起動時に新しい値が維持されるように、初期化パラメータ・ファイルでもそれらのパラメータをリセットする必要がある場合があります。

    手順3または4で、インスタンスの実行中に初期化パラメータをリセットせず、初期化パラメータ・ファイルでリセットした場合は、データベースを再起動します。ソース・データベースから取得データベースにREDOログ・ファイルを送信するには、ソース・データベースがオープンされている必要があります。これは、ソース・データベースのグローバル名は、ソース・データベースがオープンである場合にのみ取得データベースに送信されるためです。

ユーザー定義型を含むデータベースのアップグレードまたはメンテナンスの準備

ユーザー定義型には、オブジェクト型、REF値、VARRAY、ネストした表などがあります。今回のリリースでは、Oracle Streamsの取得プロセスおよび適用プロセスでは、ユーザー定義型はサポートされていません。この項では、Oracle Streamsを使用してユーザー定義型を含むデータベースにアップグレードまたはメンテナンス操作を実行する方法について説明します。

1つの方法は、操作中に、ユーザー定義型を含む表に対して、データ操作言語(DML)またはデータ定義言語(DDL)の変更が行われないようにすることです。この場合、これらの表は宛先データベースでインスタンス化され、操作中にその表に対する変更は行われません。操作の完了後に、宛先データベースでユーザー定義型を含む表を読取り/書込み可能にします。

ただし、操作中にユーザー定義型を含む表をオープン状態のままにしておく必要がある場合は、次の一般的な手順を実行して、操作中にこれらのデータ型に対する変更を保持してください。

  1. ソース・データベースで、ユーザー定義型を含む表に対する行変更を格納するための1つ以上のロギング表を作成します。ロギング表の各列では、Oracle Streamsでサポートされているデータ型を使用する必要があります。

  2. ソース・データベースで、ユーザー定義のデータ型を含む表で起動されるDMLトリガーを作成します。このトリガーによって、各行変更が等価なリレーショナルに変換され、手順1で作成したロギング表に変更された行が記録されます。

  3. ロギング表に対する変更を取得し、必要に応じて宛先データベースに伝播するように、取得プロセスおよび伝播が構成されていることを確認します。ユーザー定義型を含む表に対する変更は、取得または伝播されないようにする必要があります。そのため、PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャによって、ロギング表が含まれ、ユーザー定義型を含む表が除外されていることを確認します。

  4. 宛先データベースで、ロギング表に対する変更を処理するDMLハンドラを使用するように適用プロセスを構成します。DMLハンドラによって等価なリレーショナルからユーザー定義型が再構成され、ユーザー定義型を含む表に対する変更が適用されます。

手順については、Webブラウザを使用してMy Oracle Support (旧OracleMetaLink) Webサイトを参照してください。

http://support.oracle.com/

Oracle Streamsの拡張データ型のサポートについては、データベース掲示板556742.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ハンドラの方がカスタム・ルールベースの変換より効率的です。

論理的な依存性の処理

適用プロセスでは、パラレルで適用される行LCR間の依存性を検出するために、追加の情報が必要になる場合があります。アプリケーションのアップグレード中、次のような状況で、依存性を検出するために適用プロセスに追加の情報が必要になる場合があります。

  • データベースではなくアプリケーションに論理的な依存性がある。

  • アプリケーションのアップグレードをサポートするようにスキーマ・オブジェクトが変更されており、DMLハンドラがソース・データベースと宛先データベースの差異を考慮するために行LCRを変更する。

仮想依存性定義とは、宛先データベースでトランザクション間の依存性を検出するために、適用プロセスで使用される依存性の記述です。仮想依存性定義は、宛先データベースのデータ・ディクショナリの制約としては記述されません。かわりに、DBMS_APPLY_ADMパッケージのプロシージャを使用して指定されます。仮想依存性定義を使用すると、適用プロセスで、データ・ディクショナリの制約情報のみを使用した場合には検出できない依存性を検出できるようになります。依存性が検出されると、適用プロセスは、LCRおよびトランザクションを正しい順序で適用するようにスケジュールします。

アプリケーションのアップグレードに仮想依存性定義が必要な場合、仮想依存性定義について理解し、アプリケーションのアップグレード中に仮想依存性定義を構成することを計画します。


関連項目:

仮想依存性定義の詳細は、「適用プロセスおよび依存性」を参照

Oracle Streamsを直接構成するかスクリプトを生成するかの決定

DBMS_STREAMS_ADMパッケージのPRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャで、アップグレードまたはメンテナンス操作中のOracle Streamsレプリケーション環境を構成します。これらのプロシージャでは、Oracle Streamsレプリケーション環境を直接構成するか、またはOracle Streamsレプリケーション環境を構成するスクリプトを生成できます。

プロシージャを使用してレプリケーションを直接構成する方がスクリプトを実行するよりも簡単で、環境が即時に構成されます。ただし、次のような理由でスクリプトを生成することもできます。

  • 環境を構成する前に、プロシージャによって実行されるアクションを確認する。

  • スクリプトを変更して構成をカスタマイズする。

これらのプロシージャのいずれかを実行するときにOracle Streamsを直接構成するには、perform_actionsパラメータをTRUEに設定します。この付録の例では、プロシージャによってOracle Streamsが直接構成されると想定しています。

これらのプロシージャのいずれかを実行するときに構成スクリプトを生成するには、この付録でこれらのプロシージャを実行する際に、次の手順を実行します。

  1. SQL*Plusで、プロシージャを実行するデータベースにOracle Streams管理者として接続します。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  2. プロシージャによって生成されるスクリプトを格納するディレクトリ・オブジェクトを作成します。次に例を示します。

    CREATE DIRECTORY scripts_dir AS '/usr/scripts';
    
  3. プロシージャを実行します。スクリプトを生成するように次のパラメータが設定されていることを確認します。

    • perform_actionsパラメータ: FALSEに設定します。

    • script_nameパラメータ: 生成するスクリプトの名前に設定します。

    • script_directory_objectパラメータ: スクリプトを配置するディレクトリ・オブジェクトに設定します。このディレクトリ・オブジェクトは手順2で作成されています。

  4. 必要に応じて、スクリプトを確認または変更します。

  5. SQL*Plusで、プロシージャを実行するデータベースにOracle Streams管理者として接続します。

  6. 生成されたスクリプトを実行します。次に例を示します。

    @/usr/scripts/pre_instantiation.sql;
    

インスタンス化で使用するユーティリティの決定

データベースのアップグレードまたはメンテナンス操作を始める前に、操作中に宛先データベースをインスタンス化するために、エクスポート/インポート・ユーティリティ(データ・ポンプまたはオリジナル)を使用するか、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のDUPLICATE

はい

いいえ

はい

いいえ

RMANのCONVERT DATABASE

いいえ

場合による

はい

いいえ


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グローバリゼーション・サポート・ガイド』を参照


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を使用してデータベースのメンテナンス操作を実行するには、次のタスクを実行します。

タスク1: 操作の開始

次の手順を実行して、Oracle Streamsを使用したアップグレードまたはメンテナンス操作を開始します。

  1. 空の宛先データベースを作成します。データベースを異なるプラットフォームに移行する場合は、新しいプラットフォームを使用するコンピュータ・システムにデータベースを作成します。データベースを異なるキャラクタ・セットに移行する場合は、新しいキャラクタ・セットを使用するデータベースを作成します。

    宛先データベースのグローバル名がソース・データベースとは異なることを確認してください。ここでは、ソース・データベースのグローバル名がorcl.example.com、メンテナンス操作で使用する宛先データベースのグローバル名がstms.example.comであると想定しています。宛先データベースのグローバル名は、メンテナンス操作の最後で、宛先データベースがソース・データベースと置き換わるときに変更されます。

    以前のリリースのOracle Databaseからアップグレードしない場合は、Oracle Database 11g リリース2 (11.2)データベースを作成します。Oracleをインストールする必要がある場合は、ご使用のオペレーティング・システムのOracleインストレーション・ガイドを参照してください。データベースを作成する方法については、『Oracle Database管理者ガイド』を参照してください。

    以前のリリースのOracle Databaseからアップグレードする場合、作成する空のデータベースのリリースは、「インスタンス化で使用するユーティリティの決定」で使用することを決定したインスタンス化方法によって異なります。

    • インスタンス化にエクスポート/インポートを使用することを決定した場合、空のOracle Database 11g リリース2データベースを作成します。このデータベースは、アップグレード・プロセス中の宛先データベースとなります。

      Oracle Databaseをインストールする必要がある場合は、ご使用のオペレーティング・システムのOracle Databaseインストレーション・ガイドを参照してください。また、データベースを作成する方法については、『Oracle Database管理者ガイド』を参照してください。

    • インスタンス化にRMANのDUPLICATEを使用することを決定した場合、アップグレード対象のデータベースと同じリリースの空のOracle Databaseを作成します。

      具体的には、Oracle Database 10g リリース2(10.2)データベースをアップグレードする場合は、Oracle Database 10g リリース2データベースを作成します。また、Oracle Database 11g リリース1(11.1)データベースをアップグレードする場合は、Oracle Database 11g リリース1データベースを作成します。

      このデータベースは、アップグレード・プロセス中の宛先データベースとなります。アップグレード・プロセスを開始する場合、アップグレード対象のソース・データベースと宛先データベースの両方が同じリリースのOracleである必要があります。

      Oracleをインストールする必要がある場合は、ご使用のオペレーティング・システムのOracleインストレーション・ガイドを参照してください。また、データベースを作成する方法については、対象のリリースの『Oracle Database管理者ガイド』を参照してください。

    • インスタンス化にRMANのCONVERT DATABASEを使用することを決定した場合、アップグレード対象のデータベース以上のリリースの空のOracle Databaseを作成します。

      具体的には、Oracle Database 10g リリース2(10.2)データベースをアップグレードする場合は、Oracle Database 10g リリース2データベース、Oracle Database 11g リリース1データベースまたはOracle Database 11g リリース2データベースを作成します。また、Oracle Database 11g リリース1(11.1)データベースをアップグレードする場合は、Oracle Database 11g リリース1データベースまたはOracle Database 11g リリース2データベースを作成します。

      このデータベースは、アップグレード・プロセス中の宛先データベースとなります。

      Oracleをインストールする必要がある場合は、ご使用のオペレーティング・システムのOracleインストレーション・ガイドを参照してください。また、データベースを作成する方法については、対象のリリースの『Oracle Database管理者ガイド』を参照してください。

  2. ソース・データベースがARCHIVELOGモードで実行されていることを確認します。ARCHIVELOGモードでデータベースを実行する方法については、『Oracle Database管理者ガイド』を参照してください。

  3. 取得データベースでUNDO表領域を作成します(存在しない場合)。たとえば、取得データベースに管理ユーザーとしてログインしているときに、次の文を実行します。

    CREATE UNDO TABLESPACE undotbs_02
      DATAFILE '/u01/oracle/rbdb1/undo0201.dbf' SIZE 2M REUSE AUTOEXTEND ON;
    

    UNDO表領域は、取得データベースの取得プロセスで使用されます。

    取得データベースの詳細は、「アップグレードまたはメンテナンス操作中の取得データベース」を参照してください。

    UNDO表領域を作成する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

  4. 両方のデータベースでOracle Streams環境がサポートされるように初期化パラメータが適切に設定されていることを確認します。

    Oracle Database 11g リリース2 (11.2)データベースの場合、Oracle Streamsに関連する初期化パラメータ設定の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

    以前のリリースのOracle Databaseからアップグレードする場合のソース・データベースについては、Oracle Streamsマニュアルでソース・データベースのリリースに関する説明を参照してください。

  5. ソース・データベース、宛先データベースおよび取得データベース(取得データベースに第3のデータベースを使用する場合)の各データベースにOracle Streams管理者を構成します。この例では、各データベースのOracle Streams管理者の名前がstrmadminであると想定しています。

    Oracle Database 11g リリース2 (11.2)データベースの場合の手順については、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

    以前のリリースのOracle Databaseからアップグレードする場合のソース・データベースについては、Oracle Streamsマニュアルでソース・データベースのリリースに関する説明を参照してください。

  6. ユーザー作成アプリケーションをアップグレードする場合、ソース・データベースで、ルールベースの変換プロシージャDMLハンドラまたは値の依存性に関係するすべての列のサプリメンタル・ロギングを実行します。これらの列は、ソース・データベースで無条件に記録される必要があります。これらの列に対する無条件サプリメンタル・ログ・グループを指定する方法については、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

  7. ソース・データベースで、アップグレードまたはメンテナンス操作中に、Oracle Streamsではサポートされていないデータベース・オブジェクトが変更されないようにします。サポートされていないデータベース・オブジェクトを表示するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。

    「ユーザー定義型を含むデータベースのアップグレードまたはメンテナンスの準備」で、メンテナンス操作中にユーザー定義型を含む表に対して行われる変更を保持する方法について説明しています。この方法を使用すると、操作中に、ユーザー定義型を含む表をオープン状態のままにできます。


ヒント:

Oracle Database 11g リリース1 (11.1)以上のデータベースでは、ALTER TABLE文とともにREAD ONLY句を使用して、表を読取り専用にできます。

タスク2: インスタンス化前のOracle Streamsの設定

インスタンス化の前にOracle Streamsを設定する手順は、取得データベースとするデータベースによって異なります。PRE_INSTANTIATION_SETUPプロシージャを実行すると、常に、このプロシージャが実行されるデータベースに取得プロセスが構成されます。そのため、このプロシージャは取得データベースで実行する必要があります。

このプロシージャを実行する場合、プロシージャによって構成が直接実行されるようにするか、またはプロシージャによって構成アクションが含まれるスクリプトが生成されるようにするかを指定できます。「Oracle Streamsを直接構成するかスクリプトを生成するかの決定」を参照してください。この項の例では、プロシージャによって構成が直接実行されるように指定します。

次のいずれかの項の手順に従ってください。


注意:

perform_actionsパラメータをTRUEに設定してPRE_INSTANTIATION_SETUPプロシージャを実行すると、構成アクションに関するメタデータがデータ・ディクショナリ・ビューDBA_RECOVERABLE_SCRIPTDBA_RECOVERABLE_SCRIPT_PARAMSDBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSに記録されます。エラーが発生したためにプロシージャが停止した場合、DBMS_STREAMS_ADMパッケージのRECOVER_OPERATIONプロシージャを使用して、エラーの原因となった条件を訂正してから構成を完了できます。スクリプトを使用してレプリケーション環境を構成する場合、これらのビューは移入されません。


関連項目:


取得データベースにソース・データベースを使用する場合

取得データベースにソース・データベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。

  1. ソース・データベースが宛先データベースと通信できるように、ネットワークおよびOracle Netを構成します。手順については、Oracle Database Net Services管理者ガイドを参照してください。

  2. SQL*Plusで、ソース・データベースにOracle Streams管理者として接続します。この例では、ソース・データベースはorcl.example.comです。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  3. 宛先データベースへのデータベース・リンクを作成します。次に例を示します。

    CREATE DATABASE LINK stms.example.com CONNECT TO strmadmin 
       IDENTIFIED BY password 
       USING 'stms.example.com';
    
  4. PRE_INSTANTIATION_SETUPプロシージャを実行します。

    DECLARE
      empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET; 
    BEGIN
      DBMS_STREAMS_ADM.PRE_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,
        include_ddl             => TRUE,
        start_processes         => FALSE,
        exclude_schemas         => '*',
        exclude_flags           => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
    END;
    /
    
  5. 「タスク3: データベースのインスタンス化」に進みます。

取得データベースに宛先データベースを使用する場合

取得データベースに宛先データベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。

  1. ソース・データベースが宛先データベースと通信できるように、ネットワークおよびOracle Netを構成します。手順については、Oracle Database Net Services管理者ガイドを参照してください。

  2. ソース・データベースから宛先データベースにログ・ファイルが送信されるように構成されていることを確認します。手順については、「ダウンストリーム取得の準備」を参照してください。

  3. SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはstms.example.comです。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  4. ソース・データベースへのデータベース・リンクを作成します。次に例を示します。

    CREATE DATABASE LINK orcl.example.com CONNECT TO strmadmin 
       IDENTIFIED BY password 
       USING 'orcl.example.com';
    
  5. PRE_INSTANTIATION_SETUPプロシージャを実行します。

    DECLARE
      empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET; 
    BEGIN
      DBMS_STREAMS_ADM.PRE_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,
        include_ddl             => TRUE,
        start_processes         => FALSE,
        exclude_schemas         => '*',
        exclude_flags           => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
    END;
    /
    

    宛先データベースを取得データベースとし、ダウンストリーム取得プロセス適用プロセスで宛先データベースの同じキューが使用される場合、伝播が不要なためにpropagation_nameパラメータが省略されることに注意してください。

    また、取得プロセスおよび適用プロセスは、宛先データベースのstreams_qというキューを共有します。

  6. 「タスク3: データベースのインスタンス化」に進みます。

取得データベースに第3のデータベースを使用する場合

ここでは、第3のデータベースのグローバル名がthrd.example.comであると想定しています。取得データベースに第3のデータベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。

  1. ソース・データベース、宛先データベースおよび第3のデータベースが相互に通信できるように、ネットワークおよびOracle Netを構成します。手順については、Oracle Database Net Services管理者ガイドを参照してください。

  2. ソース・データベースから第3のデータベースにログ・ファイルが送信されるように構成されていることを確認します。手順については、「ダウンストリーム取得の準備」を参照してください。

  3. SQL*Plusで、第3のデータベースにOracle Streams管理者として接続します。この例では、第3のデータベースはthrd.example.comです。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  4. ソース・データベースへのデータベース・リンクを作成します。次に例を示します。

    CREATE DATABASE LINK orcl.example.com CONNECT TO strmadmin 
       IDENTIFIED BY password 
       USING 'orcl.example.com';
    
  5. 宛先データベースへのデータベース・リンクを作成します。次に例を示します。

    CREATE DATABASE LINK stms.example.com CONNECT TO strmadmin 
       IDENTIFIED BY password 
       USING 'stms.example.com';
    
  6. PRE_INSTANTIATION_SETUPプロシージャを実行します。

    DECLARE
      empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET; 
    BEGIN
      DBMS_STREAMS_ADM.PRE_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,
        include_ddl             => TRUE,
        start_processes         => FALSE,
        exclude_schemas         => '*',
        exclude_flags           => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
    END;
    /
    
  7. 「タスク3: データベースのインスタンス化」に進みます。

タスク3: データベースのインスタンス化

「インスタンス化で使用するユーティリティの決定」で、データベース全体をインスタンス化するための様々な方法について説明しています。使用するインスタンス化方法に基づいて、次のいずれかの項の手順を実行します。


関連項目:

インスタンス化の実行の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照

エクスポート/インポートを使用したデータベースのインスタンス化

次の手順を実行して、データ・ポンプを使用してデータベース全体をインスタンス化します。

  1. SQL*Plusで、ソース・データベースにOracle Streams管理者として接続します。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  2. エクスポート・ダンプ・ファイルとエクスポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。次に例を示します。

    CREATE DIRECTORY dpump_dir AS '/usr/dpump_dir';
    
  3. Oracle Streams管理者としてソース・データベースに接続した状態で、ソース・データベースの現在のシステム変更番号(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でデータ・ポンプのFLASHBACK_SCNエクスポート・パラメータに指定します。FLASHBACK_SCNエクスポート・パラメータまたは類似したエクスポート・パラメータを指定すると、エクスポートが単一のSCNでの一貫性のある状態になります。この例では、問合せによって876606という値が戻されると想定しています。

    この問合せの実行後、エクスポートが完了するまでエクスポート中のオブジェクトに対してDDL変更が行われないようにします。

  4. コマンドラインで、データ・ポンプを使用してソース・データベースをエクスポートします。

    EXP_FULL_DATABASEロールが付与された管理ユーザーとして接続し、エクスポートを実行します。このユーザーには、手順2で作成したディレクトリ・オブジェクトに対するREADおよびWRITE権限も必要です。この例では、Oracle Streams管理者strmadminとして接続します。

    データ・ポンプでのエクスポート・コマンドの例を次に示します。

    expdp strmadmin FULL DIRECTORY=DPUMP_DIR DUMPFILE=orc1.dmp FLASHBACK_SCN=876606
    

    関連項目:

    データ・ポンプでのエクスポートを実行する方法については、『Oracle Databaseユーティリティ』を参照

  5. SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。

  6. インポート・ダンプ・ファイルとインポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。次に例を示します。

    CREATE DIRECTORY dpump_dir AS '/usr/dpump_dir';
    
  7. データ・ポンプのエクスポート・ダンプ・ファイルorc1.dmpを宛先データベースに転送します。このファイルを宛先データベースに転送するには、DBMS_FILE_TRANSFERパッケージ、バイナリFTPまたはその他の方法を使用します。ファイルの転送後、エクスポート・ダンプ・ファイルは、手順6で作成したディレクトリ・オブジェクトに対応するディレクトリに格納されます。

  8. 宛先データベースのコマンドラインで、データ・ポンプを使用してエクスポート・ダンプ・ファイルorc1.dmpをインポートします。インポートが完了するまでデータベース表に対して変更が行われないようにします。インポートを実行すると、宛先データベースおよびそのすべてのオブジェクトに対してインスタンス化SCNが自動的に設定されます。

    IMP_FULL_DATABASEロールが付与された管理ユーザーとして接続し、インポートを実行します。このユーザーには、手順6で作成したディレクトリ・オブジェクトに対するREADおよびWRITE権限も必要です。この例では、Oracle Streams管理者strmadminとして接続します。

    STREAMS_CONFIGURATIONインポート・パラメータをnに設定していることを確認します。

    インポート・コマンドの例を次に示します。

    impdp strmadmin FULL DIRECTORY=DPUMP_DIR DUMPFILE=orc1.dmp STREAMS_CONFIGURATION=n
    

    関連項目:

    データ・ポンプでのインポートを実行する方法については、『Oracle Databaseユーティリティ』を参照

RMANのDUPLICATEコマンドを使用したデータベースのインスタンス化

同じプラットフォーム上でのインスタンス化にRMANのDUPLICATEコマンドを使用する場合、次の手順を実行します。

  1. バックアップがまだの場合は、ソース・データベースのバックアップを作成します。RMANでは、複製に有効なバックアップが必要です。ここでは、バックアップがまだの場合は、orcl.example.comのバックアップを作成します。


    注意:

    RMANのDUPLICATEコマンドの実行時にFROM ACTIVE DATABASEオプションを使用する場合、ソース・データベースのバックアップは必要ありません。データベースが大きい場合、FROM ACTIVE DATABASEオプションを使用するには、多くのネットワーク・リソースが必要です。ここでは、このオプションは使用していません。

  2. SQL*Plusで、ソース・データベースに管理ユーザーとして接続します。この例では、ソース・データベースはorcl.example.comです。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  3. RMANのDUPLICATEコマンドの終了SCNを決定します。次に例を示します。

    SET SERVEROUTPUT ON SIZE 1000000
    DECLARE
      until_scn NUMBER;
    BEGIN
      until_scn:= DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;
          DBMS_OUTPUT.PUT_LINE('Until SCN: ' || until_scn);
    END;
    /
    

    終了SCN値を書き留めます。ここでは、終了SCN値を748045としています。手順7でRMANを使用してデータベースを複製するときに、UNTIL SCNオプションをこの値に設定します。また、「タスク4: インスタンス化後のOracle Streamsの設定」インスタンス化SCNもこの値に設定します。

  4. 現行のオンラインREDOログをアーカイブします。次に例を示します。

    ALTER SYSTEM ARCHIVE LOG CURRENT;
    
  5. データベースの複製用に環境を準備します。宛先データベースを複製の補助インスタンスとして準備します。手順については、Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイドを参照してください。

  6. RMANクライアントを起動して、TARGETとしてデータベースorcl.example.comに、AUXILIARYとしてデータベースstms.example.comに接続します。管理ユーザーとして各データベースに接続します。

    RMANのCONNECTコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

  7. RMANのDUPLICATEコマンドにOPEN RESTRICTEDオプションを指定して、宛先データベースでソース・データベースをインスタンス化します。OPEN RESTRICTEDオプションは必須です。このオプションを指定してSQL文ALTER SYSTEM ENABLE RESTRICTED SESSIONを発行することで、複製データベースの制限付きのセッションが有効になります。RMANは、複製データベースのオープン直前にこの文を発行します。

    UNTIL SCN句を使用して、複製のSCNを指定できます。この句には、手順3で決定した終了SCNを使用します。指定した終了SCNおよび上位SCN値に対して、アーカイブREDOログが使用可能である必要があります。そのために、手順4で終了SCNを含むREDOログをアーカイブしました。

    複製データベースの名前を指定するには、DUPLICATEコマンドでTO database_nameを使用します。ここでは、複製データベースの名前をstmsとします。つまり、この例のDUPLICATEコマンドには、TO stmsが含まれます。

    次に、RMANのDUPLICATEコマンドの例を示します。

    RMAN> RUN
          { 
            SET UNTIL SCN 748045;
            ALLOCATE AUXILIARY CHANNEL stms DEVICE TYPE sbt; 
            DUPLICATE TARGET DATABASE TO stms 
            NOFILENAMECHECK
            OPEN RESTRICTED;
          }
    
  8. SQL*Plusで、宛先データベースにシステム管理者として接続します。この例では、宛先データベースはstms.example.comです。

  9. グローバル名を変更します。RMANを使用してデータベースをインスタンス化すると、宛先データベースとソース・データベースのグローバル名が同じになりますが、宛先データベースの名前は、操作が完了するまで元の名前である必要があります。次の文を使用して、宛先データベースのグローバル名を元の名前に戻します。

    ALTER DATABASE RENAME GLOBAL_NAME TO stms.example.com;
    
  10. データベースを以前のリリースからOracle Database 11g リリース2にアップグレードする場合は、宛先データベースをアップグレードします。手順については、『Oracle Databaseアップグレード・ガイド』を参照してください。データベースをアップグレードしない場合は、この手順をスキップし、次の手順に進んでください。

  11. SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。

  12. ソース・データベースへのデータベース・リンクを作成します。次に例を示します。

    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プロシージャには、データベース・リンクが必要です。

  13. ソース・データベースと取得データベースが同じデータベースの場合、SQL*Plusで宛先データベースにOracle Streams管理者として接続した状態で、ソース・データベースからクローニングされた、ソース・データベースから宛先データベースへのデータベース・リンクを削除します。

    DROP DATABASE LINK stms.example.com;
    

関連項目:

RMANのDUPLICATEコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照

RMANのCONVERT DATABASEコマンドを使用したデータベースのインスタンス化

インスタンス化にRMANのCONVERT DATABASEコマンドを使用してデータベースを異なるプラットフォームに移行する場合、次の手順を実行します。

  1. バックアップがまだの場合は、ソース・データベースのバックアップを作成します。RMANでは、有効なバックアップが必要です。ここでは、バックアップがまだの場合は、orcl.example.comのバックアップを作成します。

  2. SQL*Plusで、ソース・データベースに管理ユーザーとして接続します。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  3. 現行のオンラインREDOログをアーカイブします。次に例を示します。

    ALTER SYSTEM ARCHIVE LOG CURRENT;
    
  4. データベースの変換用に環境を準備します。たとえば、ソース・データベースを読取り専用モードでオープンします。次の手順を実行します。

    1. ソース・データベースがオープンしている場合は、停止して読取り専用モードで起動します。

    2. DBMS_TDBパッケージのCHECK_DBおよびCHECK_EXTERNALファンクションを実行します。結果をチェックして、RMANのCONVERT DATABASEコマンドで変換がサポートされていることを確認します。


    関連項目:

    これらの手順の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照

  5. ソース・データベースの現行の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と想定しています。

  6. RMANクライアントを起動し、TARGETとしてのソース・データベースorcl.example.comに管理ユーザーとして接続します。

    RMANのCONNECTコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

  7. 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');
    
  8. RMANのCONVERT DATABASEコマンドによって生成されたデータファイル、PFILEおよびSQLスクリプトを、宛先データベースが実行されているコンピュータ・システムに転送します。

  9. 宛先データベースが実行されているコンピュータ・システムで、制限付きセッションが有効にされた状態で宛先データベースが常にオープンするように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の位置を変更する必要がある場合があります。

  10. SQL*Plusで、宛先データベースにシステム管理者として接続します。

  11. グローバル名を変更します。RMANを使用してデータベースをインスタンス化すると、宛先データベースとソース・データベースのグローバル名が同じになりますが、宛先データベースの名前は、メンテナンス操作が完了するまで元の名前である必要があります。次の文を使用して、宛先データベースのグローバル名を元の名前に戻します。

    ALTER DATABASE RENAME GLOBAL_NAME TO stms.example.com;
    
  12. データベースを以前のリリースからOracle Database 11g リリース2にアップグレードする場合は、宛先データベースをアップグレードします。手順については、『Oracle Databaseアップグレード・ガイド』を参照してください。データベースをアップグレードしない場合は、この手順をスキップし、次の手順に進んでください。

  13. 新しいグローバル名を使用して、宛先データベースにOracle Streams管理者として接続します。

  14. ソース・データベースへのデータベース・リンクを作成します。次に例を示します。

    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プロシージャには、データベース・リンクが必要です。

  15. ソース・データベースと取得データベースが同じデータベースの場合、SQL*Plusで宛先データベースにOracle Streams管理者として接続した状態で、ソース・データベースからクローニングされた、ソース・データベースから宛先データベースへのデータベース・リンクを削除します。

    DROP DATABASE LINK stms.example.com;
    

タスク4: インスタンス化後のOracle Streamsの設定

インスタンス化の後にOracle Streamsを設定するには、POST_INSTANTIATION_SETUPプロシージャを実行します。POST_INSTANTIATION_SETUPプロシージャは、「タスク2: インスタンス化前のOracle Streamsの設定」PRE_INSTANTIATION_SETUPプロシージャを実行したデータベースで実行する必要があります。

POST_INSTANTIATION_SETUPプロシージャを実行する場合、プロシージャによって構成が直接実行されるようにするか、またはプロシージャによって構成アクションが含まれるスクリプトが生成されるようにするかを指定できます。「Oracle Streamsを直接構成するかスクリプトを生成するかの決定」を参照してください。この項の例では、プロシージャによって構成が直接実行されるように指定します。

perform_actionsscript_namescript_directory_objectおよびstart_processesを除き、PRE_INSTANTIATION_SETUPPOST_INSTANTIATION_SETUPプロシージャに指定されているパラメータ値は一致する必要があります。次の例では、2つのプロシージャのすべてのパラメータ値が一致しています。

POST_INSTANTIATION_SETUPプロシージャのinstantiation_scnパラメータを正しく設定することが重要です。このパラメータを設定するには、次の手順を実行します。

インスタンス化の後にOracle Streamsを設定する手順は、取得データベースとするデータベースによって異なります。次のいずれかの項の手順に従ってください。


注意:

perform_actionsパラメータをTRUEに設定してPOST_INSTANTIATION_SETUPプロシージャを実行すると、構成アクションに関するメタデータがデータ・ディクショナリ・ビューDBA_RECOVERABLE_SCRIPTDBA_RECOVERABLE_SCRIPT_PARAMSDBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSに記録されます。エラーが発生したためにプロシージャが停止した場合、DBMS_STREAMS_ADMパッケージのRECOVER_OPERATIONプロシージャを使用して、エラーの原因となった条件を訂正してから構成を完了できます。スクリプトを使用してレプリケーション環境を構成する場合、これらのビューは移入されません。


関連項目:


取得データベースにソース・データベースを使用する場合

取得データベースにソース・データベースを使用する場合、次の手順を実行して、インスタンス化の後にOracle Streamsを設定します。

  1. SQL*Plusで、ソース・データベースにOracle Streams管理者として接続します。この例では、ソース・データベースはorcl.example.comです。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  2. POST_INSTANTIATION_SETUPプロシージャを実行します。

    DECLARE
      empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET; 
    BEGIN
      DBMS_STREAMS_ADM.POST_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,
        include_ddl             => TRUE,
        start_processes         => FALSE,
        instantiation_scn       => 748044, -- NULL if Export/Import instantiation
        exclude_schemas         => '*',
        exclude_flags           => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
    END;
    /
    

    インスタンス化にRMANのかわりにエクスポート/インポートを使用した場合は、instantiation_scnパラメータがNULLに設定されていることを確認します。

  3. 「タスク5: アップグレードまたはメンテナンス操作の完了およびOracle Streamsの削除」に進みます。

取得データベースに宛先データベースを使用する場合

取得データベースに宛先データベースを使用する場合、次の手順を実行して、インスタンス化の後にOracle Streamsを設定します。

  1. SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはstms.example.comです。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  2. POST_INSTANTIATION_SETUPプロシージャを実行します。

    DECLARE
      empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET; 
    BEGIN
      DBMS_STREAMS_ADM.POST_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,
        include_ddl             => TRUE,
        start_processes         => FALSE,
        instantiation_scn       => NULL,
        exclude_schemas         => '*',
        exclude_flags           => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
    END;
    /
    

    宛先データベースを取得データベースとする場合、伝播が不要なためにpropagation_nameパラメータが省略されることに注意してください。

  3. 「タスク5: アップグレードまたはメンテナンス操作の完了およびOracle Streamsの削除」に進みます。

取得データベースに第3のデータベースを使用する場合

ここでは、第3のデータベースのグローバル名がthrd.example.comであると想定しています。取得データベースに第3のデータベースを使用する場合、次の手順を実行して、インスタンス化の後にOracle Streamsを設定します。

  1. SQL*Plusで、第3のデータベースにOracle Streams管理者として接続します。この例では、第3のデータベースはthrd.example.comです。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  2. POST_INSTANTIATION_SETUPプロシージャを実行します。

    DECLARE
      empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET; 
    BEGIN
      DBMS_STREAMS_ADM.POST_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,
        include_ddl             => TRUE,
        start_processes         => FALSE,
        instantiation_scn       => 748044, -- NULL if Export/Import instantiation
        exclude_schemas         => '*',
        exclude_flags           => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML + 
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
    END;
    /
    

    インスタンス化にRMANのかわりにエクスポート/インポートを使用した場合は、instantiation_scnパラメータがNULLに設定されていることを確認します。

  3. 「タスク5: アップグレードまたはメンテナンス操作の完了およびOracle Streamsの削除」に進みます。

タスク5: アップグレードまたはメンテナンス操作の完了およびOracle Streamsの削除

次の手順を実行して、Oracle Streamsを使用したアップグレードまたはメンテナンス操作を完了し、Oracle Streamsコンポーネントを削除します。

  1. 宛先データベースで、ソース・データベースからレプリケートされるデータを変更するインポート済のジョブを無効にします。DBA_JOBSデータ・ディクショナリ・ビューを問い合せて、ジョブを表示します。

  2. ここで、パッチまたはパッチ・セットを宛先データベースに適用します。パッチまたはパッチ・セットに付属の手順に従います。パッチまたはパッチ・セットを適用しない場合は、この手順をスキップし、次の手順に進んでください。

  3. ユーザー作成アプリケーションをアップグレードする場合は、宛先データベースで、次の手順の実行が必要な場合があります。

    1. データベースのスキーマ・オブジェクトを、アップグレード後のユーザー作成アプリケーションをサポートするように変更します。

    2. ソース・データベースからの行LCRが、適用プロセスによって変更済のスキーマ・オブジェクトに正確に適用されるように、これらの行LCRを変更する1つ以上の宣言ルールベースの変換およびプロシージャDMLハンドラを構成します。たとえば、アップグレード済のユーザー作成アプリケーションをサポートするように列名が変更された場合、宣言ルールベースの変換では、列を含む行LCRで列の名前が変更される必要があります。

      「スキーマ・オブジェクトに対する変更の処理」を参照してください。

    3. 適用プロセスのみでは検出できない論理的な依存性が行LCRに含まれる場合、1つ以上の仮想依存性定義を構成します。

      「論理的な依存性の処理」を参照してください。

  4. SQL*Plusで、宛先データベースに管理ユーザーとして接続します。

    SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。

  5. RESTRICTED SESSIONを無効にするには、ALTER SYSTEM文を使用します。

    ALTER SYSTEM DISABLE RESTRICTED SESSION;
    
  6. SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。

  7. 適用プロセスを開始します。次に例を示します。

    BEGIN
      DBMS_APPLY_ADM.START_APPLY(
        apply_name  => 'apply_maint');
    END;
    /
    
  8. SQL*Plusで、取得データベースにOracle Streams管理者として接続します。

  9. 取得プロセスを起動します。次に例を示します。

    BEGIN
      DBMS_CAPTURE_ADM.START_CAPTURE(
        capture_name  => 'capture_maint');
    END;
    /
    

    この手順は、宛先データベースのインスタンス化中に、ソース・データベースに対して行われた変更をレプリケートするプロセスを起動します。

  10. 適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用するまで、Oracle Streams環境を監視します。

    適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用したかどうかを判断するには、次の手順を実行します。

    1. 取得プロセスのエンキュー・メッセージ番号、および適用プロセスのシステム変更番号(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クライアントが再起動されない場合は、第30章「Oracle Streams環境内での問題の特定」を参照して、環境に対するトラブルシューティングを実行します。

    2. 宛先データベースでの適用サーバーの適用プロセスの状態を問い合せ、変更の適用が終了しているかどうかを確認します。

      たとえば、適用プロセスの名前が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であれば、次の手順に進むことができます。

  11. 宛先データベースにOracle Streams管理者として接続します。

  12. 次の問合せを実行して、適用エラーがないことを確認します。

    SELECT COUNT(*) FROM DBA_APPLY_ERROR;
    

    この問合せで0(ゼロ)が戻されたら、次の手順に進みます。この問合せでエラー・キューにエラーが表示される場合は、エラーを解決してから次の手順に進みます。手順については、「適用エラーの管理」を参照してください。

  13. ソース・データベースから、すべてのアプリケーションとユーザーの接続を切断します。

  14. ソース・データベースに管理ユーザーとして接続します。

  15. データベースへのアクセスを制限します。次に例を示します。

    ALTER SYSTEM ENABLE RESTRICTED SESSION;
    
  16. SQL*Plusでソース・データベースに管理ユーザーとして接続した状態で、手順10aで実行した問合せを再度実行します。この問合せで返される2つの値が同じ場合は、ソース・データベースからのすべての変更が宛先データベースに適用済で、次の手順に進むことができます。

  17. 宛先データベースにOracle Streams管理者として接続します。

  18. 手順12で実行した問合せを再度実行します。この問合せで0(ゼロ)が戻されたら、次の手順に進みます。この問合せでエラー・キューにエラーが表示される場合は、エラーを解決してから次の手順に進みます。手順については、「適用エラーの管理」を参照してください。

  19. アップグレードまたはメンテナンス操作中にソース・データベースでジョブ・スレーブを作成、変更または削除するアクションを実行した場合は、同じアクションを宛先データベースで実行します。詳細は、「ジョブ・スレーブおよびPL/SQLパッケージのサブプログラムに関する考慮事項」を参照してください。

  20. ユーザー・データとディクショナリ・メタデータを同時に変更するアップグレードまたはメンテナンス操作中に、Oracleが提供するPL/SQLパッケージのサブプログラムをソース・データベースで起動した場合、同じサブプログラムを宛先データベースで起動します。詳細は、「ジョブ・スレーブおよびPL/SQLパッケージのサブプログラムに関する考慮事項」を参照してください。

  21. 両方のデータベースから、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に変更されます。

  22. ソース・データベースを停止します。このデータベースは再度オープンしないでください。

  23. 宛先データベースで、以前に無効にしたジョブを有効にします。

  24. 宛先データベースを、アプリケーションおよびユーザーからアクセスできるようにします。ソース・データベースに接続していたアプリケーションおよびユーザーを、宛先データベースにリダイレクトします。必要に応じて、ソース・データベースと通信していたシステムが宛先データベースと通信できるように、ネットワークおよびOracle Netを再構成します。手順については、Oracle Database Net Services管理者ガイドを参照してください。

  25. 宛先データベースでOracle Streams管理者が不要になった場合は、SQL*Plusで宛先データベースに管理ユーザーとして接続し、次の文を実行します。

    DROP USER strmadmin CASCADE;
    

これで、アップグレードまたはメンテナンス操作は完了です。