参照
EMP
外部表
$ sqlldr scott/tiger table=EMP
データファイル
emp.dat
1
2
3 4 5
5
ロード完了
6
SQL*Loader Express モード
デフォルト動作
• データファイルの指定
• カレントディレクトリの「 < 表名 >.dat 」を読み込む
• DATA パラメータで任意のファイルの読み込みも可能
• 単一ファイルの読み込み
• 複数ファイルの読み込み
• 複数ファイルのデータを一括ロード
$ sqlldr scott/tiger table=EMP data=emp.dat
$ sqlldr scott/tiger table=EMP data='emp*.dat'
$ sqlldr scott/tiger table=EMP data='emp?.dat'
任意の値・文字列を含むファイル (ex) emp.dat, emp1.dat, emp10.dat
任意の値 (1 文字 ) を含むファイル (ex) emp1.dat, emp2.dat, emp3.dat
$ sqlldr scott/tiger table=EMP data='emp1.dat','emp2.dat'
$ sqlldr scott/tiger table=EMP data=emp1.dat data=emp2.dat
SQL*Loader Express モード
出力ファイル
•
実行時に以下のファイルが出力される• <
表名>.log
• SQL*Loader
実行時のログファイル• SQL*Loader
から実行されているSQL
文も参照可能• <
表名>_<
実行プロセスのPID>.log_xt
• Database
上での処理実行時のログファイル•
エラー発生時にはそのエラー情報を出力• <
表名>_<PID>.bad
•
ロードできなかったデータ•
ロード時にエラーが発生した場合のみ出力される• DATA
パラメータ指定時は「<
最初のDATA
ファイル名>_<PID>.bad
」となる$ sqlldr scott/tiger table=EMP
• emp.log
• emp_21300.log_xt
• emp_21300.bad
$ sqlldr scott/tiger table=EMP DATA=emp1.dat, emp2.dat
• emp.log
• emp_21301.log_xt
• emp_21302.log_xt
• emp_21301.bad
• emp_21302.bad
まとめ
• Oracle Database
において2
種類のテキスト・ファイルからのデータ・ロード 方法があります• SQL*Loader
•
外部表を使用したローディング• SQL*Loader
は以前のバージョンから提供されており、馴染み深いのですが、現在は外部表の利用が主流です
•
外部表を利用することでデータ・ロードをSQL
で柔軟におこなえます•
エクスポート・インポートの種類は2
種類•
オリジナルのExport/Import
とData Pump
• Oracle Database 10g
からはData Pump
を使用する•
ダイレクト・パス・ロードで高速な移行を実現• Oracle Database 12c
からはSQL*Loader Express Mode
も検討• Optionコマンドを使って、最適なExport/Importを実現
• Advanced Compression
で圧縮して高速化を実現•
セキュリティを高めたいなら、Advanced Security
Appendix
HWM を下げるオペレーション
参考)ダイレクト・ロードと HWM
ハイウォーターマーク( HWM )とは
•
テーブルに割り当てたブロックの中で、いままでデータが挿入されたことのある最後尾のブロック•
ハイウォーターマーク(High Water Mark):高水位標•
テーブルのフルスキャン時にはHWM
まで読み取ります•
メリット:テーブルの大きさに対してデータ量が少ない場合、高速に検索できる•
デメリット: 大量削除などでHWM以前の空きが多い場合、実レコード数に比較して時間がか かるHWM
データ格納済 ブロック
空き ブロック
空き
テーブルのフルスキャン
ブロックHWM
データ格納済 ブロック
空き ブロック
データ削除
空き ブロック
HWM
空き
テーブルのフルスキャン
ブロック参考)ダイレクト・ロードと HWM
ダイレクト・ロードの書込み
• ダイレクト・ロードは HWM の後ろにデータを書き込みます
• ブロック・イメージを作成し直接物理的に書き込む為、使用中の ブロックを利用しません
• ダイレクト・ロードは書込み速度は速いが、利用できない空き領域
( HWM よりも前の空き領域)がでてきます
• データ削除が頻繁に発生する表にダイレクト・ロードを行う際は HWM を下げ るような運用も検討します
HWM
データ格納済 ブロック
空き
ブロック ダイレクト・ロードによる データ書込み開始ブロック
HWM を下げるオペレーション
•
業務的に対象表にアクセスさせない状態で実施1.
論理バックアップユーティリティ(EMP/IMP
) + 元表削除(DROP
)2. CREATE AS SELECT
+TRUNCATE
+INSERT SELECT 3. CREATE AS SELECT
+ 元表削除(DROP
) +RENAME 4. ALTER TABLE <
表名> MOVE TABLESPACE <
表領域名>
)※
索引等のメンテナンスも必須•
オンライン状態で実施1.
オンライン表再定義(Enterprise Edition
機能)2.
オンライン・セグメント縮小(標準機能)HWM を下げるオペレーション
オンライン・セグメント縮小
• オンライン・セグメント縮小
• 業務でテーブルを利用中でもセグメント縮小が可能
• 自動セグメント領域管理( ASSM )のみ利用可能
ALTER TABLE <
表名> ENABLE ROW MOVEMENT;
ALTER TABLE <
表名> SHRINK SPACE[CASCADE];
① ②
データの移動 HWMの移動
③
領域の解放 空き領域
HWM
Appendix
オリジナル exp/imp
エクスポートするオブジェクトを指定します
オリジナル
トリガー: TRIGGERS
オブジェクトの指定
制約、権限、索引、トリガーをエクスポートするか指定します
権限: GRANTS
索引: INDEXES
制約: CONSTRAINTS
COMMAND > EXP scott/tiger TABLES=(wendy.emp) GRANT=n
COMMAND > EXP scott/tiger TABLES=(wendy.emp) TRIGGERS=n COMMAND > EXP scott/tiger TABLES=(wendy.emp) INDEXES=n
COMMAND > EXP scott/tiger TABLES=(wendy.emp) CONSTRAINTS=n
データの一貫性を維持できるよう指定します
オリジナルエクスポート・ユーティリティによって読み込まれたデータのある時点におけ る一貫性を維持し、
exp
コマンドの実行中に変更されないように指定しますCOMMAND > EXP scott/tiger TABLES=(wendy.emp) CONSISTENT=n
CONSISTENT
指定CONSISTENT
注意:
ユーザー
SYS
として接続しているとき、またはAS SYSDBA
を使用しているとき(あるいはその両方)に実行するエクスポートでは、
CONSISTENT=y
はサポートされ ませんデフォルトは
CONSISTENT=n
です2人のユーザーによる更新時のイベントの順序
オリジナル時系列
ユーザ
B
TABLE1
の エクスポート開始TABLE1
、TABLE2
の更新 トランザクションのコミットTABLE1
の エクスポート終了TABLE2
の エクスポート開始CONSISTENT = n
の場合・・・TABLE2
の更新は書き込まれますが、
TABLE1
の更新は書き込まれませんCONSISTENT = y
の場合・・・TABLE1
、TABLE2
の更新ともに書き込まれません•
読み取り一貫性の確保を実現エクスポート開始した時点の整合性が確保できている状態で、
ユーザ
A
ダイレクト・パス・エクスポートの使用を指定します
オリジナル従来型パス・エクスポートに比べて非常に高速なダイレクト・パス・
エクスポートの使用を指定します