Oracle SQL*Loader を使用したインポート - Amazon Relational Database Service

Oracle SQL*Loader を使用したインポート

含まれるオブジェクトの数が制限されている大規模なデータベースには、Oracle SQL*Loader が適しているかもしれません。移行元のデータベースからのエクスポートと移行先のデータベースへの読み込みのプロセスは、スキーマに固有のものであるため、次の例では、サンプルのスキーマオブジェクトを作成し、移行元からエクスポートして、移行先のデータベースにデータを読み込みます。

Oracle SQL*Loader をインストールする最も簡単な方法は、Oracle Instant Client をインストールすることです。ソフトウェアをダウンロードするには、https://www.oracle.com/database/technologies/instant-client.html にアクセスしてください。ドキュメントについては、Oracle Database Utilities マニュアルの「Instant Client for SQL*Loader、エクスポート、およびインポート」を参照してください。

Oracle SQL*Loader を使用してデータをインポートするには
  1. 次の SQL ステートメントを使用して、サンプルの移行元テーブルを作成します。

    CREATE TABLE customer_0 TABLESPACE users AS (SELECT ROWNUM id, o.* FROM ALL_OBJECTS o, ALL_OBJECTS x WHERE ROWNUM <= 1000000);
  2. 移行先の RDS for Oracle DB インスタンスで、データを読み込むための移行先テーブルを作成します。WHERE 1=2 句を使用すると、ALL_OBJECTS の構造体がコピーされますが、どの行もコピーされません。

    CREATE TABLE customer_1 TABLESPACE users AS (SELECT 0 AS ID, OWNER, OBJECT_NAME, CREATED FROM ALL_OBJECTS WHERE 1=2);
  3. 移行元のデータベースからテキストファイルにデータをエクスポートします。以下の例では SQL*Plus を使用しています。移行するデータについて、データベース内のすべてのオブジェクトをエクスポートするためのスクリプトの生成が必要になる場合があります。

    ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS' SET LINESIZE 800 HEADING OFF FEEDBACK OFF ARRAY 5000 PAGESIZE 0 SPOOL customer_0.out SET MARKUP HTML PREFORMAT ON SET COLSEP ',' SELECT id, owner, object_name, created FROM customer_0; SPOOL OFF
  4. データの詳細について記述した制御ファイルを作成します。このステップを実行するためのスクリプトを記述する必要がある場合があります。

    cat << EOF > sqlldr_1.ctl load data infile customer_0.out into table customer_1 APPEND fields terminated by "," optionally enclosed by '"' ( id POSITION(01:10) INTEGER EXTERNAL, owner POSITION(12:41) CHAR, object_name POSITION(43:72) CHAR, created POSITION(74:92) date "YYYY/MM/DD HH24:MI:SS" )

    必要に応じて、ステージング領域 (Amazon EC2 インスタンスなど) に上のコードで生成したファイルをコピーします。

  5. 移行先のデータベース用の適切なユーザー名とパスワードで SQL*Loader を使用して、データをインポートします。

    sqlldr cust_dba@targetdb CONTROL=sqlldr_1.ctl BINDSIZE=10485760 READSIZE=10485760 ROWS=1000