95
<Insert Picture Here> 夜な夜な! なにわオラクル塾 Presented By アシスト #48 Oracle Database データロード、Export/Import 1 2016年4月20日

- OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

<Insert Picture Here>

夜な夜な! なにわオラクル塾 Presented By アシスト #48

Oracle Database データロード、Export/Import

1

2016年4月20日

Page 2: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved. 2

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Program Agenda

Oracle Databaseのデータ・ローディング

Export/Import

Oracle Database からのCSVアンロード

知っておきたい便利な使い方

まとめ

3

1

2

3

4

5

Page 4: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved. 4

Oracle Databaseのデータ・ローディング

Page 5: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Oracle Databaseのデータ・ローディング

データ・ロードの種類

• 中間ファイルを利用するもの

• exp/impユーティリティ、Data Pump(expdp/impdp)ユーティリティ

• SQL*Loaderユーティリティ

• 外部表機能

• トランスポータブル表領域機能 (ソース側のデータベースはEnterprise

Edition必須)

• ネットワークを利用するもの

• 分散処理機能(データベース・リンク + SQL)

• Oracle Data Integrator (ETLツール)

• Oracle GoldenGate(リアルタイム・レプリケーション・ツール) (リアルタイムにデータ連携、データ移行、データベース・アップグレード等で利用)

5

Page 6: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Oracle Databaseのデータ・ローディング

主にテキスト・ファイルの内容をロードする

• 外部ファイルのデータをOracle Databaseの表に格納

• ユーティリティ(SQL*Loader)の利用

• Oracle Databaseの機能(外部表)を利用

6

Page 7: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loaderの概要

• Oracle Databaseに付属しているユーティリティのひとつ

• SQL*Loaderの制御ファイルを用意することで、

外部ファイルからの柔軟なローディングをおこないます

7

廃棄ファイル

不良ファイル

ログ・ファイル 制御ファイル

Oracle Database

SQL*Loader

外部ファイル

•外部ファイルの場所 •ファイル形式(固定長、可変長) •データの挿入先となる表 •外部ファイル内のデータと表カラムの紐付け

•SQL*Loader実行ログを格納 (ロード件数、エラー情報など)

•条件等が合わず、ローディング されなかったレコードを格納 •エラーによりローディング されなかったデータを格納

Page 8: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loaderの実行時モード

従来型パス・モード / ダイレクト・パス・モード

• 柔軟性、高速性に応じた実行モードを用意

• 柔軟) 従来型パス・モード

• 内部的にINSERT文を作成しINSERTを実行

• 高速) ダイレクト・パス・モード

• 内部的にINSERTを実行しません

• ブロック(ORACLE_BLOCK=I/Oの単位)イメージを生成し、

物理的に直接書込みます(=ダイレクト・ロード)

• いくつかの制限事項があります

8

表ロック取得

Page 9: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loaderのパラレル処理

パラレル・ダイレクト・パス

• 同一の表もしくはパーティション表の同一パーティションに対して

同時にダイレクト・パス・ロードを実行できます

• あらかじめ準備が必要です • SQL*Loaderの同時実行数分、外部ファイル(データ)を分割

• 外部ファイルにあわせて制御ファイルを作成(もしくは実行時にパラメータ DATA で外部ファイルを指定)

• 実行時にパラメータ PALALLEL=TRUE を指定します

9

Page 10: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loader使用例

制御ファイルの作成

• 外部ファイルのフォーマット、ロード先の表の情報をもとに制御ファイルを作成

10

emp表の定義

制御ファイル:emp.ctl

LOAD DATA

INTO TABLE emp

APPEND

FIELDS TERMINATED BY ','

(

empno,

ename,

hiredate DATE 'YYYYMMDD',

job,

junk FILLER,

deptno

)

SQL> DESCRIBE emp 名前 NULL? 型 --------- -------- ------------ EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

1001,ichiro,20001025,SALESMAN,junk,10

1002,jiro,20011125,ANALYST,junk,20

1003,saburo,20021225,MANAGER,junk,30

外部ファイル:emp.dat ・カンマ区切りの可変長

・日付は8桁の数字列(YYYYMMDD)

・表のカラムすべてと1:1に紐付けできない

・表にロードすべきでないデータ「junk」が存在する

Page 11: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loader使用例

実行例

• 従来型パス・モード

• ダイレクト・パス・モード

• パラレル・ダイレクト・パス・モード

11

% sqlldr scott/xx CONTROL=emp.ctl DATA=emp.dat

% sqlldr scott/xx CONTROL=emp.ctl DATA=emp.dat DIRECT=true

% sqlldr scott/xx CONTROL=emp.ctl DATA=emp1.dat LOG=emp1.log DIRECT=true PARALLEL=true &

% sqlldr scott/xx CONTROL=emp.ctl DATA=emp2.dat LOG=emp2.log DIRECT=true PARALLEL=true &

事前に主キーを無効にしておくか、

パラメータ SKIP_INDEX_MAINTENANCE = true をセットします

Page 12: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loaderのロード方式性能比較

従来型パス・モード vs ダイレクト・パス・モード

• ダイレクト・パス・モードは従来型パス・モードに比べ非常に高速

12

0.19

1.00

0.00 0.20 0.40 0.60 0.80 1.00

ダイレクト・パス・ロード

従来型パス・ロード

emp表(カラム構成が単純)へのロード(10,000,000件)の比較例 (従来型パス・ロードを1としたときの相対時間)

Page 13: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

外部表

外部ファイルにあるデータをデータベース内に表があるかのようにアクセスする

•既存のSQL*Loader機能を補足する機能

•データベースに表がある場合と同様に、外部ソースのデータにアクセス可能 • テキストファイル or バイナリファイル

13

外部ファイル

Oracle Database

表 外部表 INSERT INTO

SELECT

任意のSQL関数を利用した変換処理 ダイレクト・パス・インサート パラレル・ロード 圧縮済ファイルの使用(11g R2以降)

利用例:ステージング表を作成しないデータロード

Page 14: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

テキストファイル or バイナリファイル

アクセス・ドライバの利用イメージ • ORACLE_LOADER

• 外部ファイルはテキスト・データ・ファイルのみ

• 圧縮されたテキスト・データ・ファイルも利用可能

• PREPROCESSOR指定

• ORACLE_DATAPUMP

• 当アクセス・ドライバでUNLOADしたファイルを利用

• 外部ファイルはプラットフォーム非依存のバイナリ・ファイル

