ヘッダーをスキップ
Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド
11g リリース2(11.2)
B56269-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

27 プラットフォーム間でのデータ転送

RMANを使用すると、異なるエンディアン形式のプラットフォーム間で表領域を転送できます。また、2つのプラットフォームのエンディアン形式が同じであるかぎり、RMANを使用してデータベース全体を別のプラットフォームにトランスポートすることもできます。

この章の内容は次のとおりです。

クロス・プラットフォーム・データ・トランスポートの概要

この項では、プラットフォーム間で表領域およびデータベースをトランスポートする場合の基本的な概念およびタスクについて説明します。

クロス・プラットフォーム・データ・トランスポートの目的

あるプラットフォームで実行されているデータベースの表領域を別のプラットフォームで実行されているデータベースにトランスポートできます。クロス・プラットフォーム・トランスポータブル表領域の通常の使用方法を次に示します。

  • 表領域を変換することでプラットフォームに関係なく既存のデータベースに表領域を統合できるカスタマへ、構造化データをトランスポータブル表領域として公開する。

  • 大規模なデータ・ウェアハウス・サーバーから小規模なコンピュータ(Linuxベースのワークステーションやサーバーなど)上のデータ・マートへデータを移動する。

  • すべてのホストのエンディアン形式が同一である異機種間クラスタ間で、読取り専用表領域を共有する。

トランスポータブル表領域、その使用方法、およびトランスポータブル表領域を作成および使用する場合の様々な方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

また、RMANを使用して、プラットフォーム間でデータベース全体をトランスポートすることもできます。たとえば、ビジネス要件によって、別のプラットフォームを使用する、より低コストなサーバー上でデータベースを実行する必要があるとします。この場合、データベースを再作成し、インポート・ユーティリティまたはトランスポータブル表領域を使用してデータを再移入するのではなく、RMANを使用してデータベース全体をトランスポートできます。

宛先ホストまたはソース・ホスト上のデータベースを変換できます。宛先ホストで変換を行う理由は次のとおりです。

  • 変換プロセスによるソース・ホストのパフォーマンスのオーバーヘッドを回避する場合。

  • 1つのソース・システムから複数の異なるプラットフォーム上の複数の受信者にデータベースを分散する場合。

  • 新しいプラットフォームへの移行パスを評価する場合

クロス・プラットフォーム・データ転送の基本的な概念

ソース・プラットフォーム宛先プラットフォームが異なり、そのエンディアン形式も異なる場合は、トランスポータブル表領域の操作でRMANのCONVERTコマンドを使用する必要があります。同じエンディアン形式のプラットフォーム間でデータベースの一部を変換する場合、オペレーティング・システムの方法を使用してソースから宛先にファイルをコピーできます。同じエンディアン形式のデータベース全体を変換する場合、UNDO情報のあるすべてのデータファイルを変換する必要があります。ソースから宛先プラットフォームに直接データファイルをコピーすることはできません。

表領域およびデータファイルの変換

ソース・ホストではRMANのCONVERT TABLESPACEコマンドを使用して表領域の変換を実行できますが、宛先ホストでは実行できません。CONVERT TABLESPACEコマンドでは、データファイルのインプレース変換は実行されません。かわりに、このコマンドでは、宛先プラットフォームで使用するために適切な形式の出力ファイルが生成されます。ソース・データベース内のデータファイルの内容は変更されません。

宛先ホストではCONVERT DATAFILEコマンドを使用してファイルを変換できますが、ソース・ホストでは変換できません。データ・ポンプ・エクスポート・ユーティリティでは、エクスポート・ダンプ・ファイルが生成されます。このファイルは、宛先ホストに手動でコピーされたデータファイルとともに、宛先データベースにインポートできます。データファイルが宛先データベースにトランスポートされるまで、それらのデータファイルはデータベース内の表領域名に関連付けられません。この場合、RMANは、表領域名を一連のデータファイルに変換できません。このため、CONVERT DATAFILEを使用して、ファイル名でデータファイルを指定する必要があります。


注意:

CONVERT TABLESPACEまたはCONVERT DATAFILEの使用は、クロス・プラットフォーム・トランスポータブル表領域を使用する場合の1つの手順にすぎません。この章の手順を実行する前に、『Oracle Database管理者ガイド』のトランスポータブル表領域に関する項を参照してください。

データベースの変換

データベース全体を異なるプラットフォームに変換するには、両方のプラットフォームで同じエンディアン形式が使用されている必要があります。RMANのCONVERT DATABASEコマンドを使用すると、ソース・プラットフォームから宛先プラットフォームへのデータベース全体の移動を自動化できます。トランスポートされたデータベースには、ソース・データベースと同じデータおよび(いくつかの例外を除いて)ソース・データベースと同じ設定が含まれています。

