DBMS_FILE_TRANSFERパッケージを使用したプラットフォーム間でのデータの変換

DBMS_FILE_TRANSFERパッケージのGET_FILEまたはPUT_FILEプロシージャを使用すると、データファイルの転送中にプラットフォーム間でデータを変換できます。

これらのプロシージャのいずれかを使用して、ソース・プラットフォームとターゲット・プラットフォーム間でデータファイルを移動する場合、各データファイル内の各ブロックがターゲット・プラットフォームのendiannessに変換されます。

この項では、例を使用して、データファイルを異なるプラットフォームに変換するためにDBMS_FILE_TRANSFERパッケージを使用する方法を示します。この例では、次のことを想定しています。

  • GET_FILEプロシージャでデータファイルを転送します。

  • mytable.342.123456789データファイルを異なるプラットフォームに転送します。

  • ソース・プラットフォームのendiannessはターゲット・プラットフォームのendiannessと異なります。

  • ソース・データベースのグローバル名はdbsa.example.comです。

  • ソース・データベースとターゲット・データベースの両方でOracle Automatic Storage Management(Oracle ASM)が使用されています。

注意:

DBMS_FILE_TRANSFERパッケージを使用して、endiannessが同じプラットフォーム間でデータファイルを転送することもできます。

GET_FILEプロシージャを使用して転送することによってデータファイルを変換するには、次の手順を実行します。

  1. SQL*Plusを使用して、ディレクトリ・オブジェクトを作成できる管理ユーザーとしてソース・データベースに接続します。
  2. ターゲット・データベースに転送するデータファイルを格納するディレクトリ・オブジェクトを作成します。

    たとえば、+data/dbsa/datafileディレクトリに対してsales_dir_sourceというディレクトリ・オブジェクトを作成するには、次のSQL文を実行します。

    CREATE OR REPLACE DIRECTORY sales_dir_source 
       AS '+data/dbsa/datafile';
    

    ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。

  3. SQL*Plusを使用して、データベース・リンクの作成、ディレクトリ・オブジェクトの作成およびDBMS_FILE_TRANSFERパッケージのプロシージャの実行ができる管理ユーザーとしてターゲット・データベースに接続します。
  4. ターゲット・データベースからソース・データベースへデータベース・リンクを作成します。

    ソース・データベースの接続されるユーザーには、手順2で作成したディレクトリ・オブジェクトについての読取り権限が必要です。

  5. ソース・データベースから転送するデータファイルを格納するディレクトリ・オブジェクトを作成します。

    DBMS_FILE_TRANSFERパッケージのプロシージャを実行するローカル・データベースのユーザーには、ディレクトリ・オブジェクトについての書込み権限が必要です。

    たとえば、+data/dbsb/datafileディレクトリに対してsales_dir_targetというディレクトリ・オブジェクトを作成するには、次のSQL文を実行します。

    CREATE OR REPLACE DIRECTORY sales_dir_target 
      AS '+data/dbsb/datafile';
    
  6. DBMS_FILE_TRANSFERパッケージのGET_FILEプロシージャを実行して、データファイルを転送します。

    たとえば、次のプロシージャを実行し、手順4で作成したデータベース・リンクを使用して、mytable.342.123456789データファイルをソース・データベースからターゲット・データベースに転送します。

    BEGIN
      DBMS_FILE_TRANSFER.GET_FILE(
        source_directory_object      => 'sales_dir_source',
        source_file_name             => 'mytable.342.123456789',
        source_database              => 'dbsa.example.com',
        destination_directory_object => 'sales_dir_target',
        destination_file_name        => 'mytable');
    END;
    /
    

注意:

この例では、宛先データファイル名はmytableです。Oracle ASMでは、GET_FILEプロシージャのdestination_file_nameパラメータで完全修飾ファイル名形式を使用できません。

関連項目: