この付録では、Oracle Streamsを使用して、データベースを次のいずれかのOracle Databaseリリースからアップグレードする方法について説明します。
Oracle Database 10g リリース1(10.1)
Oracle9iリリース2(9.2)
この付録で説明するデータベースのアップグレード操作では、わずかな停止時間または停止時間なしでデータベースをアップグレードするために、Oracle Streamsの機能を使用します。
次の項では、Oracle Streamsを使用したオンラインでのデータベースのアップグレードについて説明します。
関連項目: Oracle Database 10g リリース2 (10.2)以上からアップグレードする方法の詳細、およびOracle Streamsを使用してデータベースに対して他のメンテナンス操作を実行する方法の詳細は、付録D「Oracle Streamsを使用したオンラインでのデータベースのアップグレードおよびメンテナンス」を参照 |
Oracle Databaseのアップグレードは、既存の以前のリリースのOracle Databaseを今回のリリースのOracle Databaseに変換するプロセスです。通常、データベースをアップグレードするには、データベースを長時間停止する必要がありますが、Oracle Streamsの機能を使用することで、わずかな停止時間または停止時間なしでデータベースをアップグレードできます。そのためには、Oracle Streamsを使用して、次のデータベースを含むレプリケーション環境を構成します。
ソース・データベース: アップグレード対象の元のデータベース。
取得データベース: アップグレード中にソース・データベースに対して行われた変更が取得プロセスによって取得されるデータベース。
宛先データベース: アップグレード・プロセス中にソース・データベースに対して行われた変更が適用プロセスによって適用されるソース・データベースのコピー。
次の一般的な手順で、データベースがオンラインの状態でデータベースをアップグレードできます。
空の宛先データベースを作成します。
Oracle Streamsのレプリケーション環境を構成します(元のデータベースがソース・データベースで、データベースのコピーがソースで行われた変更の宛先データベースです)。
宛先データベースに対してデータベースのアップグレードを実行します。このとき、元のソース・データベースはオンラインで使用可能です。
Oracle Streamsを使用して、ソース・データベースで行われた変更を宛先データベースに適用します。
ソース・データベースで行われた変更を宛先データベースに適用した後、ソース・データベースをオフラインにして、アプリケーションおよびユーザーが宛先データベースを使用できるようにします。
図E-1に、このプロセスの概要を示します。
アップグレード・プロセス中、取得データベースで取得プロセスが作成されます。Oracle Database 10g リリース1 (10.1)にはダウンストリーム取得が導入されています。データベースをOracle Database 10g リリース1からアップグレードする場合は、次のオプションを使用できます。
アップグレード・プロセス中に、ソース・データベースでローカル取得プロセスを作成する。
宛先データベースで、ダウンストリーム取得プロセスを作成する。宛先データベースが取得データベースである場合、取得データベースから宛先データベースへの伝播は不要です。
第3のデータベースを取得データベースにする。この場合、第3のデータベースには、Oracle Database 10g リリース1以上のデータベースを使用できます。
ただし、データベースをOracle9i リリース2 (9.2)からOracle Database 11g リリース2以上にアップグレードする場合、ダウンストリーム取得がサポートされていないため、ローカル取得プロセスをソース・データベースで作成する必要があります。
ダウンストリーム取得プロセスを使用すると、アップグレード・プロセス中にソース・データベースに必要なリソースが削減されますが、ローカル取得プロセスの方が構成が簡単です。表E-1に、アップグレード・プロセス中に取得データベースにできるデータベースを示します。
表E-1 サポートされているアップグレード中の取得データベース
既存のデータベースのリリース | 取得データベースにソース・データベースを使用可能かどうか | 取得データベースに宛先データベースを使用可能かどうか | 取得データベースに第3のデータベースを使用可能かどうか |
---|---|---|---|
9.2 |
はい |
いいえ |
いいえ |
10.1 |
はい |
はい |
はい |
注意: Oracle Database 10g リリース1 (10.1)からアップグレードする場合、アップグレードを開始する前に、取得データベースとするデータベースを決定してください。 |
この付録で説明する手順は、アップグレード対象のデータベースが次のすべての条件を満たしていることを前提としています。
データベースは、既存のOracle Streams環境に含まれない。
データベースは、既存のロジカル・スタンバイ環境に含まれない。
データベースは、既存のAdvanced Replication環境に含まれない。
データベースには、他のデータベースのマテリアライズド・ビューのマスター表である表は存在しない。
アップグレード・プロセス中、メッセージはユーザー作成キューにエンキューされない。
可能であれば、アップグレード・プロセス中にジョブ・キュー・プロセスを作成、変更または削除しないでください。また、アップグレード・プロセス中は、ユーザー・データとディクショナリ・メタデータを同時に変更するOracle提供のPL/SQLパッケージのサブプログラムを起動しないでください。DBMS_RLS
、DBMS_STATS
およびDBMS_JOB
パッケージには、ユーザー・データとディクショナリ・メタデータを同時に変更するサブプログラムが含まれています。
「タスク5: アップグレードの完了およびOracle Streamsの削除」の手順13および14で、ソース・データベースと宛先データベースで同じ操作を確実に実行した場合に、データベースでこのような操作が実行される可能性があります。たとえば、アップグレード・プロセス中に、PL/SQLプロシージャによってソース・データベース上で統計が収集された場合、手順14でも、宛先データベースで同じPL/SQLプロシージャを起動する必要があります。
この項では、Oracle Streamsを使用したデータベースのアップグレードを開始する前に完了する必要があるタスクについて説明します。
ユーザー定義型には、オブジェクト型、REF
値、VARRAY、ネストした表などがあります。今回のリリースでは、Oracle Streamsの取得プロセスおよび適用プロセスでは、ユーザー定義型はサポートされていません。この項では、Oracle Streamsを使用してユーザー定義型を含むデータベースをアップグレードする方法について説明します。
1つの方法は、データベースのアップグレード中に、ユーザー定義型を含む表に対して、データ操作言語(DML)またはデータ定義言語(DDL)の変更が行われないようにすることです。この場合、これらの表は宛先データベースでインスタンス化され、操作中にその表に対する変更は行われません。アップグレードの完了後に、宛先データベースでユーザー定義型を含む表を読取り/書込み可能にします。
アップグレード中にユーザー定義型を含む表をオープン状態のままにしておく必要がある場合は、次の一般的な手順を実行して、アップグレード中にその表に対して行われる変更を保持してください。
「Oracle Streamsを使用したデータベースのアップグレードの実行」で説明するアップグレード・プロセスを開始する前に、ユーザー定義型を含むソース・データベースの表に対する行変更を格納する1つ以上のロギング表を作成します。ロギング表の各列では、ソース・データベースのリリースのOracle Streamsでサポートされているデータ型を使用する必要があります。
「Oracle Streamsを使用したデータベースのアップグレードの実行」で説明するアップグレード・プロセスを開始する前に、ユーザー定義のデータ型を含む表で起動されるDMLトリガーをソース・データベースで作成します。このトリガーによって、各行変更が等価なリレーショナルに変換され、手順1で作成したロギング表に変更された行が記録されます。
「Oracle Streamsを使用したデータベースのアップグレードの実行」の手順で取得プロセスおよび伝播を構成するときに、ロギング表に対する変更を取得して宛先データベースに伝播するように、取得プロセスおよび伝播を構成します。ユーザー定義型を含む表に対する変更は、取得または伝播されないようにする必要があります。
「Oracle Streamsを使用したデータベースのアップグレードの実行」の手順で宛先データベースの適用プロセスを構成するときに、ロギング表に対する変更を処理するプロシージャDMLハンドラを使用するように適用プロセスを構成します。プロシージャDMLハンドラによって等価なリレーショナルからユーザー定義型が再構成され、ユーザー定義型を含む表に対する変更が適用されます。
手順については、Webブラウザを使用してMy Oracle Support (旧OracleMetaLink) Webサイトを参照してください。
http://support.oracle.com/
Oracle Streamsの追加のデータ型のサポートについては、データベース掲示板556742.1で説明されています。
データベースのアップグレードを開始する前に、操作中に宛先データベースをインスタンス化するために、エクスポート/インポート・ユーティリティ(データ・ポンプまたはオリジナル)を使用するか、Recovery Manager(RMAN)ユーティリティを使用するかを決定します。アップグレード対象の既存のデータベースは、宛先データベースに置き換えられます。
宛先データベースのインスタンス化にどちらのユーティリティを使用するかを決定するには、次の事項を考慮します。
オリジナルのエクスポート/インポートまたはデータ・ポンプ・エクスポート/インポートを使用すると、操作の最初で、宛先データベースをOracle Database 11g リリース2 (11.2)以上のデータベースにできます。つまり、インスタンス化の後、宛先データベースをアップグレードする必要はありません。
インスタンス化にエクスポート/インポートを使用する場合、データ・ポンプがサポートされているときは、データ・ポンプを使用することをお薦めします。データ・ポンプを使用すると、オリジナルのエクスポート/インポートを使用するより高速でインスタンス化を実行できます。
RMANのDUPLICATE
コマンドを使用する場合は、特にデータベースが大きいときに、エクスポート/インポートを使用するより速くインスタンス化を実行できます。ただし、RMANインスタンス化ではデータベース・リリースが同じである必要があります。したがって、次の条件を満たしている必要があります。
データベースがOracle9i リリース2 (9.2)データベースである場合、インスタンス化時の宛先データベースもOracle9i Databaseリリース2データベースである。
データベースがOracle Database 10g リリース1 (10.1)データベースである場合、インスタンス化時の宛先データベースもOracle Database 10g リリース1データベースである。
インスタンス化の後で、宛先データベースをアップグレードする必要があります。
また、分散トランザクションが可能な環境でインスタンス化を行う場合は、RMANを使用しないことをお薦めします。これを行うと、手動での修正が必要なインダウント・トランザクションが実行される場合があります。
表E-2に、各インスタンス化方法でサポートされているアップグレード対象のデータベースのリリースを示します。また、ソース・データベースと宛先データベースのプラットフォームまたはキャラクタ・セットが異なる場合に、各インスタンス化方法がサポートされるかどうかを示します。ソース・データベースと宛先データベースのプラットフォームおよびキャラクタ・セットが同じ場合は、すべてのインスタンス化方法がサポートされます。
この項では、Oracle Streamsを使用してデータベースをアップグレードする手順について説明します。これらの手順では、Oracle Streamsを使用して、Oracle9i リリース2(9.2)またはOracle Database 10g リリース1(10.1)のいずれかのOracle Databaseリリースをアップグレードします。
Oracle Streamsを使用してデータベースをアップグレードするには、次のタスクを実行します。
次の手順を実行して、Oracle Streamsを使用したアップグレードを開始します。
空の宛先データベースを作成します。このデータベースのグローバル名がソース・データベースとは異なることを確認してください。ここでは、ソース・データベースのグローバル名がorcl.example.com
、アップグレードで使用する宛先データベースのグローバル名がupdb.example.com
であると想定しています。宛先データベースのグローバル名は、アップグレード・プロセスの最後で、宛先データベースがソース・データベースと置き換わるときに変更されます。
作成する空のデータベースのリリースは、「インスタンス化で使用するユーティリティの決定」で使用することを決定したインスタンス化方法によって異なります。
インスタンス化にエクスポート/インポートを使用することを決定した場合、空のOracle Database 11g リリース2以上のデータベースを作成します。このデータベースは、アップグレード・プロセス中の宛先データベースとなります。
Oracle Databaseをインストールする必要がある場合は、ご使用のオペレーティング・システムのOracle Databaseインストレーション・ガイドを参照してください。また、データベースを作成する方法については、『Oracle Database管理者ガイド』を参照してください。
インスタンス化にRMANを使用することを決定した場合、アップグレード対象のデータベースと同じリリースの空のOracle Databaseを作成します。
具体的には、Oracle9i リリース2(9.2)データベースをアップグレードする場合、Oracle9i リリース2データベースを作成します。また、Oracle Database 10g リリース1(10.1)データベースをアップグレードする場合は、Oracle Database 10g リリース1データベースを作成します。
このデータベースは、アップグレード・プロセス中の宛先データベースとなります。アップグレード・プロセスを開始する場合、アップグレード対象のソース・データベースと宛先データベースの両方が同じリリースのOracleである必要があります。
Oracleをインストールする必要がある場合は、ご使用のオペレーティング・システムのOracleインストレーション・ガイドを参照してください。また、データベースを作成する方法については、対象のリリースの『Oracle Database管理者ガイド』を参照してください。
ソース・データベースがARCHIVELOG
モードで実行されていることを確認します。ARCHIVELOG
モードでデータベースを実行する方法については、そのソース・データベースのリリースの『Oracle Database管理者ガイド』を参照してください。
各データベースで、Oracle Streams環境がサポートされるように初期化パラメータが適切に設定されていることを確認します。ソース・データベースについては、そのソース・データベースのリリースのOracle Streamsマニュアルを参照してください。宛先データベースについては、Oracle Streamsに関連する初期化パラメータを設定する方法について、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。取得データベースに第3のデータベースを使用する場合は、その取得データベースのリリースのOracle Streamsマニュアルを参照してください。
ソース・データベースで、アップグレード・プロセス中に、アップグレード対象のリリースにおいてOracle Streamsではサポートされていないデータベース・オブジェクトが変更されないようにします。
Oracle9i リリース2 (9.2)データベースをアップグレードする場合、データ型がNCLOB
、LONG
、LONG
RAW
、BFILE
、ROWID
、UROWID
の列を持つ表、およびユーザー定義型(オブジェクト型、REF、VARRAY、ネストした表など)の列を持つ表はサポートされていません。また、一時表、索引構成表およびオブジェクト表はサポートされていません。サポートされていないデータベース・オブジェクトについては、Oracle9i Streamsを参照してください。
Oracle Database 10g リリース1 (10.1)データベースをアップグレードする場合、DBA_STREAMS_UNSUPPORTED
データ・ディクショナリ・ビューを問い合せて、Oracle Streamsでサポートされていないデータベース・オブジェクトを表示します。アップグレード・プロセス中にこれらのデータベース・オブジェクトが変更されないようにしてください。
「ユーザー定義型を含むデータベースのアップグレードの準備」で、アップグレード中にユーザー定義型を含む表に対して行われる変更を保持する方法を説明しています。この方法を使用すると、アップグレード中に、ユーザー定義型を含む表をオープン状態のままにできます。
ソース・データベースで、Oracle Streams管理者を構成します。
Oracle9i リリース2 (9.2)データベースをアップグレードする場合、詳細は、Oracle9i Streamsを参照してください。
Oracle Database 10gリリース1データベースをアップグレードする場合、詳細は、そのリリースの『Oracle Streams概要および管理』を参照してください。
これらの手順では、ソース・データベースのOracle Streams管理者の名前がstrmadmin
であると想定しています。このOracle Streams管理者は、インスタンス化中に、自動的に宛先データベースにコピーされます。
SQL*Plusで、ソース・データベースorcl.example.com
に管理ユーザーとして接続します。
SQL*Plusでデータベースに接続する方法については、ソース・データベースのリリースの『Oracle Database管理者ガイド』を参照してください。
すべての更新に対して主キー、一意キーおよび外部キーのデータベース・サプリメンタル・ロギングを指定します。次に例を示します。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE, FOREIGN KEY) COLUMNS;
インスタンス化の前にOracle Streamsを設定する手順は、取得データベースとするデータベースによって異なります。次のいずれかの項の手順に従ってください。
取得データベースにソース・データベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。
ソース・データベースが宛先データベースと通信できるように、ネットワークおよびOracle Netを構成します。詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
SQL*Plusで、ソース・データベースorcl.example.com
にOracle Streams管理者として接続します。
SQL*Plusでデータベースに接続する方法については、ソース・データベースのリリースの『Oracle Database管理者ガイド』を参照してください。
アップグレード・プロセス中にソース・データベースに対して行われた変更をステージングするANYDATA
キューを作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'strmadmin.capture_queue_table', queue_name => 'strmadmin.capture_queue'); END; /
ソース・データベースへのすべてのサポートされている変更を取得する取得プロセスを構成し、手順3で作成したキューにこれらの変更をステージングします。取得プロセスは起動しないでください。次に例を示します。
BEGIN DBMS_STREAMS_ADM.ADD_GLOBAL_RULES( streams_type => 'capture', streams_name => 'capture_upgrade', queue_name => 'strmadmin.capture_queue', include_dml => TRUE, include_ddl => TRUE, include_tagged_lcr => FALSE, source_database => 'orcl.example.com', inclusion_rule => TRUE); END; /
「ユーザー定義型を含むデータベースのアップグレードの準備」で、メンテナンス操作中にユーザー定義型を含む表に対して行われる変更を保持する方法について説明しています。この方法を使用する場合、ユーザー定義型を含む表に対する変更が取得プロセスによって取得されないことを確認します。ルールを使用してOracle Streams構成からデータベース・オブジェクトを除外する方法については、ソース・データベースのリリースのOracle Streamsマニュアルを参照してください。
「タスク3: データベースのインスタンス化」に進みます。
この方法を使用するには、アップグレード対象のデータベースがOracle Database 10g リリース1 (10.1)データベースである必要があります。取得データベースに宛先データベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。
ソース・データベースが宛先データベースと通信できるように、ネットワークおよびOracle Netを構成します。詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
使用するインスタンス化方法に基づいて、次のいずれかの項の手順を実行します。
エクスポート/インポート
インスタンス化にエクスポート/インポートを使用する場合、次の手順を実行します。
SQL*Plusで、宛先データベースupdb.example.com
にOracle Streams管理者として接続します。
SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
アップグレード・プロセス中にソース・データベースに対して行われた変更をステージングするANYDATA
キューを作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'strmadmin.destination_queue_table', queue_name => 'strmadmin.destination_queue'); END; /
ソース・データベースへのすべてのサポートされている変更を取得するダウンストリーム取得プロセスを構成し、手順bで作成したキューにこれらの変更をステージングします。取得プロセスでソース・データベースへのデータベース・リンクが使用されることを確認します。取得プロセスには、リアルタイム・ダウンストリーム取得プロセスまたはアーカイブ・ログ・ダウンストリーム取得プロセスを使用できます。詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。取得プロセスは起動しないでください。
「ユーザー定義型を含むデータベースのアップグレードの準備」で、メンテナンス操作中にユーザー定義型を含む表に対して行われる変更を保持する方法について説明しています。この方法を使用する場合、ユーザー定義型を含む表に対する変更が取得プロセスによって取得されないことを確認します。ルールを使用してOracle Streams構成からデータベース・オブジェクトを除外する方法については、ソース・データベースのOracle Streamsマニュアルを参照してください。
RMAN
インスタンス化にRMANを使用する場合、次の手順を実行します。
SQL*Plusで、ソース・データベースorcl.example.com
にOracle Streams管理者として接続します。
SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
REDOログにデータ・ディクショナリを作成します。
SET SERVEROUTPUT ON DECLARE scn NUMBER; BEGIN DBMS_CAPTURE_ADM.BUILD( first_scn => scn); DBMS_OUTPUT.PUT_LINE('First SCN Value = ' || scn); END; / First SCN Value = 1122610
このプロシージャによって、宛先データベースで作成される取得プロセスの有効な先頭SCN値が表示されます。戻されたSCN値を書き留めます。この値は、宛先データベースで取得プロセスを作成するときに使用します。
ソース・データベースでインスタンス化の準備を行います。
exec DBMS_CAPTURE_ADM.PREPARE_GLOBAL_INSTANTIATION();
「タスク3: データベースのインスタンス化」に進みます。
この方法を使用するには、次の要件を満たす必要があります。
アップグレード対象のデータベースは、Oracle Database 10g リリース1 (10.1)データベースである必要があります。
第3のデータベースは、Oracle Database 10g リリース1以上のデータベースである必要があります。
ここでは、第3のデータベースのグローバル名がthrd.example.com
であると想定しています。取得データベースに第3のデータベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。
ソース・データベース、宛先データベースおよび第3のデータベースが相互に通信できるように、ネットワークおよびOracle Netを構成します。詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
SQL*Plusで、第3のデータベースthrd.example.com
に管理ユーザーとして接続します。
SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
Oracle Streams管理者を作成します。
第3のデータベースがOracle Database 10g データベースまたはOracle Database 11g リリース1データベースである場合、詳細は、そのリリースの『Oracle Streams概要および管理』を参照してください。
第3のデータベースがOracle Database 11g リリース2以上のデータベースである場合、詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。
これらの手順では、第3のデータベースのOracle Streams管理者の名前がstrmadmin
であると想定しています。
第3のデータベースにOracle Streams管理者として接続したままの状態で、アップグレード・プロセス中にソース・データベースに対して行われた変更をステージングするANYDATA
キューを作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'strmadmin.capture_queue_table', queue_name => 'strmadmin.capture_queue'); END; /
ソース・データベースへのすべてのサポートされている変更を取得するダウンストリーム取得プロセスを構成し、手順4で作成したキューにこれらの変更をステージングします。取得プロセスでソース・データベースへのデータベース・リンクが使用されることを確認します。取得プロセスは起動しないでください。
詳細は、次のドキュメントを参照してください。
取得データベースがOracle Database 10g データベースまたはOracle Database 11g リリース1データベースである場合、詳細は、そのリリースの『Oracle Streams概要および管理』を参照してください。
取得データベースがOracle Database 11g リリース2以上のデータベースである場合は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。
取得プロセスには、リアルタイム・ダウンストリーム取得プロセスまたはアーカイブ・ログ・ダウンストリーム取得プロセスを使用できます。
「ユーザー定義型を含むデータベースのアップグレードの準備」で、アップグレード操作中にユーザー定義型を含む表に対して行われる変更を保持する方法について説明しています。この方法を使用する場合、ユーザー定義型を含む表に対する変更が取得プロセスによって取得されないことを確認します。ルールを使用してOracle Streams構成からデータベース・オブジェクトを除外する方法については、ソース・データベースのOracle Streamsマニュアルを参照してください。
「タスク3: データベースのインスタンス化」に進みます。
「インスタンス化で使用するユーティリティの決定」で、データベース全体をインスタンス化するための様々な方法について説明しています。使用するインスタンス化方法に基づいて、次のいずれかの項の手順を実行します。
次の手順を実行して、エクスポート/インポートを使用して宛先データベースをインスタンス化します。
エクスポート/インポートを使用して、宛先データベースをインスタンス化します。インスタンス化を実行する方法の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。エクスポート/インポート・ユーティリティを使用してエクスポート/インポートを実行する方法の詳細は、『Oracle Databaseユーティリティ』を参照してください。
Oracle Data Pumpまたはオリジナルのエクスポート/インポートを使用して宛先データベースをインスタンス化する場合、次のとおりパラメータが適切な値に設定されていることを確認します。
STREAMS_CONFIGURATION
インポート・パラメータをn
に設定します。
オリジナルのエクスポート/インポートを使用する場合は、CONSISTENT
エクスポート・パラメータをy
に設定します。このパラメータは、データ・ポンプでのエクスポートには適用されません。
オリジナルのエクスポート/インポートを使用する場合は、STREAMS_INSTANTIATION
インポート・パラメータをy
に設定します。このパラメータは、データ・ポンプでのインポートには適用されません。
Oracle9i リリース2(9.2)をアップグレードする場合、オリジナルのエクスポート/インポートを使用する必要があります。
宛先データベースで、ソース・データベースからレプリケートされるデータを変更するインポート済のジョブを無効にします。DBA_JOBS
データ・ディクショナリ・ビューを問い合せて、ジョブを表示します。
次の手順を実行して、RMANのDUPLICATE
コマンドを使用して宛先データベースをインスタンス化します。
注意: ここで示すのは、RMANを使用してデータベースを複製する手順の概略です。Oracle9i リリース2データベースをアップグレードする場合、そのリリースのRMANを使用する方法の詳細は、『Oracle9i Recovery Managerユーザーズ・ガイド』を参照してください。Oracle Database 10g リリース1(10.1)データベースをアップグレードする場合、そのリリースの『Oracle Databaseバックアップおよびリカバリ・アドバンスト・ユーザーズ・ガイド』を参照してください。 |
バックアップがまだの場合は、ソース・データベースのバックアップを作成します。RMANでは、複製に有効なバックアップが必要です。ここでは、バックアップがまだの場合は、orcl.example.com
のバックアップを作成します。
SQL*Plusで、ソース・データベースorcl.example.com
に管理ユーザーとして接続します。
SQL*Plusでデータベースに接続する方法については、ソース・データベースのリリースの『Oracle Database管理者ガイド』を参照してください。
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値を439882
としています。手順7でRMANを使用してデータベースを複製するときに、UNTIL
SCN
オプションをこの値に設定します。
SQL*Plusでソース・データベースに管理ユーザーとして接続した状態で、現行のオンラインREDOログをアーカイブします。次に例を示します。
ALTER SYSTEM ARCHIVE LOG CURRENT;
データベースの複製用に環境を準備します。宛先データベースを複製の補助インスタンスとして準備します。詳細は、アップグレード対象のリリースのマニュアルを参照してください。具体的には、『Oracle9i Recovery Managerユーザーズ・ガイド』または『Oracle Databaseバックアップおよびリカバリ・アドバンスト・ユーザーズ・ガイド』(10g用)のRecovery Managerを使用したデータベースの複製に関する章を参照してください。
RMANクライアントを起動して、TARGET
としてデータベースorcl.example.com
に、AUXILIARY
としてデータベースupdb.example.com
に接続します。管理ユーザーとして各データベースに接続します。
RMANのCONNECT
コマンドの詳細は、ご使用のOracle DatabaseリリースのRMANのマニュアルを参照してください。
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
を使用します。ここでは、複製データベースの名前をupdb
とします。つまり、この例のDUPLICATE
コマンドには、TO
updb
が含まれます。
次にRMANのDUPLICATE
コマンドの例を示します。
RMAN> RUN { SET UNTIL SCN 439882; ALLOCATE AUXILIARY CHANNEL updb DEVICE TYPE sbt; DUPLICATE TARGET DATABASE TO updb NOFILENAMECHECK OPEN RESTRICTED; }
SQL*Plusで、宛先データベースに管理ユーザーとして接続します。
RESTRICTED
SESSION
を無効にするには、ALTER
SYSTEM
文を使用します。
ALTER SYSTEM DISABLE RESTRICTED SESSION;
SQL*Plusで、宛先データベースに管理ユーザーとして接続したままの状態で、データベースのグローバル名を変更します。RMANのDUPLICATE
コマンドを実行すると、宛先データベースとソース・データベースのグローバル名が同じになりますが、宛先データベースの名前は、アップグレードが完了するまで元の名前である必要があります。次に例を示します。
ALTER DATABASE RENAME GLOBAL_NAME TO updb.example.com;
宛先データベースで、ソース・データベースからレプリケートされるデータを変更するジョブを無効にします。DBA_JOBS
データ・ディクショナリ・ビューを問い合せて、ジョブを表示します。
宛先データベースをOracle Database 11g リリース2以上にアップグレードします。詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。
ソース・データベースが宛先データベースと通信できるように、ネットワークおよびOracle Netを構成します(まだ構成していない場合)。詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはupdb.example.com
です。
ソース・データベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK orcl.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'orcl.example.com';
データベース全体およびすべてのデータベース・オブジェクトのインスタンス化SCNを設定します。RMANのDUPLICATE
コマンドは、UNTIL
SCN
句で指定したSCN値より1少ないSCNまでデータベースを複製します。つまり、手順7でDUPLICATE
コマンドを実行したときに指定した終了SCN値から1を引きます。この場合、終了SCN値は439882
でした。つまり、インスタンス化SCNは、439882
-
1
で439881
となります。
BEGIN DBMS_APPLY_ADM.SET_GLOBAL_INSTANTIATION_SCN( source_database_name => 'orcl.example.com', instantiation_scn => 439881, recursive => TRUE); END; /
インスタンス化の後にOracle Streamsを設定する手順は、取得データベースとするデータベースによって異なります。次のいずれかの項の手順に従ってください。
取得データベースにソース・データベースを使用する場合、次の手順を実行して、インスタンス化の後にOracle Streamsを設定します。
SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはupdb.example.com
です。
SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
インスタンス化中にソース・データベースからクローニングされたOracle Streamsコンポーネントを削除します。
インスタンス化にエクスポート/インポートを使用した場合、ソース・データベースからクローニングされたANYDATA
キューを削除します。
インスタンス化にRMANを使用した場合、ソース・データベースからクローニングされたANYDATA
キューおよび取得プロセスを削除します。
ソース・データベースからクローニングされたキューを削除するには、DBMS_STREAMS_ADM
パッケージのREMOVE_QUEUE
プロシージャを実行します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.REMOVE_QUEUE( queue_name => 'strmadmin.capture_queue', cascade => FALSE, drop_unused_queue_table => TRUE); END; /
ソース・データベースからクローニングされた取得プロセスを削除するには、DBMS_CAPTURE_ADM
パッケージのDROP_CAPTURE
プロシージャを実行します。次に例を示します。
BEGIN DBMS_CAPTURE_ADM.DROP_CAPTURE( capture_name => 'capture_upgrade', drop_unused_rule_sets => TRUE); END; /
ANYDATA
キューを作成します。このキューは、ソース・データベースから伝播された変更をステージングします。次に例を示します。
BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'strmadmin.destination_queue_table', queue_name => 'strmadmin.destination_queue'); END; /
ソース・データベースにOracle Streams管理者として接続します。この例では、ソース・データベースはorcl.example.com
です。
宛先データベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK updb.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'updb.example.com';
ソース・キューからのすべての変更を、手順3で作成した宛先データベースに伝播する伝播を作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES( streams_name => 'to_updb', source_queue_name => 'strmadmin.capture_queue', destination_queue_name => 'strmadmin.destination_queue@updb.example.com', include_dml => TRUE, include_ddl => TRUE, include_tagged_lcr => TRUE, source_database => 'orcl.example.com'); END; /
宛先データベースにOracle Streams管理者として接続します。
手順3で作成したキューにすべての変更を適用する適用プロセスを作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.ADD_GLOBAL_RULES( streams_type => 'apply', streams_name => 'apply_upgrade', queue_name => 'strmadmin.destination_queue', include_dml => TRUE, include_ddl => TRUE, include_tagged_lcr => TRUE, source_database => 'orcl.example.com'); END; /
取得データベースに宛先データベースを使用する場合、次の手順を実行して、インスタンス化の後にOracle Streamsを設定します。
インスタンス化にRMANを使用した場合、次の手順を実行します。インスタンス化にエクスポート/インポートを使用した場合は、手順2に進みます。
SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはupdb.example.com
です。
SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
アップグレード・プロセス中にソース・データベースに対して行われた変更をステージングするANYDATA
キューを作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'strmadmin.destination_queue_table', queue_name => 'strmadmin.destination_queue'); END; /
ソース・データベースへのすべてのサポートされている変更を取得するダウンストリーム取得プロセスを構成し、手順bで作成したキューにこれらの変更をステージングします。
CREATE_CAPTURE
プロシージャのfirst_scn
パラメータが、「取得データベースに宛先データベースを使用する場合」の手順2bのデータ・ディクショナリの作成時に取得した値に設定されていることを確認します。この例では、first_scn
パラメータは1122610
に設定されています。
取得プロセスには、リアルタイム・ダウンストリーム取得プロセスまたはアーカイブ・ログ・ダウンストリーム取得プロセスを使用できます。詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。取得プロセスは起動しないでください。
「ユーザー定義型を含むデータベースのアップグレードの準備」で、メンテナンス操作中にユーザー定義型を含む表に対して行われる変更を保持する方法について説明しています。この方法を使用する場合、ユーザー定義型を含む表に対する変更が取得プロセスによって取得されないことを確認します。ルールを使用してOracle Streams構成からデータベース・オブジェクトを除外する方法については、ソース・データベースのOracle Streamsマニュアルを参照してください。
ダウンストリーム取得プロセスで使用されるキューにすべての変更を適用する適用プロセスを作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.ADD_GLOBAL_RULES( streams_type => 'apply', streams_name => 'apply_upgrade', queue_name => 'strmadmin.destination_queue', include_dml => TRUE, include_ddl => TRUE, include_tagged_lcr => TRUE, source_database => 'orcl.example.com'); END; /
ここでは、第3のデータベースのグローバル名がthrd.example.com
であると想定しています。取得データベースに第3のデータベースを使用する場合、次の手順を実行して、インスタンス化の後にOracle Streamsを設定します。
SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはupdb.example.com
です。
SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
ANYDATA
キューを作成します。このキューは、取得データベースから伝播された変更をステージングします。次に例を示します。
BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'strmadmin.destination_queue_table', queue_name => 'strmadmin.destination_queue'); END; /
取得データベースにOracle Streams管理者として接続します。この例では、取得データベースはthrd.example.com
です。
宛先データベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK updb.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'updb.example.com';
取得データベースのソース・キューからのすべての変更を、手順2で作成した宛先キューに伝播する伝播を作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES( streams_name => 'to_updb', source_queue_name => 'strmadmin.capture_queue', destination_queue_name => 'strmadmin.destination_queue@updb.example.com', include_dml => TRUE, include_ddl => TRUE, include_tagged_lcr => TRUE, source_database => 'orcl.example.com'); END; /
宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはupdb.example.com
です。
手順2で作成したキューにすべての変更を適用する適用プロセスを作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.ADD_GLOBAL_RULES( streams_type => 'apply', streams_name => 'apply_upgrade', queue_name => 'strmadmin.destination_queue', include_dml => TRUE, include_ddl => TRUE, include_tagged_lcr => TRUE, source_database => 'orcl.example.com'); END; /
「タスク5: アップグレードの完了およびOracle Streamsの削除」の手順を完了します。
次の手順を実行して、Oracle Streamsを使用したアップグレード操作を完了し、Oracle Streamsコンポーネントを削除します。
宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはupdb.example.com
です。
SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
適用プロセスを起動します。次に例を示します。
BEGIN DBMS_APPLY_ADM.START_APPLY( apply_name => 'apply_upgrade'); END; /
取得データベースにOracle Streams管理者として接続します。
取得プロセスを起動します。次に例を示します。
BEGIN DBMS_CAPTURE_ADM.START_CAPTURE( capture_name => 'capture_upgrade'); END; /
この手順は、宛先データベースのインスタンス化中に、ソース・データベースに対して行われた変更をレプリケートするプロセスを開始します。
SQL*Plusで、取得データベースにOracle Streams管理者として接続したままの状態で、適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用するまで、Oracle Streams環境を監視します。
適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用したかどうかを判断するには、次の手順を実行します。
取得プロセスのエンキュー・メッセージ番号、および適用プロセスのシステム変更番号(SCN)が最も古いメッセージ番号を問い合せ、これらがほとんど等しいかどうかを確認します。
たとえば、取得プロセスの名前がcapture_upgrade
、適用プロセスの名前がapply_upgrade
の場合は、取得データベースで次の問合せを実行します。
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@updb.example.com a WHERE c.CAPTURE_NAME = 'CAPTURE_UPGRADE' AND a.APPLY_NAME = 'APPLY_UPGRADE';
この問合せで戻される2つの値がほぼ同じ場合は、ソース・データベースからのほとんどの変更が宛先データベースに適用済で、次の手順に進むことができます。この時点では、ソース・データベースがまだ変更可能であるため、この問合せで同じ値が戻されることはありません。
この問合せで結果が返されない場合は、取得データベースのDBA_CAPTURE
ビューおよび宛先データベースのDBA_APPLY
ビューのSTATUS
列を問い合せて、環境のOracle Streamsクライアントが有効かどうかを確認します。伝播を使用する場合、「伝播ジョブのスケジュールに関する情報の表示」にある問合せを実行して、伝播の状態を確認できます。
Oracle Streamsクライアントが無効な場合は、再起動します。Oracle Streamsクライアントが再起動されない場合は、第30章「Oracle Streams環境内での問題の特定」を参照して、環境に対するトラブルシューティングを実行します。
宛先データベースでの適用サーバーの適用プロセスの状態を問い合せ、変更の適用が終了しているかどうかを確認します。
たとえば、適用プロセスの名前がapply_upgrade
である場合は、取得データベースで次の問合せを実行します。
COLUMN STATE HEADING 'Apply Server State' FORMAT A20 SELECT STATE FROM V$STREAMS_APPLY_SERVER@updb.example.com WHERE APPLY_NAME = 'APPLY_UPGRADE';
すべての適用サーバーの状態がIDLE
であれば、次の手順に進むことができます。
宛先データベースにOracle Streams管理者として接続します。この例では、宛先データベースはupdb.example.com
です。
次の問合せを実行して、適用エラーがないことを確認します。
SELECT COUNT(*) FROM DBA_APPLY_ERROR;
この問合せで0(ゼロ)が戻されたら、次の手順に進みます。この問合せでエラー・キューにエラーが表示される場合は、エラーを解決してから次の手順に進みます。詳細は、「適用エラーの管理」を参照してください。
ソース・データベースから、すべてのアプリケーションとユーザーの接続を切断します。
ソース・データベースに管理ユーザーとして接続します。この例では、ソース・データベースはorcl.example.com
です。
データベースへのアクセスを制限します。次に例を示します。
ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL*Plusで、取得データベースに管理ユーザーとして接続し、手順5aで実行した問合せを再度実行します。この問合せで戻される2つの値が同じ場合は、ソース・データベースからのすべての変更が宛先データベースに適用済で、次の手順に進むことができます。
SQL*Plusで、宛先データベースにOracle Streams管理者として接続し、手順7で実行した問合せを再度実行します。この問合せで0(ゼロ)が戻されたら、次の手順に進みます。この問合せでエラー・キューにエラーが表示される場合は、エラーを解決してから次の手順に進みます。詳細は、「適用エラーの管理」を参照してください。
アップグレード・プロセス中にソース・データベースでジョブ・キュー・プロセスを作成、変更または削除するアクションを実行した場合は、同じアクションを宛先データベースで実行します。詳細は、「ジョブ・キュー・プロセスおよびPL/SQLパッケージのサブプログラムに関する考慮事項」を参照してください。
ユーザー・データとディクショナリ・メタデータを同時に変更するアップグレード・プロセス中に、Oracleが提供するPL/SQLパッケージのサブプログラムをソース・データベースで起動した場合、同じサブプログラムを宛先データベースで起動します。詳細は、「ジョブ・キュー・プロセスおよびPL/SQLパッケージのサブプログラムに関する考慮事項」を参照してください。
ソース・データベースを停止します。このデータベースは再度オープンしないでください。
宛先データベースに管理ユーザーとして接続します。
データベースのグローバル名をソース・データベースと一致するように変更します。次に例を示します。
ALTER DATABASE RENAME GLOBAL_NAME TO orcl.example.com;
宛先データベースで、以前に無効にしたジョブを有効にします。
宛先データベースを、アプリケーションおよびユーザーからアクセスできるようにします。ソース・データベースに接続していたアプリケーションおよびユーザーを、宛先データベースにリダイレクトします。必要に応じて、ソース・データベースと通信していたシステムが宛先データベースと通信できるように、ネットワークおよびOracle Netを再構成します。詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
宛先データベースで、不要になったOracle Streamsコンポーネントを削除します。管理ユーザーとして宛先データベースに接続し、次のプロシージャを実行します。
注意: このプロシージャを実行する場合は注意してください。このプロシージャでは、ローカルのOracle Streams構成が削除されます。このプロシージャを実行する前に、宛先データベースのOracle Streams構成を削除できるかどうかを確認してください。 |
EXEC DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION();
宛先データベースでデータベース・サプリメンタル・ロギングが不要になった場合は、次の文を実行して、不要になったサプリメンタル・ロギングを削除します。
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE, FOREIGN KEY) COLUMNS;
宛先データベースでOracle Streams管理者が不要になった場合は、次の文を実行します。
DROP USER strmadmin CASCADE;
取得データベースに第3のデータベースを使用した場合、その第3のデータベースで、不要になったOracle Streamsコンポーネントを削除します。管理ユーザーとして第3のデータベースに接続し、次のプロシージャを実行します。
注意: このプロシージャを実行する場合は注意してください。このプロシージャでは、ローカルのOracle Streams構成が削除されます。このプロシージャを実行する前に、第3のデータベースのOracle Streams構成を削除できるかどうかを確認してください。 |
EXEC DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION();
第3のデータベースでデータベース・サプリメンタル・ロギングが不要になった場合は、次の文を実行して、不要になったサプリメンタル・ロギングを削除します。
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE, FOREIGN KEY) COLUMNS;
宛先データベースでOracle Streams管理者が不要になった場合は、次の文を実行します。
DROP USER strmadmin CASCADE;
これで、データベースのアップグレードは完了です。