宛先プラットフォームに自動的にトランスポートされるファイルを次に示します。

  • 永続表領域に属するデータファイル

    プラットフォーム間での表領域のトランスポートとは異なり、データベース全体をトランスポートする場合は、宛先プラットフォームとの互換性が維持されるように、特定の形式のブロック(UNDOセグメント内のブロックなど)を再フォーマットする必要があります。ソース・プラットフォームと宛先プラットフォームのエンディアン形式が同じである場合でも、トランスポータブル・データベースのデータファイルは変換する必要があります。表領域をトランスポートする場合のように、あるプラットフォームから別のプラットフォームにデータファイルを単純にコピーすることはできません。

  • 初期化パラメータ・ファイルまたはサーバー・パラメータ・ファイル

    データベースでテキストベースの初期化パラメータ・ファイルが使用されている場合、RMANはそのファイルをトランスポートします。データベースでサーバー・パラメータ・ファイルが使用されている場合、RMANは、そのサーバー・パラメータ・ファイルに基づいて初期化パラメータ・ファイルを生成し、トランスポートします。次に、初期化パラメータ・ファイルの設定に基づいて、宛先で新しいサーバー・パラメータ・ファイルを作成します。

    通常、初期化パラメータ・ファイルの一部のパラメータを新しいデータベース用に手動で更新する必要があります。たとえば、DB_NAME、および宛先ホスト上のファイルの場所を示すCONTROL_FILESなどのパラメータを変更する場合があります。

ソース・プラットフォームまたは宛先プラットフォームのいずれかのデータファイルの形式を変換できます。CONVERT DATABASE ON DESTINATION PLATFORMコマンドでは、データファイルの形式は変換されません。かわりに、変換を実行するために手動で実行できるスクリプトが生成されます。CONVERT SCRIPTパラメータを指定すると、変換スクリプトが作成されます。このスクリプトを宛先ホストで手動で実行すると、データファイルのコピーをバッチ・モードで変換できます。TRANSPORT SCRIPTパラメータを指定すると、トランスポート・スクリプトが生成されます。このスクリプトには、宛先プラットフォーム上に新しいデータベースを作成するSQL文が含まれています。

ソース・ホストでのクロス・プラットフォーム表領域変換の実行

CONVERTコマンドの前提条件のリストについては、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。この項の手順を実行する前に、この前提条件をすべて満たしている必要があります。

わかりやすくするため、Sun Solarisホスト上で実行されているソース・データベースprod_sourceから、表領域financeおよびhrをトランスポートする必要があると想定します。Linux PC上で実行されている宛先データベースprod_destに、これらの表領域をトランスポートすることを計画します。ソース・ホスト上の一時ディレクトリ/tmp/transport_linux/に、変換済データファイルを格納することを計画しています。

ソース・ホストでクロス・プラットフォーム表領域変換を実行する手順

  1. SQL*Plusを起動し、管理者権限でソース・データベースprod_sourceに接続します。

  2. V$TRANSPORTABLE_PLATFORMビューで宛先プラットフォームの名前を問い合せます。

    データベースには、クロス・プラットフォーム・データ・トランスポートをサポートする各プラットフォームの固有な内部名のリストが存在します。CONVERTコマンドのパラメータとして、ソース・プラットフォームまたは宛先プラットフォームの正確な名前が必要な場合があります。V$TRANSPORTABLE_PLATFORMを問い合せて、プラットフォームの名前を取得します。次の例では、Linuxプラットフォームの名前を問い合せます。

    SELECT PLATFORM_ID, PLATFORM_NAME, ENDIAN_FORMAT
    FROM   V$TRANSPORTABLE_PLATFORM 
    WHERE  UPPER(PLATFORM_NAME) LIKE '%LINUX%';
    

    PC上のLinuxのPLATFORM_NAMEは、Linux IA (32-bit)です。

  3. トランスポートする表領域を読取り専用モードに設定します。たとえば、次のように入力します。

    ALTER TABLESPACE finance READ ONLY;
    ALTER TABLESPACE hr READ ONLY;
    
  4. 出力ファイルの名前を指定する方法を選択します。

    CONVERTコマンドにFORMATまたはDB_FILE_NAME_CONVERT引数を指定して、出力ファイルの名前を制御する必要があります。次に、優先順位の高い順に規則を示します。

    1. CONVERT ... DB_FILE_NAME_CONVERT句のパターンに一致するファイルは、そのパターンに基づいて名前が指定されます。

    2. FORMAT句を指定すると、CONVERT ... DB_FILE_NAME_CONVERT句のパターンに基づいて名前が指定されていないすべてのファイルに対して、FORMAT句に基づいて名前が指定されます。


    注意:

    ソース・ファイルおよび宛先ファイルがOracle Managed Files名を持つ場合、CONVERT ... DB_FILE_NAME_CONVERTを使用して、CONVERTコマンドの出力ファイル名を生成することはできません。

  5. RMANを起動し、TARGETとして(宛先データベースではなく)ソース・データベースに接続します。たとえば、次のように入力します。

    % rman
    RMAN> CONNECT TARGET SYS@prod_source
    
  6. CONVERT TABLESPACEコマンドを実行して、データファイルを宛先ホストのエンディアン形式に変換します。

    次の例でFORMAT引数は、変換されたデータファイルの名前および場所を制御しています。

    RMAN> CONVERT TABLESPACE finance,hr
    2>   TO PLATFORM 'Linux IA (32-bit)'
    3>   FORMAT '/tmp/transport_linux/%U';
    

    結果として、/tmp/transport_linux/ディレクトリに、Linux IA(32ビット)プラットフォームに適切なエンディアン形式のデータを含む一連の変換済データファイルが格納されます。


    関連項目:

    CONVERTコマンドの完全なセマンティクスについては、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

  7. 表領域をトランスポートする場合の一般的な手順の残りの手順を実行します。

    1. Oracle Data Pump Exportユーティリティを使用して、ソース・ホスト上にエクスポート・ダンプ・ファイルを作成します。

    2. 変換済データファイルおよびエクスポート・ダンプ・ファイルをソース・ホストから宛先ホストの目的のディレクトリに移動します。

    3. インポート・ユーティリティを使用して、表領域を新しいデータベースに組み込みます。

    4. 必要に応じて、トランスポートされた表領域を読取り/書込みモードに設定します。