• Data Pump(expdp)のdmpファイルは利用できません

• ORACLE_LOADERアクセス・ドライバに比べ高速

• 外部ファイルの圧縮、暗号化が可能

• UNLOADで生成した外部ファイルは、

Oracle Database相互のデータ交換で利用します

14

Page 15: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

外部表の使用例(1)

使用前の準備

•外部表を置くOS上のディレクトリを決め、Oracle Databaseの ディレクトリ・オブジェクトを作成します

•外部表を作成するOracle Database上のユーザに対し、 ディレクトリ・オブジェクトの権限を付与します

15

% sqlplus / as sysdba SQL> CREATE DIRECTORY ext_tbls AS '/app/oracle/admin/orcl/ext_tbls';

SQL> GRANT READ ON DIRECTORY ext_tbls TO scott; SQL> GRANT WRITE ON DIRECTORY ext_tbls TO scott;

Page 16: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

外部表の使用例(2)

ORACLE_LOADERアクセス・ドライバを使用した定義

• 外部ファイル(テキスト・ファイル)の構造をもとに外部表を定義します

16

1001,ichiro,20001025,SALESMAN,junk,10

1002,jiro,20011125,ANALYST,junk,20

1003,saburo,20021225,MANAGER,junk,30

外部ファイル:ext_emp.dat

•カンマ区切りの可変長

•日付は8桁の数字列(YYYYMMDD)

•表のカラムすべてと1:1に紐付けできない

•表にロードすべきでないデータ「junk」が存在する

CREATE TABLE ext_emp (

empno NUMBER(4),

ename VARCHAR2(10),

job VARCHAR2(9),

hiredate DATE,

deptno NUMBER(2)

)ORGANIZATION EXTERNAL (

TYPE ORACLE_LOADER

DEFAULT DIRECTORY ext_tbls

ACCESS PARAMETERS (

RECORDS DELIMITED BY NEWLINE

FIELDS TERMINATED BY ','(

empno CHAR(4),

ename CHAR(10),

hiredate CHAR(8) date_format DATE mask "YYYYMMDD",

job CHAR(9),

junk CHAR(4),

deptno CHAR(2)

)

) LOCATION ('ext_emp.dat')

);

外部ファイルの

定義文

Page 17: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

外部表の使用例(3)

ORACLE_LOADERアクセス・ドライバを使用した実行

• 外部表へのSELECT文の実行

• 実行時のログファイル等の出力

17

SQL> select * from ext_emp; EMPNO ENAME JOB HIREDATE DEPTNO ---------- ---------- --------- -------- ---------- 1001 ichiro SALESMAN 00-10-25 10 1002 jiro ANALYST 01-11-25 20 1003 saburo MANAGER 02-12-25 30

指定ディレクトリに

・ログファイル

・不良ファイル(対象データがあれば) ・廃棄ファイル(対象データがあれば)

が出力されます

Page 18: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

外部表の使用例(4)

ORACLE_DATAPUMPアクセス・ドライバを使用した定義

•外部表の作成の一環として外部ファイル(ダンプファイル)を作成します

•作成済外部ファイルを利用して外部表を作成します

18

CREATE TABLE ext_emp_ul ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY ext_tbls LOCATION ('ext_emp_ul.dmp') ) AS SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM emp ;

CREATE TABLE ext_emp ( empno NUMBER(4), ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY ext_tbls LOCATION ('ext_emp_ul.dmp') ) ; 外部ファイル作成 外部ファイル利用

Page 19: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

外部表の前処理

ORACLE_LOADERアクセス・ドライバのPREPROCESSOR句

• 前処理プログラムを使用することで、アクセス・ドライバがサポートしていない形式のファイルを外部ファイルとして利用できます

• 圧縮された外部ファイルを解凍

• 前処理プログラムを置くディレクトリ・オブジェクトの作成、権限付与を行います

19

CREATE TABLE ext_emp ( empno NUMBER(4), ename VARCHAR2(10), job VARCHAR2(9), hiredate DATE, deptno NUMBER(2) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tbls ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE PREPROCESSOR exec_dir:'zcat' FIELDS TERMINATED BY ','( ... ) ) LOCATION ('ext_emp.dat.gz') );

外部ファイル の定義文

% cd /app/oracle/admin/orcl/exec_dir % ln -s /bin/zcat % sqlplus / as sysdba SQL> CREATE DIRECTORY exec_dir AS '/app/oracle/admin/orcl/exec_dir'; SQL> GRANT READ ON DIRECTORY exec_dir TO scott; SQL> GRANT EXECUTE ON DIRECTORY exec_dir TO scott;

Page 20: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

外部表を利用したデータ・ローディング

• DML文(INSERT / UPDATE / MERGE / DELETE)をそのまま使用します

• アクセス・ドライバ種別も意識せず、透過的に利用できます

• SQL*Loaderと同様、ダイレクト・ロードも可能です

• SQL*Loaderのダイレクト・パスと同様、HWMより後ろのブロックを使用します

• ロード処理をPL/SQLでそのままバッチ処理の一部として取り込む事ができます

20

INSERT INTO emp SELECT * FROM ext_emp; 外部表

INSERT /*+ APPEND */ INTO emp SELECT * FROM ext_emp; 外部表

Page 21: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loaderと外部表の比較

ステージング表の利用

• 業務アプリケーションが利用している表にそのままデータをロードすることは ほとんどありません

• 通常、ステージング表(*1)に一度データをロードした後、エラーチェックや変換処理を行ったあと、業務アプリケーション用の表にロードします

• 外部表を利用すると、多くの場合でステージング表にロードする工程を

省くことができます

21

SQL*Loader利用 (ステージング表使用)

外部表利用 (ステージング表未使用)

(*1):ステージング表とは、データの変換処理やロードの準備の為に設けた一時的な中間表のこと

Page 22: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loaderと外部表の比較

バッファ・キャッシュの利用

• ステージング表として利用している永続表への問い合わせ処理は基本的にOracle Databaseのバッファ・キャッシュを経由します

• 2回目以降のアクセスは高速化できます

• 必要に応じて、既存のキャッシュを破棄する場合があります

• 外部表への問い合わせ処理はOracle Databaseのバッファ・キャッシュを経由しません

• 既存のキャッシュを破棄せずに処理をおこなうことができます

• 複数回のアクセスはキャッシュがないため非効率となる場合があります

→ 複数回アクセスする場合はステージング表にロードします

22

Page 23: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loaderと外部表の比較

外部表のパラレル処理

