この付録では、Oracle Streamsを使用してOracle Databaseをアップグレードする方法について説明します。この付録で説明するデータベースのアップグレード操作では、わずかな停止時間でデータベースをアップグレードするために、Oracle Streamsの機能を使用します。データベースのアップグレードにOracle Streamsを使用するには、データベースがOracle9i データベース リリース2(9.2)以上である必要があります。
次の項では、Oracle Streamsを使用したオンラインでのデータベースのアップグレードについて説明します。
関連項目: Oracle Streamsを使用してデータベースのその他のメンテナンス操作を実行する方法については、付録E「Oracle Streamsを使用したオンラインでのデータベースのメンテナンス」を参照 |
Oracle Databaseのアップグレードは、既存の以前のリリースのOracle Databaseを今回のリリースのOracle Databaseに変換するプロセスです。通常、データベースをアップグレードするには、データベースを長時間停止する必要がありますが、Oracle Streamsの機能を使用することで、わずかな停止時間でデータベースをアップグレードできます。そのためには、Oracle Streamsを使用して、次のデータベースを含む単一のソース・レプリケーション環境を構成します。
ソース・データベース: アップグレード対象の元のデータベース。
取得データベース: アップグレード中にソース・データベースに対して行われた変更が取得プロセスによって取得されるデータベース。
宛先データベース: アップグレード・プロセス中にソース・データベースに対して行われた変更が適用プロセスによって適用されるソース・データベースのコピー。
次の一般的な手順で、データベースがオンラインの状態でデータベースをアップグレードできます。
空の宛先データベースを作成します。
Oracle Streamsの単一ソース・レプリケーション環境を構成します。その環境では、元のデータベースがソース・データベースで、データベースのコピーがソースで行われた変更の宛先データベースです。
宛先データベースに対してデータベースのアップグレードを実行します。このとき、元のソース・データベースはオンラインで使用可能です。
Oracle Streamsを使用して、ソース・データベースで行われた変更を宛先データベースに適用します。
ソース・データベースで行われた変更を宛先データベースに適用した後、ソース・データベースをオフラインにして、アプリケーションおよびユーザーが宛先データベースを使用できるようにします。
図D-1に、このプロセスの概要を示します。
アップグレード・プロセス中に取得プロセスが作成されるデータベースが、取得データベースです。Oracle Database 10g リリース1(10.1)で、ダウンストリーム取得が導入されました。そのため、データベースをOracle Database 10g リリース1(10.1)以上からOracle Database 11g リリース1(11.1)にアップグレードする場合、次のいずれかの方法を選択できます。
アップグレード・プロセス中に、ソース・データベースでローカル取得プロセスを作成する。
宛先データベースで、ダウンストリーム取得プロセスを作成する。宛先データベースが取得データベースである場合、取得データベースから宛先データベースへの伝播は不要です。
第3のデータベースを取得データベースにする。この場合、第3のデータベースには、Oracle Database 10g リリース1(10.1)、Oracle Database 10g リリース2(10.2)またはOracle Database 11g リリース1を使用できます。
ただし、データベースをOracle9i Databaseリリース2(9.2)からOracle Database 11g リリース1にアップグレードする場合、ダウンストリーム取得がサポートされていないため、ローカル取得プロセスをソース・データベースで作成する必要があります。
ダウンストリーム取得プロセスを使用すると、アップグレード・プロセス中にソース・データベースに必要なリソースが削減されますが、ローカル取得プロセスの方が構成が簡単です。表D-1に、アップグレード・プロセス中に取得データベースにできるデータベースを示します。
表D-1 サポートされているアップグレード中の取得データベース
既存のデータベースのリリース | 取得データベースにソース・データベースを使用可能かどうか | 取得データベースに宛先データベースを使用可能かどうか | 取得データベースに第3のデータベースを使用可能かどうか |
---|---|---|---|
9.2 |
はい |
いいえ |
いいえ |
10.1または10.2 |
はい |
はい |
はい |
注意: Oracle Database 10g からアップグレードする場合、アップグレードを開始する前に、取得データベースとするデータベースを決定してください。 |
この付録で説明する手順は、アップグレード対象のデータベースが次のすべての条件を満たしていることを前提としています。
データベースは、既存の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つの方法は、データベースのアップグレード中に、ユーザー定義型を含む表を読取り専用にすることです。この場合、その表は宛先データベースでインスタンス化され、アップグレード中にその表に対する変更は行われません。アップグレードの完了後に、宛先データベースでユーザー定義型を含む表を読取り/書込み可能にします。
アップグレード中にユーザー定義型を含む表をオープン状態のままにしておく必要がある場合は、次の一般的な手順を実行して、アップグレード中にその表に対して行われる変更を保持できます。
「Oracle Streamsを使用したデータベースのアップグレードの実行」で説明するアップグレード・プロセスを開始する前に、ユーザー定義型を含むソース・データベースの表に対する行変更を格納する1つ以上のロギング表を作成します。ロギング表の各列では、ソース・データベースのリリースのOracle Streamsでサポートされているデータ型を使用する必要があります。
「Oracle Streamsを使用したデータベースのアップグレードの実行」で説明するアップグレード・プロセスを開始する前に、ユーザー定義のデータ型を含む表で起動されるDMLトリガーをソース・データベースで作成します。このトリガーによって、各行変更が等価なリレーショナルに変換され、手順1で作成したロギング表に変更された行が記録されます。
「Oracle Streamsを使用したデータベースのアップグレードの実行」の手順で取得プロセスおよび伝播を構成するときに、ロギング表に対する変更を取得して宛先データベースに伝播するように、取得プロセスおよび伝播を構成します。ユーザー定義型を含む表に対する変更は、取得または伝播されないようにする必要があります。
「Oracle Streamsを使用したデータベースのアップグレードの実行」の手順で宛先データベースの適用プロセスを構成するときに、ロギング表に対する変更を処理するDMLハンドラを使用するように適用プロセスを構成します。DMLハンドラによって等価なリレーショナルからユーザー定義型が再構成され、ユーザー定義型を含む表に対する変更が適用されます。
関連項目:
|
データベースのアップグレードを開始する前に、操作中に宛先データベースをインスタンス化するために、エクスポート/インポート・ユーティリティ(データ・ポンプまたはオリジナル)を使用するか、Recovery Managerユーティリティを使用するかを決定します。アップグレード対象の既存のデータベースは、宛先データベースに置き換えられます。
宛先データベースのインスタンス化にどちらのユーティリティを使用するかを決定するには、次の事項を考慮します。
オリジナルのエクスポート/インポートまたはデータ・ポンプ・エクスポート/インポートを使用すると、操作の最初で、宛先データベースをOracle Database 11g リリース1(11.1)データベースにできます。つまり、インスタンス化の後、宛先データベースをアップグレードする必要はありません。
インスタンス化にエクスポート/インポートを使用する場合、データ・ポンプがサポートされているときは、データ・ポンプを使用することをお薦めします。データ・ポンプを使用すると、オリジナルのエクスポート/インポートを使用するより高速でインスタンス化を実行できます。
Recovery ManagerのDUPLICATE
コマンドを使用すると、特に、データベースが大規模な場合は、エクスポート/インポートよりインスタンス化の処理が速くなります。ただし、データベースのリリースは、Recovery Managerのインスタンス化の場合と同じである必要があります。つまり、データベースがOracle9i Databaseリリース2(9.2)である場合、インスタンス化を実行する際の宛先データベースはOracle9i Databaseリリース2(9.2)です。データベースがOracle Database 10g リリース1(10.1)データベースである場合、インスタンス化を実行する際の宛先データベースはOracle Database 10g リリース1(10.1)データベースです。データベースがOracle Database 10g リリース2(10.2)データベースである場合、インスタンス化を実行する際の宛先データベースはOracle Database 10g リリース2(10.2)データベースです。インスタンス化の後、宛先データベースをアップグレードする必要があります。
また、分散トランザクションが可能な環境でインスタンス化を行う場合は、Recovery Managerを使用しないことをお薦めします。そのような環境でRecovery Managerを使用すると、手動での修正が必要なインダウント・トランザクションが実行される場合があります。
表D-2に、各インスタンス化方法でサポートされているアップグレード対象のデータベースのリリースを示します。また、ソース・データベースと宛先データベースのプラットフォームまたはキャラクタ・セットが異なる場合に、各インスタンス化方法がサポートされるかどうかを示します。ソース・データベースと宛先データベースのプラットフォームおよびキャラクタ・セットが同じ場合は、すべてのインスタンス化方法がサポートされます。
この項では、Oracle Streamsを使用してデータベースをアップグレードする手順について説明します。データベースのアップグレードにOracle Streamsを使用するには、データベースがOracle9i Databaseリリース2(9.2)以上である必要があります。
Oracle Streamsを使用してデータベースをアップグレードするには、次のタスクを実行します。
次の手順を実行して、Oracle Streamsを使用したアップグレードを開始します。
空のデータベースを作成します。宛先データベースのグローバル名がソース・データベースとは異なることを確認してください。ここでは、ソース・データベースのグローバル名がorcl.example.com
、アップグレードで使用する宛先データベースのグローバル名がupdb.example.com
であると想定しています。宛先データベースのグローバル名は、アップグレード・プロセスの最後で、宛先データベースがソース・データベースと置き換わるときに変更されます。
作成する空のデータベースのリリースは、「インスタンス化で使用するユーティリティの決定」で使用することを決定したインスタンス化方法によって異なります。
インスタンス化にエクスポート/インポートを使用することを決定した場合、空のOracle Database 11g リリース1データベースを作成します。このデータベースは、アップグレード・プロセス中の宛先データベースとなります。
Oracle Databaseをインストールする必要がある場合は、ご使用のオペレーティング・システムのOracle Databaseインストレーション・ガイドを参照してください。また、データベースを作成する方法については、Oracle Database管理者ガイドを参照してください。
インスタンス化にRecovery Managerを使用することを決定した場合、アップグレード対象のデータベースと同じリリースの空のOracle Databaseを作成します。
具体的には、Oracle9i リリース2(9.2)データベースをアップグレードする場合、Oracle9i リリース2(9.2)データベースを作成します。また、Oracle Database 10g データベースをアップグレードする場合は、Oracle Database 10g データベースを作成します。
このデータベースは、アップグレード・プロセス中の宛先データベースとなります。アップグレード・プロセスを開始する場合、アップグレード対象のソース・データベースと宛先データベースの両方が同じリリースのOracleである必要があります。
Oracleをインストールする必要がある場合は、ご使用のオペレーティング・システムのOracleインストレーション・ガイドを参照してください。また、データベースを作成する方法については、対象のリリースのOracle Database管理者ガイドを参照してください。
ソース・データベースがARCHIVELOG
モードで実行されていることを確認します。ARCHIVELOG
モードでデータベースを実行する方法については、そのソース・データベースのリリースのOracle Database管理者ガイドを参照してください。
各データベースで、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 Oracle Streamsを参照してください。
Oracle Database 10g データベースをアップグレードする場合、DBA_STREAMS_UNSUPPORTED
データ・ディクショナリ・ビューを問い合せて、Oracle Streamsでサポートされていないデータベース・オブジェクトを表示します。表示された各データベース・オブジェクトを読取り専用にします。
「ユーザー定義型を含むデータベースのアップグレードの準備」で、アップグレード中にユーザー定義型を含む表に対して行われる変更を保持する方法を説明しています。この方法を使用すると、アップグレード中に、ユーザー定義型を含む表をオープン状態のままにできます。
ソース・データベースで、Oracle Streams管理者を構成します。
Oracle9i リリース2(9.2)データベースをアップグレードする場合、手順については、Oracle9i Oracle Streamsを参照してください。
Oracle Database 10g データベースをアップグレードする場合、手順については、そのリリースの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; /
ソース・データベースにOracle Streams管理者として接続した状態で、ソース・データベースへのすべてのサポートされている変更を取得する取得プロセスを構成し、手順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 データベースである必要があります。取得データベースに宛先データベースを使用する場合、次の手順を実行して、インスタンス化の前に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; /
宛先データベースにOracle Streams管理者として接続した状態で、ソース・データベースへのすべてのサポートされている変更を取得するダウンストリーム取得プロセスを構成し、手順bで作成したキューにこれらの変更をステージングします。取得プロセスでソース・データベースへのデータベース・リンクが使用されることを確認します。取得プロセスには、リアルタイム・ダウンストリーム取得プロセスまたはアーカイブ・ログ・ダウンストリーム取得プロセスを使用できます。「取得プロセスの構成」を参照してください。取得プロセスは起動しないでください。
「ユーザー定義型を含むデータベースのアップグレードの準備」で、メンテナンス操作中にユーザー定義型を含む表に対して行われる変更を保持する方法を説明しています。この方法を使用する場合、ユーザー定義型を含む表に対する変更が取得プロセスによって取得されないことを確認します。ルールを使用してOracle Streams構成からデータベース・オブジェクトを除外する方法については、ソース・データベースのOracle Streamsマニュアルを参照してください。
Recovery Manager
インスタンス化にRecovery Managerを使用する場合、次の手順を実行します。
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値を書き留めます。この値は、宛先データベースで取得プロセスを作成するときに使用します。
ソース・データベースにOracle Streams管理者として接続した状態で、ソース・データベースをインスタンス化のために準備します。
exec DBMS_CAPTURE_ADM.PREPARE_GLOBAL_INSTANTIATION();
「タスク3: データベースのインスタンス化」に進みます。
この方法を使用するには、次の要件を満たす必要があります。
アップグレード対象のデータベースがOracle Database 10g データベースである。
第3のデータベースがOracle Database 10g 以上のデータベースである。
ここでは、第3のデータベースのグローバル名がthrd.example.com
であると想定しています。取得データベースに第3のデータベースを使用する場合、次の手順を実行して、インスタンス化の前にOracle Streamsを設定します。
ソース・データベース、宛先データベースおよび第3のデータベースが相互に通信できるように、ネットワークおよびOracle Netを構成します。手順については、Oracle Database Net Services管理者ガイドを参照してください。
SQL*Plusで、第3のデータベースthrd.example.com
に管理ユーザーとして接続し、Oracle Streams管理者を作成します。
第3のデータベースがOracle Database 10g データベースである場合、手順については、そのリリースのOracle Streams概要および管理を参照してください。
第3のデータベースがOracle Database 11g リリース1データベースである場合、手順については、「Oracle Streams管理者の構成」を参照してください。
これらの手順では、第3のデータベースのOracle Streams管理者の名前がstrmadmin
であると想定しています。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
第3のデータベースにOracle Streams管理者として接続したままの状態で、アップグレード・プロセス中にソース・データベースに対して行われた変更をステージングするANYDATA
キューを作成します。次に例を示します。
BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'strmadmin.capture_queue_table', queue_name => 'strmadmin.capture_queue'); END; /
ソース・データベースへのすべてのサポートされている変更を取得するダウンストリーム取得プロセスを構成し、手順3で作成したキューにこれらの変更をステージングします。取得プロセスでソース・データベースへのデータベース・リンクが使用されることを確認します。取得プロセスは起動しないでください。
手順については、次のドキュメントを参照してください。
取得データベースがOracle Database 10g データベースである場合、手順については、そのリリースのOracle Streams概要および管理を参照してください。
取得データベースがOracle Database 11g リリース1データベースである場合、手順については、「取得プロセスの構成」を参照してください。取得プロセスには、リアルタイム・ダウンストリーム取得プロセスまたはアーカイブ・ログ・ダウンストリーム取得プロセスを使用できます。
「ユーザー定義型を含むデータベースのアップグレードの準備」で、メンテナンス操作中にユーザー定義型を含む表に対して行われる変更を保持する方法を説明しています。この方法を使用する場合、ユーザー定義型を含む表に対する変更が取得プロセスによって取得されないことを確認します。ルールを使用してOracle Streams構成からデータベース・オブジェクトを除外する方法については、ソース・データベースのOracle Streamsマニュアルを参照してください。
「タスク3: データベースのインスタンス化」に進みます。
「インスタンス化で使用するユーティリティの決定」で、データベース全体をインスタンス化するための様々な方法について説明しています。使用するインスタンス化方法に基づいて、次のいずれかの項の手順を実行します。
次の手順を実行して、エクスポート/インポートを使用して宛先データベースをインスタンス化します。
エクスポート/インポートを使用して、宛先データベースをインスタンス化します。インスタンス化を実行する方法の詳細は、Oracle Streamsレプリケーション管理者ガイドを参照してください。エクスポート/インポート・ユーティリティを使用してエクスポート/インポートを実行する方法の詳細は、Oracle Databaseユーティリティを参照してください。
Oracle Data Pumpまたはオリジナルのエクスポート/インポートを使用して宛先データベースをインスタンス化する場合、次のとおりパラメータが適切な値に設定されていることを確認します。
STREAMS_CONFIGURATION
インポート・パラメータをn
に設定します。
オリジナルのエクスポート/インポートを使用する場合は、CONSISTENT
エクスポート・パラメータをy
に設定します。このパラメータは、データ・ポンプでのエクスポートには適用されません。
オリジナルのエクスポート/インポートを使用する場合は、STREAMS_INSTANTIATION
インポート・パラメータをy
に設定します。このパラメータは、データ・ポンプでのインポートには適用されません。
Oracle9i Databaseリリース2(9.2)をアップグレードする場合、オリジナルのエクスポート/インポートを使用する必要があります。
宛先データベースで、ソース・データベースからレプリケートされるデータを変更するインポート済のジョブを無効にします。DBA_JOBS
データ・ディクショナリ・ビューを問い合せて、ジョブを表示します。
次の手順を実行して、Recovery ManagerのDUPLICATE
コマンドを使用して宛先データベースをインスタンス化します。
注意: ここで示すのは、Recovery Managerを使用してデータベースを複製する手順の概略です。Oracle9i リリース2(9.2)データベースをアップグレードする場合、そのリリースのRecovery Managerを使用する方法の詳細は、Oracle9i Recovery Managerユーザーズ・ガイドを参照してください。Oracle Database 10g データベースをアップグレードする場合、そのリリースのOracle Databaseバックアップおよびリカバリ・アドバンスト・ユーザーズ・ガイドを参照してください。 |
バックアップがまだの場合は、ソース・データベースのバックアップを作成します。Recovery Managerでは、複製に有効なバックアップが必要です。ここでは、バックアップがまだの場合は、orcl.example.com
のバックアップを作成します。
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値を439882
としています。手順7でRecovery Managerを使用してデータベースを複製するときに、UNTIL
SCN
オプションをこの値に設定します。
SQL*Plusでソース・データベースに管理ユーザーとして接続した状態で、現行のオンラインREDOログをアーカイブします。次に例を示します。
ALTER SYSTEM ARCHIVE LOG CURRENT;
データベースの複製用に環境を準備します。宛先データベースを複製の補助インスタンスとして準備します。手順については、アップグレード対象のリリースのマニュアルを参照してください。具体的には、Oracle9i Recovery Managerユーザーズ・ガイドまたはOracle Databaseバックアップおよびリカバリ・アドバンスト・ユーザーズ・ガイド(10g用)のRecovery Managerを使用したデータベースの複製に関する章を参照してください。
Recovery Mamangerクライアントを起動して、TARGET
としてデータベースorcl.example.com
に、AUXILIARY
としてデータベースupdb.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
を使用します。ここでは、複製データベースをupdb.example.com
とします。つまり、この例のDUPLICATE
コマンドには、TO
updb.example.com
が含まれます。
次に、Recovery Managerの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で、宛先データベースに管理ユーザーとして接続したままの状態で、データベースのグローバル名を変更します。Recovery ManagerのDUPLICATE
コマンドを実行すると、宛先データベースとソース・データベースのグローバル名が同じになりますが、宛先データベースの名前は、アップグレードが完了するまで元の名前である必要があります。次に例を示します。
ALTER DATABASE RENAME GLOBAL_NAME TO updb.example.com;
宛先データベースで、ソース・データベースからレプリケートされるデータを変更するジョブを無効にします。DBA_JOBS
データ・ディクショナリ・ビューを問い合せて、ジョブを表示します。
宛先データベースをOracle Database 11g リリース1にアップグレードします。手順については、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';
SQL*Plusで、宛先データベースにOracle Streams管理者として接続したままの状態で、データベース全体およびすべてのデータベース・オブジェクトのインスタンス化SCNを設定します。Recovery Managerの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
キューを削除します。
インスタンス化にRecovery Managerを使用した場合、ソース・データベースからクローニングされた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を設定します。
インスタンス化にRecovery Managerを使用した場合、次の手順を実行します。インスタンス化にエクスポート/インポートを使用した場合は、手順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; /
宛先データベースにOracle Streams管理者として接続したままの状態で、ソース・データベースへのすべてのサポートされている変更を取得するダウンストリーム取得プロセスを構成し、手順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';
SQL*Plusで、取得データベースにOracle Streams管理者として接続し、取得データベースのソース・キューからのすべての変更を、手順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管理者として接続します。この例では、取得データベースはthrd.example.com
です。
取得プロセスを起動します。次に例を示します。
BEGIN DBMS_CAPTURE_ADM.START_CAPTURE( capture_name => 'capture_upgrade'); END; /
この手順は、宛先データベースのインスタンス化中に、ソース・データベースに対して行われた変更をレプリケートするプロセスを開始します。
SQL*Plusで、取得データベースにOracle Streams管理者として接続したままの状態で、適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用するまで、Oracle Streams環境を監視します。
適用プロセスが、ソース・データベースからのほとんどの変更を宛先データベースに適用したかどうかを判断するには、次の手順を実行します。
取得プロセスのエンキュー・メッセージ番号および適用プロセスの最高水位標メッセージ番号を問い合せ、これらがほとんど等しいかどうかを確認します。
たとえば、取得プロセスの名前がcapture_upgrade
、適用プロセスの名前がapply_upgrade
の場合は、ソース・データベースで次の問合せを実行します。
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@updb.example.com a WHERE CAPTURE_NAME = 'CAPTURE_UPGRADE' AND APPLY_NAME = 'APPLY_UPGRADE';
この問合せで戻される2つのSCN値がほぼ同じ場合は、ソース・データベースからのほとんどの変更が宛先データベースに適用済で、次の手順に進むことができます。この時点では、ソース・データベースがまだ変更可能であるため、この問合せで同じ値が戻されることはありません。
この問合せで結果が戻されない場合は、取得データベースのDBA_CAPTURE
ビューおよび宛先データベースのDBA_APPLY
ビューのSTATUS
列を問い合せて、環境のOracle Streamsクライアントが有効かどうかを確認します。伝播を使用する場合、「伝播ジョブのスケジュールの表示」にある問合せを実行して、伝播の状態を確認できます。
Oracle Streamsクライアントが無効な場合は、再起動します。Oracle Streamsクライアントが再起動されない場合は、第20章「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で、取得データベースに管理ユーザーとして接続し、手順5で実行した問合せを再度実行します。この問合せで戻される2つのSCN値が同じ場合は、ソース・データベースからのすべての変更が宛先データベースに適用済で、次の手順に進むことができます。
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;
これで、データベースのアップグレードは完了です。