転送先ホストでのクロス・プラットフォーム・データファイル変換の実行

CONVERTコマンドの前提条件のリストについては、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。この項の手順を実行する前に、この前提条件を満たしている必要があります。

転送先ホストでのクロス・プラットフォーム・データファイル変換

データファイルの変換では、出力ファイルの名前を指定する方法を選択する必要があります。CONVERTコマンドにFORMAT引数またはDB_FILE_NAME_CONVERT引数を指定して、出力ファイルの名前を指定する方法を制御する必要があります。次に、優先順位の高い順に規則を示します。

  1. CONVERT ... DB_FILE_NAME_CONVERT句のパターンに一致するファイルは、そのパターンに基づいて名前が指定されます。

  2. FORMAT句を指定すると、CONVERT ... DB_FILE_NAME_CONVERT句のパターンに基づいて名前が指定されていないすべてのファイルに対して、FORMAT句に基づいて名前が指定されます。


注意:

ソース・ファイルおよび宛先ファイルの両方がOracle Managed Filesである場合、CONVERT ... DB_FILE_NAME_CONVERTを使用して、CONVERTコマンドの出力ファイル名を生成することはできません。

ソース・プラットフォームおよび宛先プラットフォームが異なる場合は、FROM PLATFORMパラメータを指定する必要があります。V$TRANSPORTABLE_PLATFORMを問い合せて、プラットフォームの名前を確認します。エラーを回避するには、FROM PLATFORMの値が、変換するデータファイルの形式と一致している必要があります。FROM PLATFORMを指定しない場合、このパラメータはデフォルトで宛先プラットフォームの値になります。

CONVERT DATAFILEを使用したデータファイル形式の変換

この項では、CONVERT DATAFILEコマンドの使用方法について説明します。この項では、表領域finance(データファイルfin/fin01.dbfおよびfin/fin02.dbf)およびhr(データファイルhr/hr01.dbfおよびhr/hr02.dbf)を、prod_sourceというソース・データベースからトランスポートすると想定しています。このデータベースは、Sun Solarisホスト上で実行されています。Linux PC上で実行されているprod_destという宛先データベースに、これらの表領域をトランスポートすることを計画します。宛先ホスト上で変換を実行することを計画しています。

データファイルが宛先データベースに組み込まれる場合は、これらのデータファイルが/orahome/dbsに格納され、現行のディレクトリ構造が保持されるように計画します。つまり、hr表領域のデータファイルは/orahome/dbs/hrサブディレクトリに、finance表領域のデータファイルは/orahome/dbs/finディレクトリに格納されます。

転送先ホストでクロス・プラットフォーム・データファイル変換を実行する手順

  1. SQL*Plusを起動し、管理者権限でソース・データベースprod_sourceに接続します。

  2. V$TRANSPORTABLE_PLATFORMでソース・プラットフォームの名前を問い合せます。

    データベースには、クロス・プラットフォーム・データ・トランスポートをサポートする各プラットフォームの固有な内部名のリストが存在します。CONVERTコマンドのパラメータとして、ソース・プラットフォームまたは宛先プラットフォームの正確な名前が必要な場合があります。たとえば、次のように入力すると、接続したデータベースのプラットフォーム名を取得できます。

    SELECT PLATFORM_NAME
    FROM   V$TRANSPORTABLE_PLATFORM 
    WHERE  PLATFORM_ID =
           ( SELECT PLATFORM_ID
             FROM   V$DATABASE );
    

    この例では、ソース・ホストのPLATFORM_NAMESolaris[tm] OE (64-bit)であると想定しています。

  3. ソース・データベースからトランスポートする表領域を識別し、それらの表領域を読取り専用モードに設定します。

    たとえば、financeおよびhrを読取り専用モードに設定するには、次のSQL文を入力します。

    ALTER TABLESPACE finance READ ONLY;
    ALTER TABLESPACE hr READ ONLY;
    
  4. ソース・ホスト上で、データ・ポンプ・エクスポートを使用してエクスポート・ダンプ・ファイルを作成します。

    この例では、ダンプ・ファイルはexpdat.dmpという名前になります。

  5. エクスポート・ダンプ・ファイルおよびトランスポートするデータファイルを宛先ホストで使用可能にします。

    NFSを使用して、ダンプ・ファイルおよび現行のデータベース・ファイル(コピーは対象外)をアクセス可能にします。また、オペレーティング・システム・ユーティリティを使用して、これらのファイルを宛先ホストにコピーすることもできます。

    この例では、宛先ホストの/tmp/transport_solaris/ディレクトリにファイルを格納します。ファイルの元の場所からのサブディレクトリ構造を保持します。つまり、データファイルは次の場所に格納されます。

    • /tmp/transport_solaris/fin/fin01.dbf

    • /tmp/transport_solaris/fin/fin02.dbf

    • /tmp/transport_solaris/hr/hr01.dbf

    • /tmp/transport_solaris/hr/hr02.dbf

  6. RMANを起動し、TARGETとして(ソース・データベースではなく)転送先データベースに接続します。たとえば、次のコマンドを入力します。

    % rman
    RMAN> CONNECT TARGET SYS@prod_dest
    
  7. CONVERT DATAFILEコマンドを実行して、データファイルを宛先ホストのエンディアン形式に変換します。

    次の例では、DB_FILE_NAME_CONVERTを使用して、変換済データファイルの名前および場所を制御します。また、FROM PLATFORM句も指定します。

    RMAN> CONVERT DATAFILE
    2>   '/tmp/transport_solaris/fin/fin01.dbf',
    3>   '/tmp/transport_solaris/fin/fin02.dbf',
    4>   '/tmp/transport_solaris/hr/hr01.dbf',
    5>   '/tmp/transport_solaris/hr/hr02.dbf'
    6>   DB_FILE_NAME_CONVERT
    7>     '/tmp/transport_solaris/fin','/orahome/dbs/fin',
    8>     '/tmp/transport_solaris/hr','/orahome/dbs/hr'
    9>   FROM PLATFORM 'Solaris[tm] OE (64-bit)
    

    結果として、/orahome/dbs/ディレクトリに一連の変換済データファイルが格納されます。これらのファイルの名前は次のとおりです。

    • /orahome/dbs/fin/fin01.dbf

    • /orahome/dbs/fin/fin02.dbf

    • /orahome/dbs/hr/hr01.dbf

    • /orahome/dbs/hr/hr02.dbf

  8. 表領域をトランスポートする場合の一般的な手順の残りの手順を実行します。

    1. インポート・ユーティリティを使用して、表領域を新しいデータベースに組み込みます。

    2. 必要に応じて、トランスポートされた表領域を読取り専用モードに設定します。


関連項目:

CONVERTコマンドの構文およびセマンティクスについては、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

クロス・プラットフォーム・データベース変換の前のデータベースの確認

「クロス・プラットフォーム・データ転送の基本的な概念」で説明されているように、RMANのCONVERT DATABASEコマンドを使用すると、あるプラットフォームから別のプラットフォームへのデータベース全体のコピーを自動化できます。

データベースを変換する前に、CONVERT DATABASEコマンドの前提条件のリストについて『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。この項の手順を試す前に、この前提条件をすべて満たしていることを確認します。

前提条件の1つは、ソース・プラットフォームと宛先プラットフォームのエンディアン形式が同じである必要があるということです。たとえば、Microsoft WindowsからLinux for x86(両方ともリトル・エンディアン)またはHP-UXからAIX(両方ともビッグ・エンディアン)にデータベースをトランスポートすることはできますが、HP-UXからLinux for x86にデータベース全体をトランスポートすることはできません。


注意:

プラットフォームのエンディアン形式が異なるため、CONVERT DATABASEコマンドを使用できない場合は、宛先プラットフォーム上にデータベースを手動で作成し、クロス・プラットフォーム・トランスポータブル表領域を使用して、ソース・データベースから必要な表領域をトランスポートできます。

データベース全体をトランスポートする場合は、宛先プラットフォームとの互換性が維持されるように、特定のファイルをRMANによって変換する必要があることに注意してください。ソース・プラットフォームと宛先プラットフォームのエンディアン形式が同じである場合でも、ソース・システムから宛先システムにこれらのファイルを単純にコピーすることはできません。次のようなファイルは、RMANによって変換する必要があります。

  • UNDOセグメントを含むファイル

  • HP Tru64プラットフォーム内外へトランスポートされる自動セグメント領域管理(ASSM)セグメント・ヘッダーを含むファイル

CONVERT DATABASEコマンドは、デフォルトで、データベース内のすべてのデータファイルをRMANによる変換を使用して処理します。RMANによる変換では、ファイルに対して変更を行わない場合でも、ファイルをある場所から別の場所にコピーします。RMANによる変換を必要としないその他の方法でファイルをコピーする場合は、CONVERT DATABASEコマンドのSKIP UNNECESSARY DATAFILESオプションを使用します。このオプションを選択した場合、CONVERT DATABASEコマンドでは、前述のようなファイルのみが処理されます。その他のすべてのファイルは、ユーザーがソース・データベースから宛先データベースにコピーする必要があります。

ファイルは、ソース・データベースが読取り専用モードでオープンされた状態でコピーする必要があります。同様に、転送先データベースで変換が実行される場合、すべてのデータファイルは、ソース・データベースが読取り専用モードでオープンされた状態で、転送先データベースにコピーする必要があります。

データベースの変換を準備する手順

  1. ソース・データベースで、SYSDBAとしてSQL*Plusセッションを開始します。

  2. データベースを読取り専用モードでオープンします。

    ALTER DATABASE OPEN READ ONLY;
    
  3. SQL*Plusでサーバー出力が有効になっていることを確認します。

    たとえば、次のSQL*Plusコマンドを入力します。

    SET SERVEROUTPUT ON
    
  4. DBMS_TDB.CHECK_DBファンクションを実行します。

    このチェックを実行すると、データベースの転送を妨げる条件がないことが確認されます。転送を妨げる条件には、不適切な互換性設定、インダウト・トランザクションやアクティブ・トランザクション、ソース・プラットフォームと転送先プラットフォーム間の互換性のないエンディアン形式などがあります。

    CHECK_DBを引数指定せずにコールすると、ソース・データベースにトランスポートを妨げる条件があるかどうかを確認できます。このファンクションは、表27-1に示す引数を指定してコールすることもできます。

    表27-1 CHECK_DBファンクションのパラメータ

    パラメータ 説明

    target_platform_name

    V$DB_TRANSPORTABLE_PLATFORMビューに表示される宛先プラットフォームの名前。

    このパラメータは任意ですが、skip_optionパラメータを使用する場合は必須です。省略すると、宛先プラットフォームがソース・プラットフォームと互換性があると想定され、プラットフォームの互換性に関連性のない条件のみがテストされます。

    skip_option

    データベースがトランスポート可能かどうかをチェックする際にスキップするデータベースの部分(適切な場合)を指定します。指定可能な値(NUMBER型)は次のとおりです。

    • SKIP_NONE(または0): すべての表領域がチェックされます。

    • SKIP_OFFLINE(または2): オフライン表領域内のデータファイルのチェックがスキップされます。

    • SKIP_READONLY(または3): 読取り専用表領域内のデータファイルのチェックがスキップされます。


    例27-1では、32ビットWindowsにデータベースを転送するために、32ビットLinuxプラットフォーム上でCHECK_DBを実行し、読取り専用表領域をスキップします。

    例27-1 DBMS_TDB.CHECK_DBの実行

    DECLARE
      db_ready BOOLEAN;
    BEGIN
      db_ready := 
           DBMS_TDB.CHECK_DB('Microsoft Windows IA (32-bit)',DBMS_TDB.SKIP_READONLY);
    END;
    /
    
    PL/SQL procedure successfully completed.
    

    警告が表示されない場合またはDBMS_TDB.CHECK_DBによってTRUEが戻された場合は、データベースをトランスポートできます。手順6に進みます。

    警告が表示された場合またはDBMS_TDB.CHECK_DBによってFALSEが戻された場合は、この時点でデータベースをトランスポートできません。手順5に進みます。

  5. 出力を調べてデータベースをトランスポートできない理由を確認し、可能な場合は問題を解決してから、手順4に戻ります。該当する条件については、DBMS_TDBのドキュメントを参照してください。

  6. DBMS_TDB.CHECK_EXTERNALファンクションを実行して、すべての外部表、ディレクトリまたはBFILEを識別します。RMANは、これらのファイルのトランスポートを自動化できません。したがって、ファイルを手動でコピーしてデータベースのディレクトリを再作成する必要があります。

    例27-2に、DBMS_TDB.CHECK_EXTERNALファンクションのコール方法を示します。

    例27-2 DBMS_TDB.CHECK_EXTERNALの実行

    DECLARE
         external BOOLEAN;
    BEGIN
        /* value of external is ignored, but with SERVEROUTPUT set to ON
         * dbms_tdb.check_external displays report of external objects
         * on console */
        external := DBMS_TDB.CHECK_EXTERNAL;
    END;
    /
    

    外部オブジェクトが存在しない場合は、このプロシージャを実行しても出力は行われません。ただし、外部オブジェクトが存在する場合は、次のような出力が表示されます。

    The following external tables exist in the database:
    SH.SALES_TRANSACTIONS_EXT
    The following directories exist in the database:
    SYS.DATA_PUMP_DIR, SYS.MEDIA_DIR, SYS.DATA_FILE_DIR, SYS.LOG_FILE_DIR
    The following BFILEs exist in the database:
    PM.PRINT_MEDIA
     
    PL/SQL procedure successfully completed.
    

データベースをトランスポートする場合のソース・ホストでのデータファイルの変換

データベース全体をトランスポートする場合は、宛先プラットフォームとの互換性が維持されるように、特定の形式のブロック(UNDOセグメント内のブロックなど)を再フォーマットする必要があります。ソース・プラットフォームと宛先プラットフォームのエンディアン形式が同じである場合でも、トランスポータブル・データベースのデータファイルは変換する必要があります。表領域をトランスポートする場合のように、あるプラットフォームから別のプラットフォームにデータファイルを単純にコピーすることはできません。

UNDO情報のあるデータファイルおよびHP Tru64プラットフォームからのデータファイルは、変換する必要があります。デフォルトでは、CONVERT DATABASEコマンドが実行されるとすべてのデータファイルが変換されます。ただし、CONVERT DATABASEコマンドでSKIP UNNECESSARY DATAFILESを使用した場合は、UNDOセグメントを含むデータファイルおよびHP Tru64プラットフォームからのデータファイルが変換されます。UNDOセグメントを含まないデータファイルは、FTP、オペレーティング・システムのコピー・コマンドなどのメカニズムを使用して、新しいデータベースにコピーできます。