• 外部表の参照の場合、永続表と同様にパラレル処理が可能 • テーブルの属性としてパラレル度数を設定

• セッション単位で設定(ALTER SESSION)

• ヒントによる設定

• ORACLE_LOADERアクセス・ドライバは制約があるので注意

• 文字の境界が文字列中の任意のバイトで始まり、境界を判断できないマルチバイト・キャラクタ・セット(SJIS、EUC)を含む可変長データはパラレル処理が出来ません(UTF-8は問題なし)

• SQL*Loaderは事前に外部ファイルを分割する必要があるため、手間がかかります

23

ALTER SESSION FORCE PARALLEL QUERY; ALTER SESSION FORCE PARALLEL DDL; INSERT /*+ APPEND */ INTO emp SELECT * FROM ext_emp;

外部表を使用した パラレル処理の例

Page 24: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loaderと外部表の比較

SQL*Loaderと外部表の使い分け

• SQL*Loaderに適した処理

• ネットワークを介したデータのロード

• 複合オブジェクト・リレーショナル・データの任意のロード

• セカンダリ・ファイルを使用したLOBおよびコレクションのロード

• 定常的ではない、一時的なローディング(手早い)

•基本的には外部表を使用したロードをおこないます

• 任意のSQL関数を利用した変換処理

• ダイレクト・パス・インサート

• パラレル・ロード(ファイル分割不要)

• 圧縮済ファイルの使用

24

Page 25: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

外部表のアクセス・ドライバ性能比較

ORACLE_LOADER vs ORACLE_DATAPUMP

• ORACLE_DATAPUMPで利用する外部ファイルは バイナリであり、型変換がほとんど発生しない

• Oracle Database間のデータ連携ではORACLE_DATAPUMPアクセス・ドライバの利用を推奨

25

0.84

1.00

0.00 0.20 0.40 0.60 0.80 1.00

ORACLE_DATAPUMP

ORACLE_LOADER

emp表(カラム構成が単純)へのロード(10,000,000件)の比較例(ORACLE_LOADERアクセス・ドライバを1としたときの相対時間)

Page 26: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

EXPORT/IMPORT

26

Export / Import

Page 27: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Export/Importとは

データベース間のデータ の移動を可能にします

•データベース間のデータ の移動を可能にしています

27

エクスポート

インポート

• 通称、このOSファイルのことをダンプ・ファイルと呼んでいます

このダンプファイルはバイナリ形式であり、エクスポートインポート ユーティリティのみで読み書きがなされます • FTPなどを使用して別サイトに転送、または物理的に移送(テープの場合)できます

エクスポート対象のオブジェクトを抽出し、 OS上のファイルに書き込まれます

ダンプ・ファイルからオブジェクトの定義および表データを読み込みます

Page 28: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Export/Importの用途

論理バックアップの取得

28

Database

Backup Database

論理バックアップは、様々な状況で物理バックアップを補足するために役立ちます ただ、論理バックアップをリストアするためには物理バックアップを再構築して、 Oracleサーバーで使用できるようにする必要があります よって、論理バックアップは、物理バックアップを補うために使用する事を推奨します

Exportユーティリティで論理バックアップを取得します Importユーティリティを使用して、 再インポート可能です

Page 29: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Export/Importの用途

データベースのバージョンアップ

29

ハードウェアが老朽化してきたから、そろそろハードウェアのリプレイスをしないと・・・・

このタイミングでOracle Databaseもバージョンアップしよう!

バージョンアップするとなると、

データを移行する必要があるな・・・

Export/Importでデータを移行しよう!

Page 30: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Export/Importの種類

• オリジナルのExport/Import

• expおよびimpコマンドで起動するオリジナルの エクスポート・ユーティリティおよびインポート・ユーティリティです

• Oracle Database11g では非推奨(原則としてサポートされなくなりました)

• Data Pump

• Oracle Database10gから搭載されたexpdpおよびimpdpコマンドで起動する エクスポート・ユーティリティおよびインポート・ ユーティリティです

• データのロード・アンロードを高速に行うことができます

30

Page 31: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

オリジナルのExport/Import 概要図

31

Import Utility

IMP Oracle Net

Export Utility

EXP

xxx.dmp

Oracle Database

Oracle Net

ダンプ・ファイルはクライアント側に格納されます

Page 32: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Data Pump 概要図

32

Oracle Net

PL/SQL Package Access Driver

Oracle Database

expdp/impdpの実行エンジン

Import Utility

impdp Oracle Net

Export Utility

expdp

xxx.dmp

ダンプ・ファイルはサーバー側に 格納されます

Page 33: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

コマンドからのExport/Importの起動

• 次のコマンドからExport/Importを起動できます

33

表モード ユーザー・モード 表領域モード 全データベース・モード

exp(imp) ユーザ名/パスワード エクスポートするモード ダンプファイル

Ex. exp(imp) scott/tiger owner=scott file=exp.dmp

Page 34: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Export – オリジナル –

モード 機能説明 パラメータ

フル データベース全体のエクスポート FULL=y

ユーザー 指定したユーザー全体のエクスポート OWNER=user[, …]

テーブル 指定したテーブル全体のエクスポート TABLES=table[, …]

テーブルスペース 指定したテーブルスペース全体のエクスポート

TABLESPACES=tablespace[, …]

EXPで利用可能なモード

例1: > exp scott/tiger full=y

例2: > exp scott/tiger file=exp.dmp tables=(emp,dept)

フルモード

テーブルモード

Export Utility

EXP expおよびimpコマンドで起動する オリジナルのエクスポート・ユーティリティ

フル・モードでの注意点 SYSが所有する オブジェクト、およびORDSYS、CTXSYS、 MDSYS およびORDPLUGINSスキーマはエクスポートされません

オリジナル

Page 35: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Import – オリジナル –

Import Utility

IMP impコマンドで起動する オリジナルのインポート・ユーティリティ

COMMAND > imp scott/tiger tables=emp,dept

IMPでは、EXPで使用できたパラメータのほとんどを利用することができます

IMPでパラメータを指定することにより、EXPで作成したダンプファイルからさらに対象データを絞りこんでインポートすることが可能です

ダンプファイルからemp表とdept表のみをインポート

COMMAND > imp scott/tiger owner=scott

ダンプファイルからscottユーザーのオブジェクトをインポート

オリジナル

Page 36: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Data Pump とは

• Oracle Database10gから導入されたユーティリティです

• Data Pumpテクノロジを使用すると、

