株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

外部表が使えない場合のSQL*Loader Express Mode

SQL*Loader Express Modeは、デフォルトでは外部表を使ってデータをロードするようですが、状況によっては外部表が使えない場合もあります。その場合、自動的に外部表を使用しないロード方法(ダイレクトパスのようです)に切り替えて、ロード処理を実行します。なかなか気が利いています。

SQL*Loader実行ユーザーがCREATE ANY DIRECTORYシステム権限を持っていない場合

[oracle@l63x64a tmp]$ sqlldr rywatabe2/rywatabe2 TABLE=emp

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 20:11:41 2013

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

エクスプレス・モード・ロードの表: EMP
使用パス:      外部表, DEGREE_OF_PARALLELISM=AUTO
SQL*Loader-816: 一時ディレクトリ・オブジェクトSYS_SQLLDR_XT_TMPDIR_00000をファイルemp.datに対して作成中にエラーが発生しました
ORA-01031: 権限が不足しています。
SQL*Loader-579: ロードのディレクト・パスに切替え中
SQL*Loader-583: ダイレクト・パスの切捨て設定を無視し、LDRTRIMの値を使用します
SQL*Loader-584: ダイレクト・パスのDEGREE_OF_PARALLELISM設定を無視し、NONEの値を 使用します
エクスプレス・モード・ロードの表: EMP
使用パス:      ダイレクト

ロードは完了しました。 - 論理レコード件数2

表EMP:
  2行のロードに成功しました。

確認するログ・ファイル:
  emp.log
ロードの詳細を参照してください。
[oracle@l63x64a tmp]$ ls
emp.dat  emp.log  tmp
[oracle@l63x64a tmp]$ cat emp.log

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 20:11:41 2013

Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

エクスプレス・モード・ロードの表: EMP
データファイルemp.dat
  不良ファイル:  emp_%p.bad
  廃棄ファイル:  指定なし

 (すべて廃棄できます)

ロード数: ALL
スキップ数: 0
許容エラー数: 50
継続文字:    指定なし
使用パス:      外部表

表EMP、 ロード済 すべての論理レコードから
この表に対する有効な挿入オプション: APPEND

   列名                  位置   長さ  用語暗号化データ型
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                              FIRST    *  ,     CHARACTER
ENAME                               NEXT    *  ,     CHARACTER
HIREDATE                            NEXT    *  ,     DATE "RR-MM-DD"
DEPTNO                              NEXT    *  ,     CHARACTER

可能性のある再使用のために生成された制御ファイル:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'emp'
APPEND
INTO TABLE EMP
FIELDS TERMINATED BY ","
(
  EMPNO,
  ENAME,
  HIREDATE DATE,
  DEPTNO
)
可能性のある再使用のために生成された制御ファイルの終わり。

SQL*Loader-816: 一時ディレクトリ・オブジェクトSYS_SQLLDR_XT_TMPDIR_00000をファイルemp.datに対して作成中にエラーが発生しました
ORA-01031: 権限が不足しています。

------------------------------------------------------------------------
SQL*Loader-579: ロードのディレクト・パスに切替え中
SQL*Loader-583: ダイレクト・パスの切捨て設定を無視し、LDRTRIMの値を使用します
SQL*Loader-584: ダイレクト・パスのDEGREE_OF_PARALLELISM設定を無視し、NONEの値を 使用します
------------------------------------------------------------------------

エクスプレス・モード・ロードの表: EMP
データファイルemp.dat
  不良ファイル:  emp.bad
  廃棄ファイル:  指定なし

 (すべて廃棄できます)

ロード数: ALL
スキップ数: 0
許容エラー数: 50
継続文字:    指定なし
使用パス:      ダイレクト

表EMP、 ロード済 すべての論理レコードから
この表に対する有効な挿入オプション: APPEND

   列名                  位置   長さ  用語暗号化データ型
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                              FIRST    *  ,     CHARACTER
ENAME                               NEXT    *  ,     CHARACTER
HIREDATE                            NEXT    *  ,     DATE RR-MM-DD
DEPTNO                              NEXT    *  ,     CHARACTER

可能性のある再使用のために生成された制御ファイル:
OPTIONS(DIRECT=TRUE)
LOAD DATA
INFILE 'emp'
APPEND
INTO TABLE EMP
FIELDS TERMINATED BY ","
(
  EMPNO,
  ENAME,
  HIREDATE DATE,
  DEPTNO
)
可能性のある再使用のために生成された制御ファイルの終わり。

表EMP:
  2行のロードに成功しました。
  0行はデータ・エラーのためロードされませんでした。
  0行はWHEN句のエラーのためロードされませんでした。
  0行はすべてのフィールドがNULLのためロードされませんでした。
  日付キャッシュ:
   最大サイズ:      1000
   エントリ :         2
   ヒット    :         0
   ミス  :         0

バインド配列サイズはダイレクト・パスで使用されません。
列配列の行数:     5000
ストリーム・バッファのバイト数:   256000
読取りバッファのバイト数:  1048576

スキップされた論理レコードの合計:           0
読み込まれた論理レコードの合計:             2
拒否された論理レコードの合計:               0
廃棄された論理レコードの合計:        0
SQL*Loaderのメイン・スレッドによってロードされたストリーム・バッファの合計:        1
SQL*Loaderのロード・スレッドによってロードされたストリーム・バッファの合計:        0

実行開始火 8月  20 20:11:41 2013
実行終了火 8月  20 20:11:41 2013

実行時間:        00: 00: 00.55
CPU時間 :        00: 00: 00.02

便利便利。でもこの機能って、10年前ぐらいから存在すべき機能だよね 😉

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