この項では、CONVERT DATABASEのすべての前提条件をすでに満たし、「クロス・プラットフォーム・データベース変換の前のデータベースの確認」の手順を実行済であると想定しています。この手順の目的は、クロス・プラットフォーム・データベース・トランスポートの一部として、ソース・ホスト上のデータファイルの形式を変換することです。

Solaris上で実行されるデータベースをWindows上で実行されるデータベースに変換するとします。

ソース・プラットフォーム上のデータベースを変換する手順

  1. ソース・データベースを読取り専用モードでオープンします。

    ALTER DATABASE OPEN READ ONLY;
    
  2. RMANを起動し、TARGETとしてソース・データベースに接続します。たとえば、次のコマンドを入力します。

    % rman
    RMAN> CONNECT TARGET SYS@source_db
    
  3. CONVERT DATABASEコマンドを実行します。

    例27-3に、CONVERT DATABASEコマンドを示します(出力例も示します)。TRANSPORT SCRIPTパラメータによって、生成されるSQLスクリプトの場所を指定します。このスクリプトを使用して、新しいデータベースを作成できます。TO PLATFORMパラメータによって、転送先データベースのプラットフォームを指定します。DB_FILE_NAME_CONVERTパラメータによって、生成されるデータファイルのネーミング方法を指定します。

    例27-3 ソース・ホスト上のデータベースの変換

    RMAN> CONVERT DATABASE
    2>   NEW DATABASE 'newdb'
    3>   TRANSPORT SCRIPT '/tmp/convertdb/transportscript.sql'
    4>   TO PLATFORM 'Microsoft Windows IA (32-bit)'
    5>   DB_FILE_NAME_CONVERT '/disk1/oracle/dbs' '/tmp/convertdb';
     
    Starting convert at 25-NOV-06
    using channel ORA_DISK_1
     
    External table SH.SALES_TRANSACTIONS_EXT found in the database
     
    Directory SYS.DATA_PUMP_DIR found in the database
    Directory SYS.MEDIA_DIR found in the database
    Directory SYS.DATA_FILE_DIR found in the database
    Directory SYS.LOG_FILE_DIR found in the database
     
    BFILE PM.PRINT_MEDIA found in the database
     
    User SYS with SYSDBA and SYSOPER privilege found in password file
    User OPER with SYSDBA privilege found in password file
    channel ORA_DISK_1: starting datafile conversion
    input datafile fno=00001 name=/disk1/oracle/dbs/tbs_01.f
    converted datafile=/tmp/convertdb/tbs_01.f
    channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:15
    channel ORA_DISK_1: starting datafile conversion
    input datafile fno=00002 name=/disk1/oracle/dbs/tbs_ax1.f
    converted datafile=/tmp/convertdb/tbs_ax1.f
    channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
    .
    .
    .
    channel ORA_DISK_1: starting datafile conversion
    input datafile fno=00016 name=/disk1/oracle/dbs/tbs_52.f
    converted datafile=/tmp/convertdb/tbs_52.f
    channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01
    Run SQL script /tmp/convertdb/transportscript.sql on the destination platform 
      to create database
    Edit init.ora file init_00gb3vfv_1_0.ora. This PFILE will be used to 
      create the database on the destination platform
    To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on 
      the destination platform
    To change the internal database identifier, use DBNEWID Utility
    Finished backup at 25-NOV-06
    
  4. CONVERT DATABASEの完了後、ソース・データベースを読取り/書込みで再度オープンできます。

  5. CONVERT DATABASEで生成されたデータファイルを宛先ホスト上の目的の場所に移動します。

    例27-3では、このコマンドによって、ソース・ホストの/tmp/convertdb/ディレクトリにファイルが作成されます。宛先データベースのファイルが格納される宛先ホストのディレクトリに、これらのファイルを移動します。

  6. データファイルのパスが宛先ホスト上でのパスと異なる場合は、データファイルの新しい場所が参照されるようにトランスポート・スクリプトを編集します。

  7. 必要に応じて、初期化パラメータ・ファイルを編集して、宛先データベースの設定を変更します。

    初期化パラメータ・ファイルの先頭のいくつかのエントリは、データベースを転送先プラットフォームに移動する際に編集する必要があります。たとえば、初期化パラメータ・ファイルは次のような内容になっている場合があります。

    # Please change the values of the following parameters:
     control_files            = "/tmp/convertdb/cf_D-NEWDBT_id-1778429277_00gb9u2s"
     db_recovery_file_dest    = "/tmp/convertdb/orcva"
     db_recovery_file_dest_size= 10737418240
     instance_name            = "NEWDBT"
     service_names            = "NEWDBT.example.com"
     plsql_native_library_dir = "/tmp/convertdb/plsqlnld1"
     db_name                  = "NEWDBT"
    
  8. 必要に応じて、変換されたデータファイルの新しい名前を使用するようにトランスポート・スクリプトを編集します。

    例27-3では、トランスポート・スクリプトの名前は/tmp/convertdb/transportscript.sqlです。データベースを作成するには、転送先ホストでこのスクリプトを実行します。したがって、データファイルの正しい名前を使用してこのスクリプトを編集する必要があります。

  9. 転送先ホストでSQL*Plusを起動し、オペレーティング・システム認証を使用してSYSDBAとして転送先データベース・インスタンスに接続します。

    たとえば、次のように接続します。

    SQL> CONNECT / AS SYSDBA
    

    オペレーティング・システム認証を使用しない場合は、まず、Oracle Netファイルを構成してパスワード・ファイルを作成し、リスナーを起動する必要があります。その後、ネット・サービス名を使用してインスタンスに接続できます。

  10. SQL*Plusでトランスポート・スクリプトを実行し、宛先ホスト上に新しいデータベースを作成します。

    SQL> @transportscript
    