データおよびメタデータをデータベース間で非常に高速に移動できます

36

利用方法 • expdp/impdpコマンド • Oracle Enterprise Manager • DBMS_Data Pump PL/SQLパッケージ • その他、外部表などのエンジンとして内部利用

Data Pump

Page 37: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Data Pumpのここがすごい!

ダイレクトパスAPIの改善による処理速度向上

• エクスポート:オリジナルのExportに比べて2倍高速

• インポート:オリジナルのImportに比べて15~40倍高速

37

Data Pumpを使用したら 速くなった!

Data Pumpは、大量データを扱う大きなジョブ向き! Data Pumpでは、マスター表を作成するためのオーバー

ヘッドによって小さなジョブは遅くなりますが、大量のデータを高速に処理することは、中・大規模なジョブにとって大きなメリットとなります!

Data Pump

Page 38: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Export/Import – 出力先ディレクトリの指定

• Data Pumpではクライアントではなくサーバーにより書き込みが行われるため、

処理を行うディレクトリ位置が特定されている必要があります

• ダンプファイルを出力するディレクトリに対して、DB上でディレクトリオブジェクトを作成します実行時には、ディレクトリオブジェクトをDIRECTORYパラメータで指定します

• パラメータでディレクトリを指定していない場合、OS環境変数「DATA_PUMP_DIR」、なければ ディレクトリオブジェクト「DATA_PUMP_DIR」が参照されます

38

Data Pump

SQL > CREATE DIRECTORY DPUMP_DIR1 AS ‘/home/oracle/oradata/dpump_dir’;

SQL > GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO scott;

COMMAND > expdp scott/tiger tables=emp,dept directory=dpump_dir1 権限付与

ディレクトリオブジェクト作成

環境変数の設定 COMMAND > set DATA_PUMP_DIR=DPUMP_DIR1; export DATA_PUMP_DIR

COMMAND > expdp scott/tiger schemas=scott

Page 39: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Tips

• Oracle RAC構成でData Pumpまたは外部表を使用するには、ディレクトリ・オブジェクトのパスが

クラスタ・ファイル・システム上に存在するようにする必要があります

• この目的で使用できる共有ストレージが構成内にない場合にも並列処理が必要であれば、CLUSTER=noパラメータを使用して、すべてのワーカー・プロセスを、Data Pumpジョブが開始されたインスタンスのみに置くことができます

• ASMを使用可能にした場合のディレクトリ・オブジェクトの使用方法

SQL> CREATE or REPLACE DIRECTORY dpump_dir as '+DATAFILES/‘;

• ログ・ファイル用の個別のディレクトリ・オブジェクトの作成

SQL> CREATE or REPLACE DIRECTORY dpump_log as

'/homedir/user1/‘;

• 使用例

> expdp hr DIRECTORY=dpump_dir DUMPFILE=hr.dmp

LOGFILE=dpump_log:hr.log

39

Data Pump

Page 40: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Export – Data Pump –

40

オリジナルのexportと同様の操作性をもった エクスポートユーティリティ

モード 機能説明 パラメータ

フル データベース全体のエクスポート FULL=y

スキーマ 指定したスキーマ全体のエクスポート SCHEMAS=schema[, …]

テーブル 指定したテーブル全体のエクスポート TABLES=table[, …]

テーブルスペース 指定したテーブルスペース全体のエクスポート

TABLESPACES=tablespace[, …]

expdpで利用可能なモード

例1: > expdp scott/tiger full=y

例2: > expdp scott/tiger dumpfile=exp.dmp tables=emp,dept

フルモード

テーブルモード

Export Utility

expdp

Data Pump

Page 41: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

フィルタ処理を行います

41

エクスポートの対象から除外するオブジェクトをEXCLUDEパラメータで指定します

COMMAND > expdp scott/tiger exclude=index:¥”LIKE ¥’EMP%¥’¥”

LIKEやINを指定することも可能です ※空白等を区切り文字にしないためにダブルクオーテーションが

必要ですが、OSによってはエスケープ文字が必要となります従っ

て、通常はパラメータを記述したファイルを読み込ませると便利です

※INCLUDEとEXCLUDEパラメータは排他的で、同時に指定できません

COMMAND > expdp scott/tiger include=index

フィルタ処理を行い、エクスポートの対象となるオブジェクトを細かく設定することができます

INCLUDE / EXCLUDE

Data Pump

エクスポートの対象オブジェクトをINCLUDEパラメータで指定します

COMMAND > expdp scott/tiger include=table

Page 42: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

データのフィルタ処理を行います

42

Data Pump

フィルタ処理を行い、エクスポートの対象となるデータを細かく設定することができます

エクスポート対象表のセットから行のサブセットを選択できます

例:職種がSALESMANで、給与が1600より少ない従業員のみをエクスポートする場合

COMMAND > expdp scott/tiger TABLES=emp QUERY=¥"WHERE job=¥'SALESMAN¥' and sal ¥<1600¥"

サンプリングしてソース・データベースからアンロードするデータ行の割合を指定できます

例:SCOTTのEMP表の50%がエクスポートされます

COMMAND > expdp scott/tiger tables=emp SAMPLE=“SCOTT"."EMP":50

QUERY / SAMPLE

Page 43: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ファイルサイズを指定します

43

Data Pump

各ダンプ・ファイルがそのサイズを上限とし、置換変数(%U)を持つテンプレートを指定していてダンプ・ファイルを分割します

サイズが3MBのダンプ・ファイルを設定する

COMMAND > expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_3m.dmp FILESIZE=3MB

3MBでもすべてのエクスポート・データを保持するのに十分でなかった場合、次のエラーが表示され、ジョブは中止されます

ORA-39095: Dump file space has been exhausted: Unable to allocate 217088 bytes

FILESIZE

ファイル指定に置換変数が含まれている場合は、新しいファイルが作成されます

COMMAND > expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_3m%U.dmp FILESIZE=3MB

キロバイト(KB)、メガバイト(MB)、 ギガバイト(GB)を付けて指定する事もできます

Page 44: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

フラッシュバック・モードを指定します

44

指定したSCNもしくは時刻における一貫性を維持したデータの エクスポートが可能です

あるSCNにおける一貫性を維持したデータをエクスポートするために FLASHBACK_SCNパラメータを指定します

COMMAND > expdp scott/tiger flashback_scn=364909 SCN指定

ある時刻における一貫性を維持したデータをエクスポートするために FLASHBACK_TIMEパラメータを指定します

COMMAND > cat parfile.txt

FLASHBACK_TIME=“TO_TIMESTAMP(‘2004/03/20 10:00’,’YYYY/MM/DD HH:MI’)”

COMMAND > expdp scott/tiger parfile=parfile.txt

時刻指定

TO_TIMESTAMP()で時刻を指定 エスケープ文字が必要となるので、 パラメータファイルで指定

FLASHBACK_SCN / FLASHBACK_TIME

Data Pump

Page 45: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

パラレル・エクスポートを指定します

45

Data Pump

エクスポート処理をパラレルで行うことが可能です

並列度をPARALLELパラメータで指定します

出力先ディレクトリをそれぞれ指定することも可能です

COMMAND > expdp scott/tiger parallel=3 dumpfile=dpump_dir1:expdat%U.dmp, dpump_dir2%U.dmp

COMMAND > ls –lR

dpump_dir1:

…….expdat01.dmp

…….expdat02.dmp

dpump_dir2:

…….expdat01.dmp

置き換え変数(%U)を指定しない場合、dumpfileのファイル数はparallelの値に合わせる必要があります指定している場合、

指定されたファイル指定がラウンドロビンに使用されます

並列度の指定

生成されたダンプ ファイルセットの確認

PARALLEL

※要Enterprise Edition

Page 46: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ダンプファイルのサイズの見積もります

46

ESTIMATE

ダンプファイルを生成せず、生成されるダンプファイルのサイズを 見積もることが可能です

見積もりのモードをESTIMATEパラメータで指定します

パラメータ値には次のどちらかを設定します

BLOCKS ・・・ ブロックサイズにオブジェクトのブロック数をかけて見積もります (精度は高くありません)

STATISTICS ・・・ 統計情報を元に見積もります

見積もりのみ出力する場合には、ESTIMATE_ONLY=yを指定します

COMMAND > expdp scott/tiger tables=emp,dept estimate=blocks estimate_only=y

Data Pump

Page 47: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Import – Data Pump –

47

Data Pump

COMMAND > impdp scott/tiger tables=emp,dept

Import Utility

impdp

impdpでは、expdpで使用できたパラメータのほとんどを利用することができます

impdpでパラメータを指定することにより、expdpで作成したダンプファイルからさらに対象データを絞りこんでインポートすることが可能です

ダンプファイルからemp表とdept表のみをインポート

COMMAND > impdp scott/tiger include=index

ダンプファイルから索引のみをインポート

Page 48: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ネットワーク・リンクを使用します

48

Data Pump

NETWORK_LINK

データベース・リンクを使用して、リモートデータベースから直接ローカルデータベースにインポートを行うことができます

参考:エクスポートのネットワーク・リンク指定は、リモートデータベースのデータをローカルにエクスポートする機能ですインポートの場合には直接ローカルデータベースに書き込むので、ダンプファイルを作成しません

COMMAND > impdp scott/tiger tables=emp,dept directory=dpump_dir network_link=scott.jp.oracle.com

接続するリモートデータベースを、NETWORK_LINKパラメータで指定します 指定する値はデータベース・リンク名です

DB LINKの指定

Page 49: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ORACLE DATABASE からのCSVアンロード

49

Oracle Database からのCSVアンロード

Page 50: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

なぜCSVでロード / アンロードしたいのか?

• RDBMS製品間のデータ交換

• Oracle Database から他社RDBMSへ

• 他社RDBMSから Oracle Database へ

• 業務処理(本番環境)としてデータ交換を行なっている

• 検証・開発用にデータをベンダーに提供する

50

Page 51: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

CSVロード / アンロードに関する問題

• CSVはフォーマット・エラーが発生しやすい

• ローディングが行えず、検証/開発が始まらない

• Oracle Database には CSVアンローダーが存在しない

• どのような手法でアンロードするかが性能に大きく影響する

• CSVフォーマット・エラーが発生しやすい

51

Page 52: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

CSVフォーマットとは

• 狭義では CSV = Comma-Separated Values [RFC4180]

• フィールド終端: , レコード終端: CRLF

• 広義では CSV = Character-Separated Values

• フィールド終端とレコード終端が特定の文字

• 狭義のCSVを使いがちだが

ほとんどのソフトウェアが広義のCSVに対応している

• 狭義のCSVはフォーマット・エラーを起こしやすい

52

Page 53: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

フォーマット・エラーの例

データにフィールド終端が含まれている

abc def 1,234

uvw xyz 7,890

53

abc def 1 234

uvw xyz 7 890

abc,def,1,234 uvw,xyz,7,890 2列に分割されてしまっている

Page 54: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

望ましい対応例

終端記号をデータに含まれない文字にする

• 例)フィールド終端: タブ(^I) abc^Idef^I1,234

uvw^Ixyz^I7,890

• タブ区切りテキスト (TSV) は Microsoft Excel 含め、

対応ソフトウェアが多いので利用しやすい

• 注意: ユーザーが自由入力できるアプリケーション

(textarea要素を含むWebアプリケーションなど)では

データにタブが含まれることが少なくない

54

Page 55: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ORACLE_LOADERの場合のよい対応例

終端記号にマイナーなASCII制御文字を使用する

• ORACLE_LOADERドライバー(SQL*Loader含む)は

ASCII制御文字を含むあらゆる文字に対応できる

• 例)フィールド終端: ユニット分離標識(^_) レコード終端: レコード分離標識(^^) abc^_def^_1,234^^uvw^_xyz^_7,890

• マイナーなASCII制御文字がデータに含まれている確率はほぼゼロ

• Vimでは Ctrl + V → Ctrl + ^ でASCII制御文字を入力可能

• 制御ファイルでは DELIMITED BY X'1E' のように16進数指定も可能

55

Page 56: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ORACLE_LOADERの場合の間違いやすい対応例1

エンクロージャでは解決できない

• エンクロージャ " を追加する

"abc","def","1,234"

• データに " は含まれていないか? → 含まれている → エラー

"abc","def","1'23""

• データに " が含まれていないことが確実なのであれば、

フィールド終端を " にするだけで解決

abc"def"1,234

56

Page 57: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ORACLE_LOADERの場合の間違いやすい対応例2

エンクロージャをつけても、レコード終端はデータに含められない

• ORACLE_LOADERドライバー(SQL*Loader含む)は

エンクロージャを使ってもデータにレコード終端を含められない

例)フィールド終端: , レコード終端: 改行 エンクロージャ: “

”abc“,”def“,”12

34“

→ エラー: 2番目の囲み文字列がありません

• 可変レコード形式 (VAR) を使った対応方法もあるが、

レコード終端を改行から別のASCII制御文字に変更したほうが簡単

57

Page 58: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ORACLE_LOADERの場合の間違いやすい対応例3

エスケープ文字は使用できない

• ORACLE_LOADERドライバー(SQL*Loader含む)は

エスケープ文字でフィールド終端とレコード終端を無効化できない

例)フィールド終端: , レコード終端: 改行

abc,def,1¥,234

uvw,xyz,78¥

90

58

abc def 1¥ ,234

uvw xyz 78¥

90

単なる文字として扱われる

Page 59: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ORACLE_LOADERの場合の間違いやすい対応例4

文字列にしても解決できない

• ORACLE_LOADERドライバー(SQL*Loader含む)は

文字 “列” に対応できるが、これで常に解決できるわけではない

• 例)フィールド終端: ,,

abc,,def,,1,234 ← 一見良さそう

uvw,,xy,,,7,890 ← 想定外の区切り

59

uvw xy ,7,890

区切りがずれている

Page 60: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved. 60

知っておきたい便利な使い方

Page 61: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

複数の表をExportし、データのみをImportしたい

61

オリジナル / Data Pump

複数の表をExportし、データのみをImportしたいが、外部キーが多

数あり、整合性制約に違反してしまう・・・

COMMAND> expdp system/manager ; SQL> alter table emp disable constraint emp_no_fk ; ・・・関連するすべての参照整合性約をdisableに設定します COMMAND> impdp system/manager ; SQL> alter table emp enable constraints emp_no_fk ; ・・・関連するすべての参照整合性約をenableに設定します

以下のように、関連する参照整合性制約を disableし、 Import後に参照整合性制約を enable にすると、エラーを解消できます

Page 62: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Exportダンプから一部データを取り出す方法

62

オリジナル / Data Pump

誤って一部データをdeleteし、commit してしまった!!

エクスポートのダンプ・ファイルから取り出したい・・・

COMMAND> impdp system/manager remap_schema=oradirect:dummy SQL> insert into oradirect.emp select * from dummy.emp where emp_id=100; SQL> drop table dummy.emp

SQL> delete from oradirect.emp where emp_id=100;

SQL> commit;

以下のように削除したデータを エクスポートのダンプ・ファイルより取り出せます

注)エクスポートした時点のデータと削除したデータが一致するかは不明であるため、 この例の場合emp_id=100のデータに関して、 エクスポート時と誤って削除した時が 同じであったことを前提と しています

Page 63: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

索引作成文を受け取る方法 -オリジナル-

63

オリジナル

エクスポート・ファイルのCREATE TABLE文もコメントとして含まれます

Option INDEXFILE

デフォルト なし

用途 索引作成文を受け取るファイルを指定します

使用例 imp scott/tiger TABLES=(wendy.emp) INDEXFILE=‘index.txt’

Page 64: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

さらにData PumpではすべてのSQL文を

受け取れます

64

Data Pump

Option SQLFILE

デフォルト なし

用途 インポートが他のパラメータに基づいて実行するすべてのSQL

DDLの書込み先のファイルを指定します

使用例 impdp scott/tiger TABLES=(wendy.emp) SQLFILE=‘index.txt’

注意: パスワードは、SQLファイルに含まれないことに注意してください たとえば、実行したDDLにCONNECT文が含まれている場合、 その文はコメントで置き換えられ、スキーマ名のみが表示されます

例:TEST_TABLE表をインポートする際のSQLFILEを受け取る場合

impdp oradirect/oradirect dumpfile=test_table.dmp tables=test_table sqlfile=sqlfile.txt

Page 65: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQLFILEの一例

65

Data Pump

CREATE TABLE文や CREATE INDEX文を 確認する事ができます

さらにINSERT文も 確認する事ができます

Page 66: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Data Pump 圧縮

データやメタデータを圧縮してダンプファイルにエクスポートできる

• COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}

• NONE...エクスポート操作全体について圧縮が無効

• METADATA_ONLY(default)...全ての“メタデータ”が圧縮形式で

ダンプ・ファイルへ書き込み

(以下の操作はAdvanced Compressionオプションが必要)

• DATA_ONLY...全ての“データ”が圧縮形式でダンプ・ファイルへ書き込み

• ALL...データ、メタデータともに圧縮

• (例)スキーマを指定し、メタデータ、データともに圧縮してダンプ・ファイルscott.dmp

へエクスポート

66

$ expdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=scott.dmp COMPRESSION=ALL SCHEMAS=scott

Data Pump

Advanced Compression Option

Page 67: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Data Pump 暗号化

データやメタデータを暗号化してダンプファイルにエクスポートできる

• ENCRYPTION = {ALL | DATA_ONLY | ENCRYPTED_COLUMNS_ONLY |

METADATA_ONLY | NONE}

• ALL:すべてのデータおよびメタデータについて暗号化が有効

• DATA_ONLY:データのみが暗号化

• ENCRYPTED_COLUMNS_ONLY:暗号化された列のみが暗号化される

• METADATA_ONLY:メタデータのみが暗号化

• NONE:データは暗号化されない

• (例)ダンプ・ファイルでデータのみが暗号化されるエクスポート操作

67

$ expdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=scott_enc.dmp SCHEMAS=scott ENCRYPTION=data_only ENCRYPTION_PASSWORD=tiger

Data Pump

Advanced Security Option

Page 68: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Direct NFS(dNFS)の概要

• dNFSとは

• Oracle Database内部に実装されたNFSクライアント機能

• Oracle Database 11g Release 1から使用可能

• dNFSの特徴

1. OSカーネルのNFSクライアント(kNFS)より高いディスクI/O性能

2. 簡単な手順で機能を有効化

• アプリケーションの書き換えは必要ない

• ストレージの構成や運用に影響はない

• 複数イーサネット・ポートを使用したネットワーク帯域のスケーラビリティの設定が簡単

68

Page 69: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loader及び外部表でのdNFSの使用

• SQL*Loader及び外部表の入力ファイルに対して、dNFSを使用したアクセスが可能

• ファイルサイズに応じて自動でdNFSが利用される

• 1GB以上の入力ファイルに対しては、自動でdNFSを使用したアクセスを実行

• 1GB以下の入力ファイルに対しては、kNFSを使用したアクセスを実行

• 明示的にdNFSによるアクセスを実行したい場合は、DNFS_ENABLEパラメータをENABLEに指定する

