SQL Developerでは、オフライン・データ・ロード機能を提供するためにIBM DB2エクスポート・ユーティリティとOracle SQL*Loaderユーティリティが使用されます。これは、大量の表データを移行する場合に役立ちます。IBM DB2エクスポート・ユーティリティを使用してIBM DB2データベースからデータを抽出し、サポートされているいずれかのファイル形式でファイルに保存します。抽出するデータは、SQL問合せを使用して指定します。SQL Developerは、オフラインでのデータ・ダンプおよび生成されたデータのロードを有効にするために必要なスクリプトを自動的に生成します。生成されたスクリプトは、LOBデータを含むすべての種類のデータのオフライン・データ・ロードをサポートします。
この章の内容は次のとおりです。
すべてのオフライン・データ・エクスポート・スクリプトは、選択したターゲット・フォルダに格納されます。スクリプトを生成するには、「ツール」、「移行」、「スクリプト生成」、「データ移動スクリプトの生成」の順にクリックします。
SQL Developerは、オフライン・データ・ロード・スクリプトを生成した日時を表すタイムスタンプをサブディレクトリ内に使用してディレクトリを作成します。たとえば、21-08-07_17-56-16というサブディレクトリは2007年9月21日午後5時56分にスクリプトを生成したことを示します。SQL Developerはバッチ・コマンド・ファイルunload_script.bat
またはunload_script.sh
をこのサブディレクトリに作成します。このファイルには、IBM DB2ソース・ディレクトリからデータを抽出してデリミタ付きのASCIIファイルに格納するためのコマンドが含まれています。
timestampディレクトリにも、SQL*Loader制御ファイルと、Oracle Databaseにデータをロードするために使用するSQL*Loaderスクリプト(oracle_ctl.bat
またはoracle_ctl.sh
)が含まれています。制御ファイルはOracleフォルダに含まれています。
ディレクトリ構造およびその内容の概要を次の表に示します。
ディレクトリ | 説明 |
---|---|
DB2\ timestamp | TIMESTAMPディレクトリには、ORACLEというサブディレクトリが含まれています。また、unload_script.bat またはunload_script.sh というファイルも含まれています。このファイルには、IBM DB2データベースからデリミタ付きASCIIファイルにデータをエクスポートするために使用するコマンドが含まれています。エクスポートされたデータは、TIMESTAMPサブディレクトリに自動的に生成されます。
また、このディレクトリには、 |
DB2\ timestamp\Oracle | このディレクトリには、移動元の各表用のSQL*Loader制御ファイル(.ctl)が含まれています。データの移動時に発生したエラーはここにログ・ファイルとして保存されます。 |
オフライン・データ・ロード・スクリプトを生成した後、それらを使用してIBM DB2データベースからデータをアンロードできます。IBM DB2データベースからデータをアンロードするには、EXPORT.BATファイルを実行する必要があります。データのアンロードの詳細は、4.2.1項「IBM DB2データベースからデータをアンロードする手順」を参照してください。
unload_script.bat
またはunload_script.bat.sh
ファイルのexportコマンドの形式は次のとおりです。
DB2バージョン9のデータのエクスポートの場合:
db2 export to <file name> of DEL modified by lobsinsepfiles coldel"#" timestampformat=\"YYYY/MM/DD HH.mm.ss\" datesiso nochardel <select query>
DB2バージョン8のデータのエクスポートの場合:
db2 export to <file name> of DEL modified by coldel"#" timestampformat=\"YYYY/MM/DD HH.mm.ss\" datesiso nochardel <select query>
DB2バージョン9は、別々のファイルのLOBデータをサポートするため、大きいサイズのデータの移行により適しています。バージョン8で大きいLOBデータをサポートするには、unload_script.bat
またはunload_script.sh
のoracle ctlファイル・コマンドとdb2コマンドを変更する必要があります。
次の表に、unload_script.bat
またはunload_script.sh
ファイルで使用されるコマンドの説明を示します。
パラメータ | 説明 |
---|---|
Db2 |
このパラメータは、IBM DB2コマンドライン環境を起動します。 |
export to |
このパラメータは、IBM DB2エクスポート・ユーティリティと呼ばれます。 |
DB2\TABLE_NAME.DAT
|
このパラメータは、IBM DB2表から抽出されたデータを格納するファイルの名前で、TABLE_NAMEは表の名前です。すべてのデータファイルがDB2ディレクトリに生成されます。これによって、必要なデータファイルをこのファイルで検索できます。 |
of del |
このパラメータは、データをデリミタ付きASCII形式に挿入するようにIBM DB2エクスポート・ユーティリティに指示します。この形式では、列デリミタによって列データ、行デリミタによって行が区切られます。これがOracle SQL*Loaderユーティリティでサポートされているファイル形式です。 |
lobsinsepfiles |
このパラメータは、表の行にLOBオブジェクトごとの個別のファイルを作成するか、すべての表データに単一のデリミタ付きファイルを使用するかを指定します。 |
nochardel |
このパラメータは、文字ベースのデータを一重引用符で囲まないようにIBM DB2エクスポート・ユーティリティに指示します。 |
coldel# |
このパラメータは、「#」(ハッシュまたはシャープ記号)文字を列デリミタとして使用するようにIBM DB2エクスポート・ユーティリティに指示します。 |
<select query>
|
このパラメータは、指定したスキーマに存在する指定した表からすべての列データをロードするようにIBM DB2エクスポート・ユーティリティに指示するSQLコマンドです。 |
表データは、<catalog>.<schema>.<table>.dat
という形式の名前のファイルにエクスポートされます。ファイルの形式は、data1#<COL_DEL> #data2#<COL_DEL>…<ROW_DEL>
(COL_DEL
とROW_DEL
は移行オフライン・プリファレンスの設定からのもの)です。
DB2データ・ダンプ・スクリプトを実行する前に、次の形式でコマンドを入力してログインする必要があります。
db2 connect to <catalog> user <user name> using <password>
その後、ログインした接続セッションを使用してスクリプトを実行できます。
unload_script.bat
またはunload_script.sh
ファイルを使用してIBM DB2データベースからデータをアンロードするには、次の手順を実行する必要があります。
Microsoft DOSウィンドウのコマンド・プロンプトで次のコマンドを使用して、IBM DB2のCommand Line Processor(CLP)ウィンドウをアクティブにします。
db2cmd
CLPウィンドウで次のコマンドを使用して必要なデータベースをアクティブにします。
db2 acitvate database database_name
CLPウィンドウで次のコマンドを使用してデータベースに接続します。
db2 connect to database_name user user_name using password
CLPウィンドウでコマンドを入力してunload_script.bat
またはunload_script.sh
ファイルを実行します。次に例を示します。
unload_script.bat
前述の例は、unload_script.bat
ファイルに指定されている表のデータをアンロードします。
IBM DB2エクスポート・ユーティリティは、oracle_ctl.bat
またはoracle_ctl.sh
ファイルによる後続の処理でのすべてのデータファイルをDB2ディレクトリに生成します。
注意: IBM DB2エクスポート・ユーティリティを正常に実行するには、エクスポートする各表に対してSYSADMまたはDBADM認可レベル、あるいはCONTROLまたはSELECT権限が必要です。 |
データファイルの生成後、これらのファイルのデータをOracle Databaseにロードする必要があります。データをOracle Databaseにロードするには、oracle_ctl.bat
またはoracle_ctl.sh
ファイルを実行する必要があります。
表に対するoracle_ctl.bat
またはoracle_ctl.sh
ファイルのSQL*Loaderコマンドの形式は次のとおりです。
sqlldr %1/%2 control=Oracle\TABLE_NAME.ctl log=_TABLE_NAME.log
%1/%2
は、コマンドライン引数として指定されたユーザー名/パスワードを表します。
次の表に、oracle_ctl.bat
またはoracle_ctl.sh
ファイルのSQL*Loaderユーティリティの実行時に使用される各コマンドとパラメータの説明を示します。
パラメータ | 説明 |
---|---|
sqlldr |
コマンドのこのパラメータは、Oracle SQL*Loaderユーティリティを起動します。 |
%1/%2 |
このパラメータは、Oracle Databaseに接続するユーザーのユーザー名とパスワードです。
これらは、コマンド・ウィンドウからコマンドライン引数として渡されます。たとえば、 |
control=DB2\TABLE_NAME.ctl |
このパラメータは、データの移動時に使用するSQL*loader制御ファイルを指定します。制御ファイルの名前は表名と同じです。
制御ファイルには、ロードするデータに関するすべての詳細(日付、時刻またはタイムスタンプの形式、使用されている列デリミタ、LOB列の識別情報など)が含まれています。 |
log=TABLE_NAME.log |
このパラメータは、SQL*loaderユーティリティによって生成されるログ・ファイルの名前を指定します。ログ・ファイルの名前は表名と同じです。 |
データファイルのデータをOracle Databaseにロードするには、次のコマンドを入力して、データをロードするSQL_LOAD_SCRIPT.BAT
ファイルを実行する必要があります。
Windows: oracle_ctl.bat
Linux: oracle_ctl.sh
注意: oracle_ctl.bat またはoracle_ctl.sh ファイルはCLPウィンドウ内から実行する必要はありません。コマンド・プロンプトからファイルを実行できます。 |
表のSQL*Loader制御ファイルの形式は次のとおりです。
load data infile 'SAMPLE.EMP_PHOTO.dat' "str '<EORD>\r\n'" into table SAMPLE.EMP_PHOTO fields terminated by '#<EOFD>#' trailing nullcols ( EMPNO CHAR(255), PHOTO_FORMAT , PICTURE_ref FILLER, PICTURE LOBFILE(PICTURE_ref) TERMINATED BY EOF )
Linuxシステムでは、前述の例の"str '<EORD>\r\n'"
(行データ・セパレータ)を"str '<EORD>\r\n'"
に置き換えます。
次の表に、SQL*Loader制御ファイルで使用される各コマンドとパラメータを示します。
パラメータ | 説明 |
---|---|
Load data |
このパラメータは、ここから新しいデータ・ロードを開始するようにSQL*Loaderに指示します。 |
infile 'TABLE_NAME.dat |
このパラメータは、ロードするデータを含むデータファイルの名前を指定します。 |
into table TABLE_NAME |
このパラメータは、データがロードされる表の名前を指定します。 |
fields terminated by '#<EOFD>#' |
このパラメータは、各フィールドが'#<EOFD>#' 文字で終了するように指定します。 |
FIELD_NAME _ref FILLER |
このパラメータは、LOBデータを含むLOBデータファイルの別名を指定します。SQL*Loaderユーティリティは、データ・ロード操作時に主となるデータファイルからLOBデータの名前を取得します。
このパラメータは、LOBデータ列にのみ適用されます。 |
FIELD_NAME LOBFILE (lobFilename) TERMINATED BY EOF) |
このパラメータは、指定したフィールドのLOBデータファイルがEOF(ファイルの終わり)マーカーで終了するように指定します。
このパラメータは、LOB列にのみ適用されます。 |
SQL*Loaderユーティリティの詳細は、『Oracle Databaseユーティリティ』を参照してください。