トランスポート・スクリプトが終了すると、新しいデータベースの作成が完了します。

データベースをトランスポートする場合の宛先ホストでのデータファイルの変換

この項では、CONVERT DATABASEコマンドのすべての前提条件をすでに満たし、「クロス・プラットフォーム・データベース変換の前のデータベースの確認」の手順を実行済であると想定しています。この手順の目的は、クロス・プラットフォーム・データベース・トランスポートの一部として、宛先ホスト上のデータファイルの形式を変換することです。

データファイルの変換は、次のフェーズで実行します。

  1. ソース・ホストでのデータファイル初期変換手順の実行

  2. 転送先ホストでのデータファイルの変換

ソース・ホストでのデータファイル初期変換手順の実行

この手順では、ソース・ホスト上でCONVERT DATABASEコマンドを実行します。このコマンドによって、初期化パラメータ・ファイル、および宛先ホストで使用するために編集可能なスクリプトが生成されます。また、変換前のデータファイルをソース・ホストから宛先ホストにコピーします。

ソース・ホストでデータファイル初期変換を実行する手順

  1. データベースが読取り専用モードでオープンしていることを確認します。

  2. RMANを起動し、TARGETとしてソース・データベースに接続します。

    たとえば、次のコマンドを入力します。

    % rman
    RMAN> CONNECT TARGET SYS@source_db
    
  3. CONVERT DATABASE ON DESTINATION PLATFORMコマンドを実行します。

    例27-4に、CONVERT DATABASEコマンドの例を示します(出力例も示します)。ON DESTINATION PLATFORMパラメータを使用して、データファイルで必要とされるすべてのCONVERTコマンドがソース・プラットフォームではなく転送先プラットフォームで実行されるように指定します。FORMATパラメータによって、生成されるファイルのネーミング方法を指定します。

    例27-4 CONVERT DATABASE ON DESTINATION PLATFORMの実行

    RMAN> CONVERT DATABASE
    2>   ON DESTINATION PLATFORM
    3>   CONVERT SCRIPT '/tmp/convertdb/convertscript-target'
    4>   TRANSPORT SCRIPT '/tmp/convertdb/transportscript-target'
    5>   NEW DATABASE 'newdbt'
    6>   FORMAT '/tmp/convertdb/%U';
     
    Starting convert at 28-JAN-05
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: sid=39 devtype=DISK
     
    External table SH.SALES_TRANSACTIONS_EXT found in the database
     
    Directory SYS.DATA_PUMP_DIR found in the database
    Directory SYS.MEDIA_DIR found in the database
    Directory SYS.DATA_FILE_DIR found in the database
    Directory SYS.LOG_FILE_DIR found in the database
     
    BFILE PM.PRINT_MEDIA found in the database
     
    User SYS with SYSDBA and SYSOPER privilege found in password file
    User OPER with SYSDBA privilege found in password file
    channel ORA_DISK_1: starting to check datafiles
    input datafile fno=00001 name=/disk1/oracle/dbs/tbs_01.f
    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
    channel ORA_DISK_1: starting to check datafiles
    input datafile fno=00002 name=/disk1/oracle/dbs/tbs_ax1.f
    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
    channel ORA_DISK_1: starting to check datafiles
    input datafile fno=00017 name=/disk1/oracle/dbs/tbs_03.f
    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
    .
    .
    .
    channel ORA_DISK_1: starting to check datafiles
    input datafile fno=00015 name=/disk1/oracle/dbs/tbs_51.f
    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
    channel ORA_DISK_1: starting to check datafiles
    input datafile fno=00016 name=/disk1/oracle/dbs/tbs_52.f
    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
    Run SQL script /tmp/convertdb/transportscript-target on the destination platform to create database
    Edit init.ora file /tmp/convertdb/init_00gb9u2s_1_0.ora. This PFILE will be used to create the database on the destination platform
    Run RMAN script /tmp/convertdb/convertscript-target on destination platform to convert datafiles
    To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the destination platform
    To change the internal database identifier, use DBNEWID Utility
    Finished backup at 28-JAN-05
    

    例27-4のコマンドでは、トランスポート・スクリプト、新しいデータベースの初期化パラメータ・ファイル、および変換される各データファイル用のRMANのCONVERT DATAFILEを含む変換スクリプトが作成されます。


    注意:

    CONVERT DATABASE ON DESTINATION PLATFORMでは、変換済データファイルのコピーは生成されません。このコマンドでは、スクリプトのみが作成されます。

  4. オペレーティング・システム・ユーティリティを使用して、宛先ホストの一時格納場所に次のファイルをコピーします。

    • 変換するデータファイル

    • 変換スクリプト

    • トランスポート・スクリプト

    • 宛先データベースの初期化ファイル

  5. ソース・データベースを読取り/書込みモードにします。