• dNFSによる読み取りバッファ数に対して制限をかけることも可能

• DNFS_READBUFFERSパラメータの値を変更する

69

Page 70: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loader/外部表での使用方法

明示的な設定方法 • SQL*Loader での使用方法

1. 明示的にdNFSを使用して入力ファイルにアクセスする場合

2. 明示的にdNFSを使用せずに入力ファイルにアクセスする場合

• 外部表での使用方法

• access パラメータのDNFS_ENABLE/ DNFS_DISABLEで指定する

• 外部表でdNFSが利用されるのは、ORACLE_LOADERを使用した場合

• ORACLE_DATAPUMPでは使用できない

70

$ sqlldr username/password control=control_file DNFS_ENABLE=TRUE

$ sqlldr username/password control=control_file DNFS_ENABLE=FALSE

Page 71: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Data PumpでのLOB記憶域の変更

• Data Pump(impdp)で、インポートするLOBをSecureFilesに変更可能

• Oracle Database 11gまで:従来のリリースまでは、LOBをインポートする時にexpdpをしたLOBの属性のままでしかインポートできなかった

• Oracle Database 12cでは:TRANSFORMパラメータのLOB_STORAGEオプションでLOBの属性を変更可能

• 設定方法

• TRANSFORM=LOB_STORAGE:[SECUREFILE | BASICFILE | DEFAULT | NO_CHANGE]をimpdp時に指定する

• デフォルトはNO_CHANGE(変更しない)

71

Page 72: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

Data PumpでのLOB記憶域の変更

実行例

72

SQL> select table_name,column_name,securefile from user_lobs;

TABLE_NAME COLUMN_NAME SEC

-------------------- -------------------- ---

T1 C1 NO

$ expdp test/test directory=datapump_dir tables=t1

…中略…

ジョブ"TEST"."SYS_EXPORT_TABLE_01"が月 9月 2 17:59:43 2013 elapsed 0 00:00:24で正常に完了しました

$ impdp test/test directory=datapump_dir transform=LOB_STORAGE:SECUREFILE

…中略…

ジョブ"TEST"."SYS_IMPORT_FULL_01"が月 9月 2 17:33:35 2013 elapsed 0 00:00:02で正常に完了しました

SQL> select table_name,column_name,securefile from user_lobs;

TABLE_NAME COLUMN_NAME SEC

-------------------- -------------------- ---

T1 C1 YES

Page 73: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

参考)SQL*LoaderによるLOBのロード

• LOB値を別ファイルから読み込むことができます

73

1 disk.bmp 2 book.bmp

LOAD DATA INFILE test.dat INTO TABLE lob_tab TRUNCATE FIELDS TERMINATED BY WHITESPACE OPTIONALLY ENCLOSED BY '"' ( id integer external, ext_fname FILLER CHAR(10), blob_col lobfile(ext_fname) terminated by EOF )

制御ファイル

データ・ファイル:test.dat

カレント・フォルダに存在すること

Page 74: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

参考)DMLエラー・ロギング

• INSERT、UPDATE、MERGE、DELETE文で利用可能

• これまでは大量の行を対象とした単一のDMLにエラーが発生すると処理の すべてがロールバックされていました

• 上記DMLに「ERROR LOGS」句をつけることで利用します

• エラー・ロギング表(上記のERR$_EMP)は DBMS_ERRLOG パッケージで作成

• 実行DMLとエラーロギング表への書き込みトランザクションは分離

• DML操作に失敗したデータを記録する為のものであり、 すべてのエラーを書き込むものではありません 例) ORA-01653(領域不足)、ORA-01555

74

INSERT INTO emp (empno, ename, dptno, sal) ( SELECT empno, ename, dptno, sal FROM ext_emp ) LOG ERRORS INTO ERR$_EMP ('WEEKLY_BATCH') REJECT LIMIT 50;

Page 75: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

参考)エラー・ロギング表の例

75

INSERT INTO emp (empno,ename,dptno,sal) (SELECT empno,ename,dptno*1000,sal FROM ext_emp WHERE empno = 1) LOG ERRORS INTO ERR$_EMP ('WEEKLY_BATCH') REJECT LIMIT 50;

UPDATE emp SET dptno = dptno*1000 WHERE empno = 20 LOG ERRORS INTO ERR$_EMP ('WEEKLY_BATCH2') REJECT LIMIT 50;

INSERT でエラー発生 UPDATE でエラー発生

対象となるROWID

故意に桁あふれ 故意に桁あふれ

Page 76: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loader Express Mode

外部データの取り込み、データ・ローディングが簡単に

• シンプルなデータを簡単にロード

• 制御ファイルの作成が不要、実行時に必要なファイルはデータのみ (パラメータを指定したカスタマイズも可能)

• 通常のSQL*Loader よりも高速なロード

• 外部表を経由したロード

• 外部表の作成・削除を自動実行

• ダイレクト・インサートによりデータをロード

• ロードを実行せず、SQL文だけの生成も可能

76

$ sqlldr scott/tiger table=EMP

制御ファイルは不要

7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20 7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30 7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30 ……

EMP.dat 表名.dat

• 列データは「,」で区切る

• 行データは「改行」で区切る

Page 77: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loader Expressモード

デフォルト動作

• 外部表を経由したロード

• ロード中に外部表の作成・削除を自動実行

• 外部表を使用して、ロードするデータを参照

• ダイレクト・インサートによりデータをロード

• ロードを実行せず、SQL文だけの生成も可能

• EXTERNAL_TABLE パラメータで制御

• EXECUTE (デフォルト) : 外部表を使用してロード

• NOT_USED : 従来型モードでロード

• GENERATE_ONLY : SQL 文のみ生成

77

Direct Insert

参照

EMP

外部表

$ sqlldr scott/tiger table=EMP

データファイル emp.dat

1

2

3

4

5

5

ロード完了

6

Page 78: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loader Expressモード

デフォルト動作 • データファイルの指定

• カレントディレクトリの「<表名>.dat」を読み込む

• DATA パラメータで任意のファイルの読み込みも可能

• 単一ファイルの読み込み

• 複数ファイルの読み込み

• 複数ファイルのデータを一括ロード

78

$ 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

Page 79: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

SQL*Loader Expressモード

出力ファイル • 実行時に以下のファイルが出力される

• <表名>.log

• SQL*Loader 実行時のログファイル

• SQL*Loader から実行されている SQL 文も参照可能

• <表名>_<実行プロセスのPID>.log_xt

• Database 上での処理実行時のログファイル

• エラー発生時にはそのエラー情報を出力

• <表名>_<PID>.bad

• ロードできなかったデータ

• ロード時にエラーが発生した場合のみ出力される

• DATA パラメータ指定時は「 <最初のDATAファイル名>_<PID>.bad」となる

79

$ 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

Page 80: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

まとめ

• 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

80

Page 81: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved. 81

Appendix HWMを下げるオペレーション

Page 82: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

参考)ダイレクト・ロードとHWM

ハイウォーターマーク(HWM)とは

• テーブルに割り当てたブロックの中で、いままでデータが挿入されたことのある最後尾のブロック

• ハイウォーターマーク(High Water Mark):高水位標

• テーブルのフルスキャン時にはHWMまで読み取ります

• メリット:テーブルの大きさに対してデータ量が少ない場合、高速に検索できる

• デメリット: 大量削除などでHWM以前の空きが多い場合、実レコード数に比較して時間がかかる

82

HWM

データ格納済

ブロック

空き ブロック

HWM

空き ブロック テーブルのフルスキャン

HWM

データ格納済

ブロック

空き ブロック

データ削除 空き ブロック

HWM

空き ブロック テーブルのフルスキャン

Page 83: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

参考)ダイレクト・ロードとHWM

ダイレクト・ロードの書込み

• ダイレクト・ロードはHWMの後ろにデータを書き込みます

• ブロック・イメージを作成し直接物理的に書き込む為、使用中の

ブロックを利用しません

• ダイレクト・ロードは書込み速度は速いが、利用できない空き領域

(HWMよりも前の空き領域)がでてきます

• データ削除が頻繁に発生する表にダイレクト・ロードを行う際はHWMを下げるような運用も検討します

83

HWM

データ格納済

ブロック

空き ブロック

ダイレクト・ロードによる データ書込み開始ブロック

Page 84: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

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. オンライン・セグメント縮小(標準機能)

84

Page 85: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

HWMを下げるオペレーション

オンライン・セグメント縮小

• オンライン・セグメント縮小

• 業務でテーブルを利用中でもセグメント縮小が可能

• 自動セグメント領域管理(ASSM)のみ利用可能

85

ALTER TABLE <表名> ENABLE ROW MOVEMENT; ALTER TABLE <表名> SHRINK SPACE[CASCADE];

① ②

データの移動 HWMの移動

領域の解放 HWM 空き領域

Page 86: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved. 86

Appendix オリジナル exp/imp

Page 87: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

エクスポートするオブジェクトを指定します

87

オリジナル

トリガー: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

デフォルトはすべて y になります

Page 88: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

データの一貫性を維持できるよう指定します

88

オリジナル

エクスポート・ユーティリティによって読み込まれたデータのある時点における一貫性を維持し、expコマンドの実行中に変更されないように指定します

COMMAND > EXP scott/tiger TABLES=(wendy.emp) CONSISTENT=n

CONSISTENT指定

CONSISTENT

注意: ユーザーSYSとして接続しているとき、またはAS SYSDBAを使用しているとき (あるいはその両方)に実行するエクスポートでは、CONSISTENT=yはサポートされません

デフォルトはCONSISTENT=nです

Page 89: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

2人のユーザーによる更新時のイベントの順序

89

オリジナル

時系列

ユーザB

TABLE1の エクスポート開始

TABLE1、TABLE2の更新 トランザクションのコミット

TABLE1の エクスポート終了

TABLE2の エクスポート開始

CONSISTENT = n の場合 ・・・ TABLE2の更新は書き込まれますが、 TABLE1の更新は書き込まれません CONSISTENT = y の場合 ・・・ TABLE1、TABLE2の更新ともに書き込まれません

• 読み取り一貫性の確保を実現 エクスポート開始した時点の整合性が確保できている状態で、 データをエクスポートできます

ユーザA

Page 90: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

ダイレクト・パス・エクスポートの使用を指定します

90

オリジナル

従来型パス・エクスポートに比べて非常に高速なダイレクト・パス・ エクスポートの使用を指定します

COMMAND > EXP scott/tiger TABLES=(wendy.emp) DIRECT=y

ダイレクト・パス・ロードの指定

DIRECT

デフォルトはDIRECT=nです

注意: 次の場合は、ダイレクトエクスポートは使用できません • 対話方式でのエクスポートの起動 • 表領域モード( TRANSPORT_TABLESPACES=Y ) • Queryパラメータの指定

Page 91: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

従来型とダイレクト・パス・ロードの違い

91

オリジナル

Oracle専用の メモリ領域

①エクスポートの実行

③データをディスクからバッファ・キャッシュへ読み込み

④行はクライアント・プロセスにある評価バッファ

に転送します

従来型パス・ロードによるエクスポート

②SELECT文発行

⑤式の評価が終了すると、エクスポート・ファイルに書き出さます

評価バッファ

Page 92: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

従来型とダイレクト・パス・ロードの違い

92

Oracle専用の メモリ領域

ダイレクト・パス・ロードによるエクスポート

評価バッファ ①エクスポートの実行

②データをディスクからバッファ・キャッシュへ読み込み

③評価バッファをバイパスし、エクスポートファイルに書き出されます

評価バッファをバイパスするため、 従来型パス・エクスポートに比べ 非常に高速です

オリジナル

Page 93: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved.

オブジェクト作成エラーの処理方法を指定します

93

オリジナル

IGNORE=yに指定すると、データベース・オブジェクトの作成時に作成エラーが発生しても、このエラーは無視され、エラーはレポートされずに継続します

COMMAND > IMP scott/tiger FILE=exp.dmp IGNORE=y

エラーを無視するよう指定

IGNORE

デフォルトはIGNORE=nですこの場合、オブジェクト作成エラーがログに記録

または表示されて、インポートが停止します

表がすでに存在する場合

IGNORE=yを指定すると、行は既存の表にインポートされます(エラー/メッセージは出力なし)

IGNORE=nを指定すると、エラーがレポートされ、表は行が挿入されないまま

スキップされますまた、表に依存するオブジェクトは作成されません

Page 94: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します
Page 95: - OracleORACLE_LOADER アクセス・ドライバを使用した定義 • 外部ファイル(テキスト・ファイル)の構 造をもとに外部表を定義します

Copyright© 2016, Oracle & K.K.Ashisuto All rights reserved. 95

ご清聴ありがとうございました。

株式会社アシスト 西日本支社