この付録では、Oracle Streamsを使用してOracle Database 11g リリース1(11.1)データベースにいくつかのメンテナンス操作を実行する方法について説明します。これらのメンテナンス操作には、異なるプラットフォームまたはキャラクタ・セットへのOracle Databaseの移行、ユーザー作成アプリケーションのアップグレードおよびOracle Databaseパッチまたはパッチ・セットの適用が含まれます。この付録で説明するメンテナンス操作では、わずかな停止時間でデータベースをメンテナンスするために、Oracle Streamsの機能を使用します。
次の項では、Oracle Streamsを使用したオンラインでのデータベースのメンテナンスについて説明します。
関連項目: Oracle Streamsを使用して以前のリリースのOracle Databaseをアップグレードする手順については、付録D「Oracle Streamsを使用したオンラインでのデータベースのアップグレード」を参照 |
通常、次のメンテナンス操作を実行するには、長時間、データベースを停止する必要があります。
異なるプラットフォームへのデータベースの移行
異なるキャラクタ・セットへのデータベースの移行
ユーザー作成アプリケーションにアップグレードするためのデータベース・スキーマ・オブジェクトの変更
Oracle Databaseソフトウェア・パッチまたはパッチ・セットの適用
Oracle Streamsの機能を使用することで、わずかな停止時間でこれらのメンテナンス操作を実行できます。そのためには、Oracle Streamsを使用して、次のデータベースを含む単一のソース・レプリケーション環境を構成します。
ソース・データベース: メンテナンス対象の元のデータベース。
取得データベース: メンテナンス操作中にソース・データベースに対して行われた変更が取得プロセスによって取得されるデータベース。
宛先データベース: メンテナンス操作中にソース・データベースに対して行われた変更が適用プロセスによって適用されるソース・データベースのコピー。
次の一般的な手順で、データベースがオンラインの状態でメンテナンス操作を実行できます。
空の宛先データベースを作成します。
Oracle Streamsの単一ソース・レプリケーション環境を構成します。その環境では、元のデータベースがソース・データベースで、データベースのコピーが宛先データベースです。DBMS_STREAMS_ADM
パッケージのPRE_INSTANTIATION_SETUP
およびPOST_INSTANTIATION_SETUP
プロシージャで、Oracle Streamsレプリケーション環境を構成します。
宛先データベースに対してメンテナンス操作を実行します。このとき、元のソース・データベースはオンラインで使用可能です。元のソース・データベースに対する変更は、取得プロセスによって取得されます。
Oracle Streamsを使用して、ソース・データベースで行われた変更を宛先データベースに適用します。
ソース・データベースで行われた変更を宛先データベースに適用した後、ソース・データベースをオフラインにして、アプリケーションおよびユーザーが宛先データベースを使用できるようにします。
図E-1に、このプロセスの概要を示します。
メンテナンス操作中に取得プロセスが作成されるデータベースが、取得データベースです。メンテナンス操作中にソース・データベースにローカル取得プロセスを作成するか、または宛先データベースまたは第3のデータベースにダウンストリーム取得プロセスを作成できます。宛先データベースが取得データベースである場合、取得データベースから宛先データベースへの伝播は不要です。ダウンストリーム取得プロセスを使用すると、メンテナンス操作中にソース・データベースに必要なリソースが削減されます。
注意:
|
この付録で説明する手順は、メンテナンス対象のデータベースが次のすべての条件を満たしていることを前提としています。
データベースは、既存のOracle Streams環境に含まれない。
データベースは、既存のロジカル・スタンバイ環境に含まれない。
データベースは、既存のAdvanced Replication環境に含まれない。
データベースには、他のデータベースのマテリアライズド・ビューのマスター表である表は存在しない。
ユーザー作成キューは、メンテナンス操作中は読取り専用である。
可能であれば、メンテナンス操作中にジョブ・スレーブを作成、変更または削除しないでください。また、メンテナンス操作中は、ユーザー・データとデータ・ディクショナリ・メタデータを同時に変更するOracle提供のPL/SQLパッケージのサブプログラムを起動しないでください。DBMS_RLS
、DBMS_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: メンテナンス操作の開始」の手順6では、データベースのメンテナンス操作中にこれらのデータベース・オブジェクトを読取り専用にする必要があります。
注意: 「ユーザー定義型を含むデータベースのメンテナンスの準備」で、メンテナンス操作中にユーザー定義型を含む表に対して行われる変更を保持する方法を説明しています。この方法を使用すると、メンテナンス操作中に、ユーザー定義型を含む表をオープン状態のままにできます。 |
関連項目: exclude_schemas およびexclude_flags パラメータの詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスを参照 |
この項では、Oracle Streamsを使用したデータベースのメンテナンス操作を開始する前に完了する必要があるタスクについて説明します。
宛先データベースまたは第3のデータベースを取得データベースにすることを決定した場合、ソース・データベースから取得データベースにログ・ファイルがコピーされるように構成して、ダウンストリーム取得のための準備を行う必要があります。ソース・データベースを取得データベースにすることを決定した場合、ログ・ファイルのコピーは不要です。
次の手順に従って、ソース・データベースのREDOログ・ファイルを取得データベースにコピーするための準備、および取得データベースでそれらのREDOログ・ファイルを受け入れるための準備を行います。
ソース・データベースが取得データベースと通信できるように、Oracle Netを構成します。
関連項目: Oracle Database Net Services管理者ガイド |
REDOデータの転送がサポートされるように両方のデータベースで認証を構成します。
REDO転送セッションは、Secure Sockets Layer(SSL)プロトコルまたはリモート・ログイン・パスワード・ファイルのいずれかを使用して認証されます。ソース・データベースにリモート・ログイン・パスワード・ファイルがある場合、このファイルは、ダウンストリーム取得データベース・システムの適切なディレクトリにコピーされます。パスワード・ファイルは、ソース・データベースとダウンストリーム取得データベースで同じである必要があります。
関連項目: REDO転送の認証要件の詳細は、Oracle Data Guard概要および管理を参照 |
ソース・データベースで、REDOデータをソース・データベースからダウンストリーム・データベースに送信するようにREDO転送サービスを構成するために、次の初期化パラメータを設定します。
LOG_ARCHIVE_DEST_
n
: ダウンストリーム・データベースにREDOデータを送信するように1つ以上のLOG_ARCHIVE_DEST_
n
初期化パラメータを設定します。これを行うには、このパラメータの次の属性を設定します。
SERVICE
: ダウンストリーム・データベースのネットワーク・サービス名を指定します。
ASYNC
またはSYNC
: REDO転送モードを指定します。
ASYNC
を指定するメリットは、ソース・データベースのパフォーマンスへの影響が、ほとんどまたはまったくないことです。ソース・データベースでOracle Database 10gリリース1以上が実行されている場合に、ダウンストリーム・データベースまたはネットワークのパフォーマンスが低いときは、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_NAME
がdbs1
で、ダウンストリーム・データベースのDB_UNIQUE_NAME
がdbs2
の場合は、次のパラメータを指定します。
LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbs1,dbs2)'
LOG_ARCHIVE_CONFIG
パラメータは、デフォルトでデータベースによるREDOの送受信を可能にします。
関連項目: これらの初期化パラメータの詳細は、Oracle DatabaseリファレンスおよびOracle Data Guard概要および管理を参照 |
ダウンストリーム・データベースで、ソース・データベースおよびダウンストリーム・データベースのDB_UNIQUE_NAME
を含むように、LOG_ARCHIVE_CONFIG
初期化パラメータのDB_CONFIG
属性を設定します。
たとえば、ソース・データベースのDB_UNIQUE_NAME
がdbs1
で、ダウンストリーム・データベースのDB_UNIQUE_NAME
がdbs2
の場合は、次のパラメータを指定します。
LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbs1,dbs2)'
LOG_ARCHIVE_CONFIG
パラメータは、デフォルトでデータベースによるREDOの送受信を可能にします。
手順3または手順4で、データベースでのインスタンスの実行中にいずれかの初期化パラメータをリセットした場合は、データベースの再起動時に新しい値が維持されるように、初期化パラメータ・ファイルでもそれらのパラメータをリセットする必要がある場合があります。
手順3または4で、インスタンスの実行中に初期化パラメータをリセットせず、初期化パラメータ・ファイルでリセットした場合は、データベースを再起動します。ソース・データベースから取得データベースにREDOログ・ファイルを送信するには、ソース・データベースがオープンされている必要があります。これは、ソース・データベースのグローバル名は、ソース・データベースがオープンである場合にのみ取得データベースに送信されるためです。
ユーザー定義型には、オブジェクト型、REF
値、VARRAY、ネストした表などがあります。今回のリリースでは、Oracle Streamsの取得プロセスおよび適用プロセスでは、ユーザー定義型はサポートされていません。この項では、Oracle Streamsを使用してユーザー定義型を含むデータベースにメンテナンス操作を実行する方法について説明します。
1つの方法は、データベースのメンテナンス操作中に、ユーザー定義型を含む表を読取り専用にすることです。この場合、その表は宛先データベースでインスタンス化され、メンテナンス中にその表に対する変更は行われません。メンテナンス操作の完了後に、宛先データベースでユーザー定義型を含む表を読取り/書込み可能にします。
ただし、メンテナンス操作中にユーザー定義型を含む表をオープン状態のままにしておく必要がある場合は、次の一般的な手順を実行して、データベースのメンテナンス操作中にこれらのデータ型に対して行われる変更を保持できます。
ソース・データベースで、ユーザー定義型を含む表に対する行変更を格納するための1つ以上のロギング表を作成します。ロギング表の各列では、Oracle Streamsでサポートされているデータ型を使用する必要があります。
ソース・データベースで、ユーザー定義のデータ型を含む表で起動されるDMLトリガーを作成します。このトリガーによって、各行変更が等価なリレーショナルに変換され、手順1で作成したロギング表に変更された行が記録されます。
ロギング表に対する変更を取得し、必要に応じて宛先データベースに伝播するように、取得プロセスおよび伝播が構成されていることを確認します。ユーザー定義型を含む表に対する変更は、取得または伝播されないようにする必要があります。そのため、PRE_INSTANTIATION_SETUP
およびPOST_INSTANTIATION_SETUP
プロシージャによって、ロギング表が含まれ、ユーザー定義型を含む表が除外されていることを確認します。
宛先データベースで、ロギング表に対する変更を処理するDMLハンドラを使用するように適用プロセスを構成します。DMLハンドラによって等価なリレーショナルからユーザー定義型が再構成され、ユーザー定義型を含む表に対する変更が適用されます。
関連項目:
|
この項の内容は、メンテナンス操作にユーザー作成アプリケーションのアップグレードが必要な場合にのみ該当します。ユーザー作成アプリケーションのアップグレード中にスキーマ・オブジェクトを変更できますが、データベースのみでは検出できない論理的な依存性が存在する場合があります。この項では、アプリケーションのアップグレード中に発生するこれらの問題を処理する方法について説明します。
ユーザー作成アプリケーションをアップグレードする場合は、通常、データベースのスキーマ・オブジェクトを、アップグレード後のアプリケーションをサポートするように変更します。Oracle Streamsでは、行LCRに、DML文の実行結果である行変更の情報が含まれます。宣言ルールベースの変換またはDMLハンドラでは、宛先データベースの変更された表に行LCRが適用されるように、ソース・データベースのREDOログから取得された行LCRを変更できます。
ルールベースの変換は、ポジティブ・ルール・セットのルールがTRUE
に評価される場合に発生するメッセージの変更です。宣言ルールベースの変換では、行LCRの一連の一般的な変換を実行できます。宣言ルールベースの変換は、PL/SQLを使用せずに、内部的に実行されます。このような変換は、DBMS_STREAMS_ADM
パッケージのプロシージャを使用して指定します。宣言ルールベースの変換では、取得、伝播または適用中に行LCRを変更できます。
DMLハンドラは、ソース・データベースで実行したDML文によって発生した行LCRを処理するユーザー・プロシージャです。宛先データベースのOracle Streamsの適用プロセスが行LCRをDMLハンドラに渡し、DMLハンドラが行LCRを変更できます。
Oracle Streamsを使用してユーザー作成アプリケーションをアップグレードするプロセスには、インスタンス化後に宛先データベースで行うスキーマ・オブジェクトの変更および作成が含まれる場合があります。宛先データベースで1つ以上の宣言ルールベースの変換およびDMLハンドラを使用して、ソース・データベースからの変更が、変更済のスキーマ・オブジェクトに正確に適用されるように、それらの変更を処理できます。アプリケーションのアップグレード中に宣言ルールベースの変換およびDMLハンドラを使用して、ソース・データベースと宛先データベースの差異を考慮できます。
通常、宣言ルールベースの変換の方がDMLハンドラより簡単に使用できます。そのため、行LCRの変更が必要な場合、まず宣言ルールベースの変換を構成します。宣言ルールベースの変換では不十分な場合には、DMLハンドラを使用します。1つ以上のLOB列が含まれる表の行LCRを変更する必要がある場合、DMLハンドラおよびLOBアセンブリを使用する必要があります。
データベースのメンテナンス操作を開始する前に、次のタスクを実行して、宣言ルールベースの変換またはDMLハンドラを準備する必要があります。
宣言ルールベースの変換について理解します。「宣言ルールベースの変換」を参照してください。
DMLハンドラについて理解します。「適用プロセスのメッセージ処理オプション」を参照してください。
宛先データベースで宣言ルールベースの変換とDMLハンドラのどちらが必要になるかを決定します。アップグレードしたアプリケーションで必要なスキーマ・オブジェクトへの変更によって、どちらが必要になるが異なります。
データベースのメンテナンス操作のDMLハンドラで使用するPL/SQLプロシージャを作成します。PL/SQLプロシージャを作成する方法については、Oracle Streamsレプリケーション管理者ガイドを参照してください。
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が直接構成されると想定しています。
これらのプロシージャのいずれかを実行するときに構成スクリプトを生成するには、この付録でこれらのプロシージャを実行する際に、次の手順を実行します。
SQL*Plusで、プロシージャを実行するデータベースにOracle Streams管理者として接続します。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
プロシージャによって生成されるスクリプトを格納するディレクトリ・オブジェクトを作成します。次に例を示します。
CREATE DIRECTORY scripts_dir AS '/usr/scripts';
プロシージャを実行します。スクリプトを生成するように次のパラメータが設定されていることを確認します。
perform_actions
パラメータ: FALSE
に設定します。
script_name
パラメータ: 生成するスクリプトの名前に設定します。
script_directory_object
パラメータ: スクリプトを配置するディレクトリ・オブジェクトに設定します。
必要に応じて、スクリプトを確認または変更します。
SQL*Plusで、プロシージャを実行するデータベースにOracle Streams管理者として接続します。
生成されたスクリプトを実行します。次に例を示します。
@/usr/scripts/pre_instantiation.sql;
データベースのメンテナンス操作を始める前に、操作中に宛先データベースをインスタンス化するために、エクスポート/インポート・ユーティリティ(データ・ポンプまたはオリジナル)を使用するか、Recovery Managerユーティリティを使用するかを決定します。宛先データベースのインスタンス化にどちらのユーティリティを使用するかを決定するには、次の事項を考慮します。
データベースを異なるプラットフォームに移行する場合は、エクスポート/インポートまたはRecovery ManagerのCONVERT
DATABASE
コマンドを使用します。Recovery ManagerのDUPLICATE
コマンドを使用しても、データベースを異なるオペレーティング・システムに移行できません。
データベースを異なるキャラクタ・セットに移行する場合は、エクスポート/インポートを使用する必要があります。Recovery ManagerのDUPLICATE
およびCONVERT
DATABASE
コマンドを使用しても、データベースを異なるキャラクタ・セットに移行できません。
Recovery Managerを使用できる場合は、特にデータベースが大きい場合に、Recovery Managerを使用する方が、エクスポート/インポートを使用するより速くインスタンス化を実行できます。
分散トランザクションが可能な環境でインスタンス化を行う場合は、Recovery Managerを使用しないことをお薦めします。そのような環境でRecovery Managerを使用すると、手動での修正が必要なインダウント・トランザクションが実行される場合があります。
Recovery ManagerのDUPLICATE
またはCONVERT
DATABASE
コマンドを使用してデータベースのインスタンス化を行う場合、宛先データベースを取得データベースとすることはできません。
表E-1に、ソース・データベースと宛先データベースのプラットフォームまたはキャラクタ・セットが同じまたは異なる場合に、各インスタンス化方法がサポートされるかどうかを示します。
表E-1 Oracle Streamsを使用したデータベースのメンテナンスのためのインスタンス化方法
インスタンス化方法 | プラットフォームが同じ場合にサポートされるかどうか | プラットフォームが異なる場合にサポートされるかどうか | キャラクタ・セットが同じ場合にサポートされるかどうか | キャラクタ・セットが異なる場合にサポートされるかどうか |
---|---|---|---|---|
データ・ポンプ・エクスポート/インポート |
はい |
はい |
はい |
はい |
Recovery Managerの |
はい |
いいえ |
はい |
いいえ |
Recovery Managerの |
いいえ |
場合による |
はい |
いいえ |
Recovery ManagerのCONVERT
DATABASE
コマンドがサポートされるプラットフォームの組合せは限られています。DBMS_TDB
パッケージを使用すると、任意のプラットフォームの組合せでサポートされているかどうかを判別できます。
関連項目:
|
この項では、Oracle Database 11g リリース1データベースで実行する次のいずれかのメンテナンス操作について説明します。
異なるプラットフォームへのデータベースの移行
異なるキャラクタ・セットへのデータベースの移行
ユーザー作成アプリケーションにアップグレードするためのデータベース・スキーマ・オブジェクトの変更
Oracle Databaseソフトウェア・パッチまたはパッチ・セットの適用
Oracle Streamsを使用すると、わずかな停止時間でこれらの操作を実行できます。操作中、ソース・データベースは、データベースのメンテナンスを実行している既存のデータベースです。取得データベースは、Oracle Streamsの取得プロセスが実行されるデータベースです。宛先データベースは、操作の最後で、ソース・データベースと置き換えられるデータベースです。
Oracle Streamsを使用してデータベースのメンテナンス操作を実行するには、次のタスクを実行します。
次の手順を実行して、Oracle Streamsを使用したメンテナンス操作を開始します。
空のOracle Database 11g リリース1データベースを作成します。このデータベースは、メンテナンス操作中の宛先データベースとなります。データベースを異なるプラットフォームに移行する場合は、新しいプラットフォームを使用するコンピュータ・システムにデータベースを作成します。データベースを異なるキャラクタ・セットに移行する場合は、新しいキャラクタ・セットを使用するデータベースを作成します。
Oracleをインストールする必要がある場合は、ご使用のオペレーティング・システムのOracleインストレーション・ガイドを参照してください。また、データベースを作成する方法については、Oracle Database管理者ガイドを参照してください。
宛先データベースのグローバル名がソース・データベースとは異なることを確認してください。ここでは、ソース・データベースのグローバル名がorcl.example.com
、メンテナンス操作で使用する宛先データベースのグローバル名がstms.example.com
であると想定しています。宛先データベースのグローバル名は、メンテナンス操作の最後で、宛先データベースがソース・データベースと置き換わるときに変更されます。
ソース・データベースがARCHIVELOG
モードで実行されていることを確認します。ARCHIVELOG
モードでデータベースを実行する方法については、Oracle Database管理者ガイドを参照してください。
両方のデータベースで、Oracle Streams環境がサポートされるように初期化パラメータが適切に設定されていることを確認します。「Oracle Streamsに関連する初期化パラメータの設定」を参照してください。
ソース・データベース、宛先データベースおよび取得データベース(取得データベースに第3のデータベースを使用する場合)の各データベースにOracle Streams管理者を構成します。手順については、「Oracle Streams管理者の構成」を参照してください。この例では、各データベースのOracle Streams管理者の名前がstrmadmin
であると想定しています。
ユーザー作成アプリケーションをアップグレードする場合、ソース・データベースで、ルールベースの変換、DMLハンドラまたは値依存性に関係するすべての列のサプリメンタル・ロギングを実行します。これらの列は、ソース・データベースで無条件に記録される必要があります。これらの列に対する無条件のサプリメンタル・ログ・グループを指定する方法については、Oracle Streamsレプリケーション管理者ガイドを参照してください。
ソース・データベースで、Oracle Streamsではサポートされていないデータベース・オブジェクトを読取り専用にします。サポートされていないデータベース・オブジェクトを表示するには、DBA_STREAMS_UNSUPPORTED
データ・ディクショナリ・ビューを問い合せます。
「ユーザー定義型を含むデータベースのメンテナンスの準備」で、メンテナンス操作中にユーザー定義型を含む表に対して行われる変更を保持する方法を説明しています。この方法を使用すると、メンテナンス操作中に、ユーザー定義型を含む表をオープン状態のままにできます。
インスタンス化の前に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を設定します。
ソース・データベースが宛先データベースと通信できるように、ネットワークおよびOracle Netを構成します。手順については、Oracle Database Net Services管理者ガイドを参照してください。
SQL*Plusで、ソース・データベースにOracle Streams管理者として接続します。この例では、ソース・データベースはorcl.example.com
です。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
宛先データベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK stms.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'stms.example.com';
SQL*Plusで、ソース・データベースにOracle Streams管理者として接続し、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; /
「タスク3: データベースのインスタンス化」に進みます。
取得データベースに宛先データベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。
ソース・データベースが宛先データベースと通信できるように、ネットワークおよびOracle Netを構成します。手順については、Oracle Database Net Services管理者ガイドを参照してください。
ソース・データベースから宛先データベースにログ・ファイルが送信されるように構成されていることを確認します。手順については、「ダウンストリーム取得の準備」を参照してください。
SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはstms.example.com
です。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
ソース・データベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK orcl.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'orcl.example.com';
SQL*Plusで、宛先データベースにOracle Streams管理者として接続し、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
というキューを共有します。
「タスク3: データベースのインスタンス化」に進みます。
ここでは、第3のデータベースのグローバル名がthrd.example.com
であると想定しています。取得データベースに第3のデータベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。
ソース・データベース、宛先データベースおよび第3のデータベースが相互に通信できるように、ネットワークおよびOracle Netを構成します。手順については、Oracle Database Net Services管理者ガイドを参照してください。
ソース・データベースから第3のデータベースにログ・ファイルが送信されるように構成されていることを確認します。手順については、「ダウンストリーム取得の準備」を参照してください。
SQL*Plusで、第3のデータベースにOracle Streams管理者として接続します。この例では、第3のデータベースはthrd.example.com
です。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
ソース・データベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK orcl.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'orcl.example.com';
SQL*Plusで第3のデータベースにOracle Streams管理者として接続したままの状態で、宛先データベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK stms.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'stms.example.com';
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; /
「タスク3: データベースのインスタンス化」に進みます。
「インスタンス化で使用するユーティリティの決定」で、データベース全体をインスタンス化するための様々な方法について説明しています。使用するインスタンス化方法に基づいて、次のいずれかの項の手順を実行します。
関連項目: インスタンス化の実行の詳細は、Oracle Streamsレプリケーション管理者ガイドを参照 |
Oracle Data Pumpのエクスポート/インポートを使用して宛先データベースをインスタンス化する場合、STREAMS_CONFIGURATION
インポート・パラメータがn
に設定されていることを確認します。
次の手順を実行して、データ・ポンプを使用してデータベース全体をインスタンス化します。
SQL*Plusで、ソース・データベースにOracle Streams管理者として接続します。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
エクスポート・ダンプ・ファイルおよびエクスポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。
CREATE DIRECTORY dpump_dir AS '/usr/dpump_dir';
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変更が行われないようにします。
コマンドラインで、データ・ポンプを使用してソース・データベースをエクスポートします。
EXP_FULL_DATABASE
ロールが付与された管理ユーザーとして接続し、エクスポートを実行します。このユーザーには、手順2で作成したディレクトリ・オブジェクトに対するREAD
およびWRITE
権限も必要です。この例では、Oracle Streams管理者strmadmin
として接続します。
データ・ポンプでのエクスポート・コマンドの例を次に示します。
expdp strmadmin FULL DIRECTORY=DPUMP_DIR DUMPFILE=orc1.dmp FLASHBACK_SCN=876606
関連項目: データ・ポンプでのエクスポートを実行する方法については、Oracle Databaseユーティリティを参照 |
SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。
インポート・ダンプ・ファイルおよびインポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。
CREATE DIRECTORY dpump_dir AS '/usr/dpump_dir';
データ・ポンプのエクスポート・ダンプ・ファイルorc1.dmp
を宛先データベースに転送します。このファイルを宛先データベースに転送するには、DBMS_FILE_TRANSFER
パッケージ、バイナリFTPまたはその他の方法を使用します。ファイルの転送後、エクスポート・ダンプ・ファイルは、手順6で作成したディレクトリ・オブジェクトに対応するディレクトリに格納されます。
宛先データベースのコマンドラインで、データ・ポンプを使用してエクスポート・ダンプ・ファイルorc1.dmp
をインポートします。インポートが完了するまでデータベース表に対して変更が行われないようにします。インポートを実行すると、宛先データベースおよびそのすべてのオブジェクトに対してインスタンス化SCNが自動的に設定されます。
IMP_FULL_DATABASE
ロールが付与された管理ユーザーとして接続し、インポートを実行します。このユーザーには、手順6で作成したディレクトリ・オブジェクトに対するREAD
およびWRITE
権限も必要です。この例では、Oracle Streams管理者strmadmin
として接続します。
インポート・コマンドの例を次に示します。
impdp strmadmin FULL DIRECTORY=DPUMP_DIR DUMPFILE=orc1.dmp STREAMS_CONFIGURATION=n
関連項目: データ・ポンプでのインポートを実行する方法については、Oracle Databaseユーティリティを参照 |
同じプラットフォーム上でのインスタンス化にRecovery ManagerのDUPLICATE
コマンドを使用する場合、次の手順を実行します。
バックアップがまだの場合は、ソース・データベースのバックアップを作成します。Recovery Managerでは、複製に有効なバックアップが必要です。ここでは、バックアップがまだの場合は、orcl.example.com
のバックアップを作成します。
注意: Recovery ManagerのDUPLICATE コマンドの実行時にFROM ACTIVE DATABASE オプションを使用する場合、ソース・データベースのバックアップは必要ありません。データベースが大きい場合、FROM ACTIVE DATABASE オプションを使用するには、多くのネットワーク・リソースが必要です。ここでは、このオプションは使用していません。 |
SQL*Plusで、ソース・データベースに管理ユーザーとして接続します。この例では、ソース・データベースはorcl.example.com
です。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
Recovery Managerの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値を748044
としています。手順7でRecovery Managerを使用してデータベースを複製するときに、UNTIL
SCN
オプションをこの値に設定します。また、「タスク 4: インスタンス化後のOracle Streamsの設定」のインスタンス化SCNもこの値に設定します。
現行のオンラインREDOログをアーカイブします。次に例を示します。
ALTER SYSTEM ARCHIVE LOG CURRENT;
データベースの複製用に環境を準備します。宛先データベースを複製の補助インスタンスとして準備します。手順については、Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイドを参照してください。
Recovery Mamangerクライアントを起動して、TARGET
としてデータベースorcl.example.com
に、AUXILIARY
としてデータベースstms.example.com
に接続します。管理ユーザーとして各データベースに接続します。
Recovery ManagerのCONNECT
コマンドの詳細は、Oracle Databaseバックアップおよびリカバリ・リファレンスを参照してください。
Recovery ManagerのDUPLICATE
コマンドにOPEN
RESTRICTED
オプションを指定して、宛先データベースでソース・データベースをインスタンス化します。OPEN
RESTRICTED
オプションは必須です。このオプションを指定してSQL文ALTER
SYSTEM
ENABLE
RESTRICTED
SESSION
を発行することで、複製データベースの制限付きのセッションが有効になります。Recovery Managerは、複製データベースのオープン直前にこの文を発行します。
UNTIL
SCN
句を使用して、複製のSCNを指定できます。この句には、手順3で決定した終了SCNを使用します。指定した終了SCNおよび上位SCN値に対して、アーカイブREDOログが使用可能である必要があります。そのために、手順4で終了SCNを含むREDOログをアーカイブしました。
複製データベースの名前を指定するには、DUPLICATE
コマンドでTO
database_name
を使用します。ここでは、複製データベースをstms.example.com
とします。つまり、この例のDUPLICATE
コマンドには、TO
stms.example.com
が含まれます。
次に、Recovery ManagerのDUPLICATE
コマンドの例を示します。
RMAN> RUN { SET UNTIL SCN 748044; ALLOCATE AUXILIARY CHANNEL mgdb DEVICE TYPE sbt; DUPLICATE TARGET DATABASE TO mgdb NOFILENAMECHECK OPEN RESTRICTED; }
SQL*Plusで、宛先データベースにシステム管理者として接続します。この例では、宛先データベースはstms.example.com
です。
グローバル名を変更します。Recovery Managerを使用してデータベースをインスタンス化すると、宛先データベースとソース・データベースのグローバル名が同じになりますが、宛先データベースの名前は、メンテナンス操作が完了するまで元の名前である必要があります。次の文を使用して、宛先データベースのグローバル名を元の名前に戻します。
ALTER DATABASE RENAME GLOBAL_NAME TO stms.example.com;
SQL*Plusで、宛先データベースに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;
関連項目: Recovery ManagerのDUPLICATE コマンドの詳細は、Oracle Databaseバックアップおよびリカバリ・リファレンスを参照 |
インスタンス化にRecovery ManagerのCONVERT
DATABASE
コマンドを使用してデータベースを異なるプラットフォームに移行する場合、次の手順を実行します。
バックアップがまだの場合は、ソース・データベースのバックアップを作成します。Recovery Managerでは、有効なバックアップが必要です。ここでは、バックアップがまだの場合は、orcl.example.com
のバックアップを作成します。
SQL*Plusで、ソース・データベースに管理ユーザーとして接続します。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
現行のオンラインREDOログをアーカイブします。次に例を示します。
ALTER SYSTEM ARCHIVE LOG CURRENT;
データベースの変換用に環境を準備します。たとえば、ソース・データベースを読取り専用モードでオープンします。次の手順を実行します。
ソース・データベースがオープンしている場合は、停止して読取り専用モードで起動します。
DBMS_TDB
パッケージのCHECK_DB
およびCHECK_EXTERNAL
ファンクションを実行します。結果をチェックして、Recovery Managerの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
と想定しています。
Recovery Mamangerクライアントを起動し、TARGET
でデータベースorcl.example.com
に管理ユーザーとして接続します。
Recovery ManagerのCONNECT
コマンドの詳細は、Oracle Databaseバックアップおよびリカバリ・リファレンスを参照してください。
CONVERT
DATABASE
コマンドを実行します。
CONVERT
DATABASE
コマンドでNEW
DATABASE
database_name
を使用して、宛先データベースの名前を指定する必要があります。この例では、宛先データベースの名前をstms
とします。つまり、この例のCONVERT
DATABASE
コマンドには、NEW
DATABASE
stms
が含まれます。
Linux
IA
(64-bit)
プラットフォームで実行される宛先データベースに対するRecovery Managerの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');
Recovery ManagerのCONVERT
DATABASE
コマンドによって生成されたデータファイル、PFILEおよびSQLスクリプトを、宛先データベースが実行されているコンピュータ・システムに転送します。
宛先データベースが実行されているコンピュータ・システムで、制限付きセッションが有効にされた状態で宛先データベースが常にオープンするようにSQLスクリプトを変更します。
次のスクリプトの例では、必要な変更を太字で示しています。
-- The following commands will create a new 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で、宛先データベースにシステム管理者として接続します。
グローバル名を変更します。Recovery Managerを使用してデータベースをインスタンス化すると、宛先データベースとソース・データベースのグローバル名が同じになりますが、宛先データベースの名前は、メンテナンス操作が完了するまで元の名前である必要があります。次の文を使用して、宛先データベースのグローバル名を元の名前に戻します。
ALTER DATABASE RENAME GLOBAL_NAME TO stms.example.com;
新しいグローバル名を使用して、宛先データベースに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;
インスタンス化の後に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
パラメータを正しく設定することが重要です。このパラメータを設定するには、次の手順を実行します。
インスタンス化にRecovery Managerを使用した場合、instantiation_scn
パラメータをインスタンス化中に判別した値に設定します。この値は、「Recovery ManagerのDUPLICATEコマンドを使用したデータベースのインスタンス化」または「Recovery ManagerのCONVERT DATABASEコマンドを使用したデータベースのインスタンス化」でインスタンス化を実行したときに判別した値です。
この項に示すソース・データベースと第3のデータベースの例では、次のような理由で、instantiation_scn
パラメータを748044
に設定します。
インスタンス化にRecovery ManagerのDUPLICATE
コマンドを使用した場合、UNTIL
SCN
句で指定したSCN値より1少ないSCNまでデータベースが複製されます。つまり、「Recovery ManagerのDUPLICATEコマンドを使用したデータベースのインスタンス化」の手順7でDUPLICATE
コマンドを実行したときに指定した終了SCN値から1を引きます。この場合、終了SCN値は748045
でした。つまり、instantiation_scn
パラメータは、 748045 - 1で748044
となります。
インスタンス化にRecovery ManagerのCONVERT
DATABASE
コマンドを使用した場合、instantiation_scn
パラメータはCONVERT
DATABASE
コマンドを実行する直前に判別したSCN値に設定する必要があります。この値は、「Recovery ManagerのCONVERT DATABASEコマンドを使用したデータベースのインスタンス化」の手順5で判別しています。
インスタンス化にエクスポート/インポートを使用した場合、インスタンス化SCNはインポート中に設定されているため、instantiation_scn
パラメータをNULL
に設定する必要があります。この項に示す宛先データベースの例では、宛先データベースを取得データベースとする場合にはデータベースのインスタンス化にRecovery Managerを使用できないため、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を設定します。
SQL*Plusで、ソース・データベースにOracle Streams管理者として接続します。この例では、ソース・データベースはorcl.example.com
です。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
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; /
取得データベースに宛先データベースを使用する場合、次の手順を実行して、インスタンス化の後にOracle Streamsを設定します。
SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはstms.example.com
です。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
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のデータベースのグローバル名がthrd.example.com
であると想定しています。取得データベースに第3のデータベースを使用する場合、次の手順を実行して、インスタンス化の後にOracle Streamsを設定します。
SQL*Plusで、第3のデータベースにOracle Streams管理者として接続します。この例では、第3のデータベースはthrd.example.com
です。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
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; /
次の手順を実行して、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;
宛先データベースにOracle Streams管理者として接続します。
適用プロセスを開始します。次に例を示します。
BEGIN DBMS_APPLY_ADM.START_APPLY( apply_name => 'apply_maint'); END; /
取得データベースにOracle Streams管理者として接続します。
取得プロセスを起動します。次に例を示します。
BEGIN DBMS_CAPTURE_ADM.START_CAPTURE( capture_name => 'capture_maint'); END; /
この手順は、宛先データベースのインスタンス化中に、ソース・データベースに対して行われた変更をレプリケートするプロセスを起動します。
適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用するまで、Oracle Streams環境を監視します。
適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用したかどうかを判断するには、次の手順を実行します。
取得プロセスのエンキュー・メッセージ番号および適用プロセスの最高水位標メッセージ番号を問い合せ、これらがほとんど等しいかどうかを確認します。
たとえば、取得プロセスの名前がcapture_maint
、適用プロセスの名前がapply_maint
の場合は、取得データベースで次の問合せを実行します。
COLUMN ENQUEUE_MESSAGE_NUMBER HEADING 'Captured SCN' FORMAT 99999999999 COLUMN HWM_MESSAGE_NUMBER HEADING 'Applied SCN' FORMAT 99999999999 SELECT c.ENQUEUE_MESSAGE_NUMBER, a.HWM_MESSAGE_NUMBER FROM V$STREAMS_CAPTURE c, V$STREAMS_APPLY_COORDINATOR@stms.example.com a WHERE CAPTURE_NAME = 'CAPTURE_MAINT' AND APPLY_NAME = 'APPLY_MAINT';
この問合せで戻される2つのSCN値がほぼ同じ場合は、ソース・データベースからのほとんどの変更が宛先データベースに適用済で、次の手順に進むことができます。この時点では、ソース・データベースがまだ変更可能であるため、この問合せで同じ値が戻されることはありません。
この問合せで結果が戻されない場合は、取得データベースのDBA_CAPTURE
ビューおよび宛先データベースのDBA_APPLY
ビューのSTATUS
列を問い合せて、環境のOracle Streamsクライアントが有効かどうかを確認します。伝播を使用する場合、「伝播ジョブのスケジュールの表示」にある問合せを実行して、伝播の状態を確認できます。
Oracle Streamsクライアントが無効な場合は、再起動します。Oracle Streamsクライアントが再起動されない場合は、第20章「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でソース・データベースに管理ユーザーとして接続した状態で、手順10で実行した問合せを再度実行します。この問合せで戻される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;
これで、メンテナンス操作は完了です。