転送先ホストでのデータファイルの変換

この項では、前の項で作成したスクリプトを使用して、転送先ホストのデータファイルを変換する方法について説明します。

前の項で作成した変換スクリプトでは、ソース・データベース・ファイルの元のデータファイル名を使用します。FORMATパラメータによって、CONVERT DATABASEコマンドのFORMATまたはDB_FILE_NAME_CONVERTパラメータを使用して生成される名前を指定します。

同じパス名を使用して宛先ホストからソース・データベースのデータファイルにアクセス可能な場合、変換スクリプトは、ソース・データベースが読取り専用であるかぎり、変更せずに宛先ホストで実行できます。たとえば、ソース・ホストおよび宛先ホストの両方でNFSを使用してソース・データファイルを含むディスクがマウントされており、両方のホストのマウント・ポイントが/fs1/dbs/である場合、編集は必要ありません。

転送先ホスト上のデータファイルを変換する手順

  1. 必要に応じて、変換スクリプトを編集します。

    変換スクリプトでは、変換するデータファイルごとに1つのCONVERT DATAFILEコマンドが存在します。変換スクリプトで、変換前データファイルの現在の一時ファイル名および変換済データファイルの出力ファイル名を指定する必要があります。典型的な変換スクリプトは、次のような内容になります。

    RUN
    {
     CONVERT
     FROM PLATFORM 'Linux IA (32-bit)'
     PARALLELISM 10
      DATAFILE '/disk1/oracle/dbs/tbs_01.f'
      FORMAT
     '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-1_7qgb9u2s';
     
     DATAFILE '/disk1/oracle/dbs/tbs_ax1.f'
     FORMAT
     '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSAUX_FNO-2_7rgb9u2s';
     
     DATAFILE '/disk1/oracle/dbs/tbs_03.f'
     FORMAT
     '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-17_7sgb9u2s';
     
     DATAFILE '/disk1/oracle/dbs/tbs_51.f'
     FORMAT
     '/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-15_8egb9u2u';
     
     DATAFILE '/disk1/oracle/dbs/tbs_52.f'
      FORMAT
     '/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-16_8fgb9u2u';
    }
    

    変換スクリプト内の各DATAFILEコマンドを編集し、各データファイルの一時格納場所を入力として指定します。また、各コマンドのFORMATパラメータを編集し、トランスポート済データベースのデータファイルの任意の最終格納場所を指定します。

  2. 必要に応じて、宛先ホスト上の初期化パラメータ・ファイルを編集し、宛先データベースの設定を変更します。

    初期化パラメータ・ファイルの先頭のいくつかのエントリは、データベースを転送先プラットフォームに移動する前に編集する必要があります。たとえば、初期化パラメータ・ファイルは次のような内容になっている場合があります。

    # Please change the values of the following parameters:
    control_files            = "/tmp/convertdb/cf_D-NEWDBT_id-1778429277_00gb9u2s"
    db_recovery_file_dest    = "/tmp/convertdb/orcva"
    db_recovery_file_dest_size= 10737418240
    instance_name            = "NEWDBT"
    service_names            = "NEWDBT.example.com"
    plsql_native_library_dir = "/tmp/convertdb/plsqlnld1"
    db_name                  = "NEWDBT"
    
  3. 宛先ホストで、SQL*Plusを使用してデータベース・インスタンスをNOMOUNTモードで起動します。

    前の手順でコピーした初期化パラメータ・ファイルを指定します。たとえば、次のコマンドを入力します。

    SQL> STARTUP NOMOUNT PFILE='/tmp/init_convertdb_00i2gj63_1_0.ora'
    
  4. RMANを起動し、TARGETとして(ソース・データベースではなく)宛先データベースに接続します。たとえば、次のコマンドを入力します。

    % rman
    RMAN> CONNECT TARGET SYS@prod_dest
    
  5. RMANプロンプトで、変換スクリプトを実行します。たとえば、次のコマンドを入力します。

    RMAN> @/tmp/convertdb/convertscript-target
    
  6. データベース・インスタンスを停止します。

    実行する必要がある転送スクリプトにSTARTUP NOMOUNTコマンドがすでに含まれているため、この手順が必要となります。

  7. 必要に応じて、変換されたデータファイルの新しい名前を使用するようにトランスポート・スクリプトを編集します。

    例27-3では、トランスポート・スクリプトは/tmp/convertdb/transportscript.sqlです。データベースを作成するには、宛先ホストでこのスクリプトを実行します。したがって、データファイルの正しい名前を使用してこのスクリプトを編集する必要があります。

  8. SQL*Plusでトランスポート・スクリプトを実行します。

    たとえば、次のように入力して宛先ホスト上に新しいデータベースを作成します。

    SQL> @/tmp/convertdb/transportscript
    

トランスポート・スクリプトが終了すると、宛先データベースが作成されます。