Export/Import

1
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
『第15回 夜もよか~!!オラクル勉強会』
Presented by (株)NSソリューションズ西日本
今さら聞けない、データロード、
Export/Import
日本オラクル株式会社
2014年 3月19日
2
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです
また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことは
できません以下の事項は、マテリアルやコード、機能を提供することをコミットメント(
確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい
オラクル製品に関して記載されている機能の開発、リリースおよび時期については
、弊社の裁量により決定されます
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です文
中の社名、商品名等は各社の商標または登録商標である場合があります
3
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Program Agenda
 Oracle Databaseのデータ・ローディング
 Export/Import
 知っておきたい便利な使い方
 まとめ
 Appindex
– HWMを下げるオペレーション
– Oracle Database からのCSVアンロード
4
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Oracle Databaseのデータ・
ローディング
5
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Oracle Databaseのデータ・ローディング
データ・ロードの種類
 中間ファイルを利用するもの
– exp/impユーティリティ、DataPump(expdp/impdp)ユーティリティ
– SQL*Loaderユーティリティ
– 外部表機能
– トランスポータブル表領域機能 (ソース側のデータベースはEnterprise Edition必須)
 ネットワークを利用するもの
– 分散処理機能(データベース・リンク + SQL)
– Oracle Data Integrator (ETLツール)
– Oracle GoldenGate(リアルタイム・レプリケーション・ツール)
(リアルタイムにデータ連携、データ移行、データベース・アップグレード等で利用)
6
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Oracle Databaseのデータ・ローディング
主にテキスト・ファイルを利用するもの
 外部ファイルのデータをOracle Databaseの表に格納
– ユーティリティ(SQL*Loader)の利用
– Oracle Databaseの機能(外部表)を利用
7
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SQL*Loaderの概要
 Oracle Databaseに付属しているユーティリティのひとつ
 SQL*Loaderの制御ファイルを用意することで、
外部ファイルからの柔軟なローディングをおこないます
SQL*Loader
Oracle Database
表
外部ファイル
制御ファイル
•外部ファイルの場所
•ファイル形式(固定長、可変長)
•データの挿入先となる表
•外部ファイル内のデータと表カラムの紐付け
8
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
ログ・ファイル
廃棄ファイル
不良ファイル
•SQL*Loader実行ログを格納
(ロード件数、エラー情報など)
•条件等が合わず、ローディング
されなかったレコードを格納
•エラーによりローディング
されなかったデータを格納
SQL*Loaderの実行時モード
従来型パス・モード / ダイレクト・パス・モード
 柔軟性、高速性に応じた実行モードを用意
– 柔軟) 従来型パス・モード
 内部的にINSERT文を作成しINSERTを実行
– 高速) ダイレクト・パス・モード
 内部的にINSERTを実行しません
 ブロック(ORACLE_BLOCK=I/Oの単位)イメージを生成し、
物理的に直接書込みます(=ダイレクト・ロード)
 いくつかの制限事項があります
9
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
表ロック取得
SQL*Loaderのパラレル処理
パラレル・ダイレクト・パス
 同一の表もしくはパーティション表の同一パーティションに対して
同時にダイレクト・パス・ロードを実行できます
– あらかじめ準備が必要です
 SQL*Loaderの同時実行数分、外部ファイル(データ)を分割
 外部ファイルにあわせて制御ファイルを作成(もしくは実行時にパラメータ DATA で外部ファイルを指定)
– 実行時にパラメータ PALALLEL=TRUE を指定します
10
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SQL*Loader使用例
制御ファイルの作成
 外部ファイルのフォーマット、ロード先の表の情報をもとに制御ファイルを作成
外部ファイル:emp.dat
1001,ichiro,20001025,SALESMAN,junk,10
1002,jiro,20011125,ANALYST,junk,20
1003,saburo,20021225,MANAGER,junk,30
SQL> DESCRIBE emp
名前
NULL?
--------- -------EMPNO
NOT NULL
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
11
emp表の定義
型
-----------NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)
NUMBER(4)
DATE
NUMBER(7,2)
NUMBER(7,2)
NUMBER(2)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
•カンマ区切りの可変長
•日付は8桁の数字列(YYYYMMDD)
•表のカラムすべてと1:1に紐付けできない
•表にロードすべきでないデータ「junk」が存在する
制御ファイル:emp.ctl
LOAD DATA
INTO TABLE emp
APPEND
FIELDS TERMINATED BY ','
(
empno,
ename,
hiredate DATE 'YYYYMMDD',
job,
junk FILLER,
deptno
)
SQL*Loader使用例
実行例
 従来型パス・モード
% 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 をセットします
12
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SQL*Loaderのロード方式性能比較
従来型パス・モード vs ダイレクト・パス・モード
 ダイレクト・パス・モードは従来型パス・モードに比べ非常に高速
従来型パス・ロード
1.00
ダイレクト・パス・ロード
0.19
0.00
0.20
0.40
0.60
0.80
emp表(カラム構成が単純)へのロード(10,000,000件)の比較例
(従来型パス・ロードを1としたときの相対時間)
13
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
1.00
外部表の概要
 Oracle Database内に存在していない表
 アクセス・ドライバを通じてOracle Databaseから読取り専用のアクセスをおこないます
– ORACLE_LOADER
– ORACLE_DATAPUMP
 外部表へのDML(INSERT/UPDATE/DELETE)操作、
索引付けはできませんが、ビューやシノニムを作成できます
 外部表へのアクセスはバッファ・キャッシュを経由しません(後述)
14
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
外部表のアクセス・ドライバ
それぞれのアクセス・ドライバの利用イメージ
 ORACLE_LOADER
 ORACLE_DATAPUMP
– Oracle Database相互で利用
15
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
外部表のアクセス・ドライバ
ORACLE_LOADERとORACLE_DATAPUMP
 ORACLE_LOADER
– 外部ファイルはテキスト・データ・ファイルのみ
– 圧縮されたテキスト・データ・ファイルも利用可能
 PREPROCESSOR指定
 ORACLE_DATAPUMP
– 当アクセス・ドライバでUNLOADしたファイルを利用
 外部ファイルはプラットフォーム非依存のバイナリ・ファイル
 DATAPUMP(expdp)のdmpファイルは利用できません
– UNLOADで生成した外部ファイルは、Oracle Database相互のデータ交換で利用します
– 当アクセス・ドライバの機能で外部ファイルの圧縮、暗号化が可能
– ORACLE_LOADERアクセス・ドライバに比べ高速
16
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
外部表の使用例
使用前の準備
 外部表を置くOS上のディレクトリを決め、Oracle Databaseの
ディレクトリ・オブジェクトを作成します
% sqlplus / as sysdba
SQL> CREATE DIRECTORY ext_tbls AS '/app/oracle/admin/orcl/ext_tbls';
 外部表を作成するOracle Database上のユーザに対し、
ディレクトリ・オブジェクトの権限を付与します
SQL> GRANT READ ON DIRECTORY ext_tbls TO scott;
SQL> GRANT WRITE ON DIRECTORY ext_tbls TO scott;
17
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
外部表の使用例
ORACLE_LOADERアクセス・ドライバを使用した定義
 外部ファイル(テキスト・ファイル)の
構造をもとに外部表を定義します
外部ファイル:ext_emp.dat
1001,ichiro,20001025,SALESMAN,junk,10
1002,jiro,20011125,ANALYST,junk,20
1003,saburo,20021225,MANAGER,junk,30
•カンマ区切りの可変長
•日付は8桁の数字列(YYYYMMDD)
•表のカラムすべてと1:1に紐付けできない
•表にロードすべきでないデータ「junk」が存在する
18
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
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')
);
外部表の使用例
ORACLE_LOADERアクセス・ドライバを使用した実行
 外部表へのSELECT文の実行
SQL> select * from ext_emp;
EMPNO ENAME
JOB
---------- ---------- --------1001 ichiro
SALESMAN
1002 jiro
ANALYST
1003 saburo
MANAGER
HIREDATE
DEPTNO
-------- ---------00-10-25
10
01-11-25
20
02-12-25
30
 実行時のログファイル等の出力
指定ディレクトリに
・ログファイル
・不良ファイル(対象データがあれば)
・廃棄ファイル(対象データがあれば)
が出力されます
19
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
外部表の使用例
ORACLE_DATAPUMPアクセス・ドライバを使用した定義
 外部表の作成の一環として外部ファイル(ダンプファイル)を作成します
 作成済外部ファイルを利用して外部表を作成します
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
;
外部ファイル作成
20
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
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')
)
;
外部ファイル利用
外部表の前処理
ORACLE_LOADERアクセス・ドライバのPREPROCESSOR句
 前処理プログラムを使用することで、アクセス・
ドライバがサポートしていない形式のファイル
を外部ファイルとして利用できます
– 圧縮された外部ファイルを解凍
 前処理プログラムを置くディレクトリ・オブジェク
トの作成、権限付与を行います
% 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;
21
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
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')
);
外部表を利用したデータ・ローディング
 DML文(INSERT / UPDATE / MERGE / DELETE)をそのまま使用します
– アクセス・ドライバ種別も意識せず、透過的に利用できます
INSERT INTO emp SELECT * FROM ext_emp;
外部表
 SQL*Loaderと同様、ダイレクト・ロードも可能です
– SQL*Loaderのダイレクト・パスと同様、HWMより後ろのブロックを使用します
INSERT /*+ APPEND */ INTO emp SELECT * FROM ext_emp;
外部表
– ロード処理をPL/SQLでそのままバッチ処理の一部として取り込む事ができます
22
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
参考)DMLエラー・ロギング
 INSERT、UPDATE、MERGE、DELETE文で利用可能
– これまでは大量の行を対象とした単一のDMLにエラーが発生すると処理の
すべてがロールバックされていました
– 上記DMLに「LOG ERRORS」句をつけることで利用します
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;
 エラー・ロギング表(上記のERR$_EMP)は DBMS_ERRLOG パッケージで作成
– 実行DMLとエラーロギング表への書き込みトランザクションは分離
– DML操作に失敗したデータを記録する為のものであり、
すべてのエラーを書き込むものではありません
例) ORA-01653(領域不足)、ORA-01555
23
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
参考)エラー・ロギング表の例
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;
INSERT でエラー発生
24
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
UPDATE emp
SET dptno = dptno*1000
WHERE empno = 20
故意に桁あふれ
LOG ERRORS INTO ERR$_EMP
('WEEKLY_BATCH2') REJECT LIMIT 50;
対象となるROWID
UPDATE でエラー発生
外部表のアクセス・ドライバ性能比較
ORACLE_LOADER vs ORACLE_DATAPUMP
 ORACLE_DATAPUMPで利用する外部ファイルは
バイナリであり、型変換がほとんど発生しない
– Oracle Database間のデータ連携ではORACLE_DATAPUMP
アクセス・ドライバの利用を推奨
ORACLE_LOADER
1.00
ORACLE_DATAPUMP
0.84
0.00
0.20
0.40
0.60
emp表(カラム構成が単純)へのロード(10,000,000件)の比較例
(ORACLE_LOADERアクセス・ドライバを1としたときの相対時間)
25
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
0.80
1.00
SQL*Loaderと外部表の比較
ステージング表の利用
 業務アプリケーションが利用している表にそのままデータをロードすることは
ほとんどありません
– 通常、ステージング表(*1)に一度データをロードした後、エラーチェックや変換処理を行ったあと、
業務アプリケーション用の表にロードします
 外部表を利用すると、多くの場合でステージング表にロードする工程を省くことがで
きます
SQL*Loader利用
(ステージング表使用)
外部表利用
(ステージング表未使用)
(*1):ステージング表とは、データの変換処理やロードの準備の為に設けた一時的な中間表のこと
26
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SQL*Loaderと外部表の比較
バッファ・キャッシュの利用
 ステージング表として利用している永続表への問い合わせ処理は基本的に
Oracle Databaseのバッファ・キャッシュを経由します
–
2回目以降のアクセスは高速化できます
–
必要に応じて、既存のキャッシュを破棄する場合があります
 外部表への問い合わせ処理はOracle Databaseのバッファ・キャッシュを経由しません
–
既存のキャッシュを破棄せずに処理をおこなうことができます
–
複数回のアクセスはキャッシュがないため非効率となる場合があります
→ 複数回アクセスする場合はステージング表にロードします
27
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SQL*Loaderと外部表の比較
外部表のパラレル処理
 外部表の参照の場合、永続表と同様にパラレル処理が可能
–
テーブルの属性としてパラレル度数を設定
–
セッション単位で設定(ALTER SESSION)
–
ヒントによる設定
ALTER SESSION FORCE PARALLEL QUERY;
ALTER SESSION FORCE PARALLEL DDL;
INSERT /*+ APPEND */ INTO emp SELECT * FROM ext_emp;
外部表を使用した
パラレル処理の例
 ORACLE_LOADERアクセス・ドライバは制約があるので注意
– 文字の境界が文字列中の任意のバイトで始まり、境界を判断できないマルチバイト・キャラクタ・セット
(SJIS、EUC)を含む可変長データはパラレル処理が出来ません(UTF-8は問題なし)
 SQL*Loaderは事前に外部ファイルを分割する必要があるため、手間がかかります
28
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SQL*Loaderと外部表の比較
SQL*Loaderと外部表の使い分け
 SQL*Loaderに適した処理
– ネットワークを介したデータのロード
– 複合オブジェクト・リレーショナル・データの任意のロード
– セカンダリ・ファイルを使用したLOBおよびコレクションのロード
– 定常的ではない、一時的なローディング(手早い)
 基本的には外部表を使用したロードをおこないます
– 任意のSQL関数を利用した変換処理
– ダイレクト・パス・インサート
– パラレル・ロード(ファイル分割不要)
– 圧縮済ファイルの使用
29
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
参考)SQL*LoaderによるLOBのロード
 LOB値を別ファイルから読み込むことができます
制御ファイル
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
1 disk.bmp
2 book.bmp
カレント・フォルダに存在すること
30
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Export/Import
31
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Export/Importとは
データベース間のデータ の移動を可能にします
 データベース間のデータ の移動を可能にしています
エクスポート
エクスポート対象のオブジェクトを抽出し、
OS上のファイルに書き込まれます
• 通称、このOSファイルのことをダンプ・ファイルと呼んでいます
このダンプファイルはバイナリ形式であり、エクスポートインポート
ユーティリティのみで読み書きがなされます
• FTPを使用して別サイトに転送、または物理的に移送
(テープの場合)できます
インポート
32
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
ダンプ・ファイルからオブジェクトの定義および
表データを読み込みます
Export/Importの用途
論理バックアップの取得
Exportユーティリティで論理バックアップを
取得します
Importユーティリティを使用して、
再インポート可能です
Backup
Database
Database
論理バックアップは、様々な状況で物理バックアップを補足するために役立ちます
ただ、論理バックアップをリストアするためには物理バックアップを再構築して、
Oracleサーバーで使用できるようにする必要があります
よって、論理バックアップは、物理バックアップを補うために使用する事を推奨します
33
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Export/Importの用途
データベースのバージョンアップ
ハードウェアが老朽化してきたから、そろそろハー
ドウェアのリプレイスをしないと・・・・
このタイミングでOracle Databaseも
バージョンアップしよう!
バージョンアップするとなると、データ
を移行する必要があるな・・・
Export/Importでデータを移行しよう!
34
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Export/Importの種類
 オリジナルのExport/Import
– expおよびimpコマンドで起動するオリジナルの
エクスポート・ユーティリティおよびインポート・ユーティリティです
– Oracle Database11g では非推奨(原則としてサポートされなくなりました)
 Data Pump
– Oracle Database10gから搭載されたexpdpおよびimpdpコマンドで起動する
エクスポート・ユーティリティおよびインポート・ ユーティリティです
– データのロード・アンロードを高速に行うことができます
35
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナルのExport/Import 概要図
Export Utility
Import Utility
EXP
IMP
Oracle Net
Oracle Net
Oracle Database
36
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
xxx.dmp
ダンプ・ファイルは
クライアント側に
格納されます
Data Pump 概要図
Export Utility
Import Utility
EXPDP
IMPDP
Oracle Net
ダンプ・ファイルは
サーバー側に
格納されます
Oracle Net
Oracle Database
PL/SQL Package
EXPDP/IMPDP
の実行エンジン
37
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Access Driver
xxx.dmp
オリジナルとData Pumpの違い
 オリジナルのExport/Importは、基本的にユーティリティ側で実行されるが、
Data Pumpはデータベース・サーバー側で実行されます
サーバ側で実行するData Pumpのメリット
パラレル化が可能
APIにより呼び出しが可能
ジョブ管理・状況監視が可能
停止・再開が可能
38
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Export/Importの起動
 次のいずれかの方法を使用して、Export/Importの起動および
パラメータの指定ができます
– コマンドライン
– 対話方式モード(Oracle Enterprise Manager)
39
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Export/Importを使用する前に
 catexp.sqlまたはcatalog.sqlスクリプトの実行
– スクリプトを実行すると、データベースはエクスポートおよび インポート操作に備えて調整されます
 Export/Importを実行するデータベース上のSYSユーザーで1回
実行しておく必要があります
– 通常はデータベースの作成時にcatalog.sqlが実行されているので、改めて実行する必要はありません
データ・ディレクトリへの必要なエクスポート・ビューおよびインポート・ビューの作成
 EXP_FULL_DATABASEロールの作成
 EXP_FULL_DATABASEおよびIMP_FULL_DATABASEロールへのすべての必要な権限の割当て
 DBAロールへのEXP_FULL_DATABASEおよびIMP_FULL_DATABASEの割当て
 インストールされているcatexp.sqlのバージョンの記録

40
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Export/Importを使用する前に
 十分なディスク領域の確認
– 実際にExport/Importを実行するOS上のユーザーが、エクスポート・ファイルの
書き込み先のディスク上またはテープ上に、十分な記憶領域があることを
確認してください
 アクセス権限の確認
– Export/Importを実行する際に接続するデータベース・ユーザには、
データベースに対するCREATE SESSION権限が必要です
また、別のユーザーが所有する表をエクスポートする場合は、
EXP_FULL_ DATABASEロールを付与されている必要があります
41
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
コマンドからのExport/Importの起動
 次のコマンドからExport/Importを起動できます
exp(imp) ユーザ名/パスワード エクスポートするモード ダンプファイル
Ex. exp(imp) scott/tiger owner=oracle file=exp.dmp
表モード
ユーザー・モード
表領域モード
全データベース・モード

42
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル
Export – オリジナル –
Export Utility
EXP
expおよびimpコマンドで起動する
オリジナルのエクスポート・ユーティリティ
EXPで利用可能なモード
モード
機能説明
パラメータ
フル
データベース全体のエクスポート
FULL=y
ユーザー
指定したユーザー全体のエクスポート
OWNER=user[, …]
テーブル
指定したテーブル全体のエクスポート
TABLES=table[, …]
テーブルスペース
指定したテーブルスペース全体のエクスポート
TABLESPACES=tablespace[, …]
フル・モードでの注意点
SYSが所有する オブジェクト、およびORDSYS、CTXSYS、 MDSYS およびORDPLUGINSスキーマは
エクスポートされません
43
例1: > exp scott/tiger full=y
フルモード
例2: > exp scott/tiger file=exp.dmp tables=(emp,dept)
テーブルモード
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル
エクスポートするオブジェクトを指定します
オブジェクトの指定
制約、権限、索引、トリガーをエクスポートするか指定します

制約:CONSTRAINTS
COMMAND > EXP scott/tiger TABLES=(wendy.emp) CONSTRAINTS=n

権限:GRANTS
COMMAND > EXP scott/tiger TABLES=(wendy.emp) GRANT=n

索引:INDEXES
COMMAND > EXP scott/tiger TABLES=(wendy.emp) INDEXES=n

トリガー:TRIGGERS
COMMAND > EXP scott/tiger TABLES=(wendy.emp) TRIGGERS=n
デフォルトはすべて y になります
44
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル
データの一貫性を維持できるよう指定します
CONSISTENT
エクスポート・ユーティリティによって読み込まれたデータのある時点におけ
る一貫性を維持し、expコマンドの実行中に変更されないように指定します
CONSISTENT指定
COMMAND > EXP scott/tiger TABLES=(wendy.emp) CONSISTENT=y
デフォルトはCONSISTENT=nです
注意:
ユーザーSYSとして接続しているとき、またはAS SYSDBAを使用しているとき
(あるいはその両方)に実行するエクスポートでは、CONSISTENT=yはサポートされません
45
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル
2人のユーザーによる更新時のイベントの順序
TABLE1の
エクスポート開始
時系列
TABLE1の
エクスポート終了
TABLE2の
エクスポート開始
ユーザA
TABLE1、TABLE2の更新
トランザクションのコミット
ユーザB
CONSISTENT = n の場合 ・・・ TABLE2の更新は書き込まれますが、
TABLE1の更新は書き込まれません
CONSISTENT = y の場合 ・・・ TABLE1、TABLE2の更新ともに書き込まれません
• 読み取り一貫性の確保を実現
エクスポート開始した時点の整合性が確保できている状態で、
データをエクスポートできます
46
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル
ダイレクト・パス・エクスポートの使用を指定します
DIRECT
従来型パス・エクスポートに比べて非常に高速なダイレクト・パス・
エクスポートの使用を指定します
ダイレクト・パス・ロードの指定
COMMAND > EXP scott/tiger TABLES=(wendy.emp) DIRECT=y
デフォルトはDIRECT=nです
注意:
次の場合は、ダイレクトエクスポートは使用できません
• 対話方式でのエクスポートの起動
• 表領域モード( TRANSPORT_TABLESPACES=Y )
• Queryパラメータの指定
47
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル
従来型とダイレクト・パス・ロードの違い
従来型パス・ロードによるエクスポート
①エクスポートの実行
評価バッファ
⑤式の評価が終了する
と、エクスポート・ファイ
ルに書き出さます
②SELECT文発行
③データをディスクからバッファ・
キャッシュへ読み込み
48
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Oracle専用の
メモリ領域
④行はクライアント・プロセ
スにある評価バッファに転送
します
オリジナル
従来型とダイレクト・パス・ロードの違い
ダイレクト・パス・ロードによるエクスポート
①エクスポートの実行
評価バッファ
③評価バッファをバイパス
し、エクスポートファイルに
書き出されます
②データをディスクからバッファ・
キャッシュへ読み込み
Oracle専用の
メモリ領域
評価バッファをバイパスするため、
従来型パス・エクスポートに比べ
非常に高速です
49
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル
Import – オリジナル –
Import Utility
IMP
impコマンドで起動する
オリジナルのインポート・ユーティリティ
IMPでは、EXPで使用できたパラメータのほとんどを利用することができます
IMPでパラメータを指定することにより、EXPで作成したダンプファイルからさらに対象
データを絞りこんでインポートすることが可能です
COMMAND > imp scott/tiger tables=emp,dept
ダンプファイルからemp表と
dept表のみをインポート
COMMAND > imp scott/tiger owner=wendy
ダンプファイルからwendyユーザー
のオブジェクトをインポート
50
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル
オブジェクト作成エラーの処理方法を指定します
IGNORE
IGNORE=yに指定すると、データベース・オブジェクトの作成時に作成エラー
が発生しても、このエラーは無視され、エラーはレポートされずに継続します
エラーを無視するよう指定
COMMAND > IMP scott/tiger FILE=exp.dmp IGNORE=y
デフォルトはIGNORE=nです この場合、オブジェクト作成エラーがログに記録
または表示されて、インポートが停止します
表がすでに存在する場合
IGNORE=yを指定すると、行は既存の表にインポートされます(エラー/メッセージは出力なし)
IGNORE=nを指定すると、エラーがレポートされ、表は行が挿入されないまま
スキップされますまた、表に依存するオブジェクトは作成されません
51
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump とは
 Oracle Database10gから導入されたユーティリティです
 Oracle Data Pumpテクノロジを使用すると、
データおよびメタデータをデータベース間で非常に高速に移動できます
利用方法
•
•
•
•
52
expdp/impdpコマンド
Oracle Enterprise Manager
DBMS_DATAPUMP PL/SQLパッケージ
その他、外部表などのエンジンとして内部利用
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pumpのここがすごい!
ダイレクトパスAPIの改善による処理速度向上
 エクスポート:オリジナルのExportに比べて2倍高速
 インポート:オリジナルのImportに比べて15~40倍高速
Oracle Data Pumpを使用
したら速くなった!
Data Pumpは、大量データを扱う大きなジョブ向き!
Data Pumpでは、マスター表を作成するためのオーバーヘッド
によって小さなジョブは遅くなりますが、大量のデータを高速に
処理することは、中・大規模なジョブにとって大きなメリットとなり
ます!
53
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
パフォーマンス
検証環境
検証内容
Sun Enterprise 3000
索引の張られていないテーブル(53partitions21,000,000rows)を用
いてData Pumpを使ったエクスポート・インポートと従来のものとを
比較する作成されるダンプファイルは1.15GB
400MHz * 4CPU
4GB Memory
検証結果
従来型エクスポートと Data Pump エクスポートの処理時間比較
秒
従来型インポートと Data Pump インポートの処理時間比較
秒
800
800
750.418
600
600
443.483
400
400
200
49.664
51.269
74.708
55.193
0
0
exp
expdp
expdp(2p)
expdp(4p)
従来エクスポートに比べ、Data Pump は2パラレルで
約9分の1の処理時間!!
54
136.457
200
80.005
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
imp
impdp
impdp(2p)
impdp(4p)
従来インポートに比べ、Data Pump は4パラレルで約
13分の1の処理時間!!
Data Pump
Export/Import – 出力先ディレクトリの指定
 Data Pumpではクライアントではなくサーバーにより書き込みが行われるため、
処理を行うディレクトリ位置が特定されている必要があります
 ダンプファイルを出力するディレクトリに対して、DB上でディレクトリオブジェクトを作成します実
行時には、ディレクトリオブジェクトをDIRECTORYパラメータで指定します
ディレクトリオブジェクト作成
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
権限付与
 パラメータでディレクトリを指定していない場合、OS環境変数「DATA_PUMP_DIR」、なければ
ディレクトリオブジェクト「DATA_PUMP_DIR」が参照されます
COMMAND > set DATA_PUMP_DIR=DPUMP_DIR1; export DATA_PUMP_DIR
COMMAND > expdp scott/tiger schemas=scott
55
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
環境変数の設定
Data Pump
Export – Data Pump –
Export Utility
EXPDP
オリジナルのexportと同様の操作性をもった
エクスポートユーティリティ
EXPDPで利用可能なモード
モード
機能説明
パラメータ
フル
データベース全体のエクスポート
FULL=y
スキーマ
指定したスキーマ全体のエクスポート
SCHEMAS=schema[, …]
テーブル
指定したテーブル全体のエクスポート
TABLES=table[, …]
テーブルスペース
指定したテーブルスペース全体のエクスポート
TABLESPACES=tablespace[, …]
例1: > expdp scott/tiger full=y フルモード
例2: > expdp scott/tiger dumpfile=exp.dmp tables=emp,dept
56
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
テーブルモード
data pumpによるデータの移動方法
 データ・ファイル・コピーを使用したデータ移動(Transportable Tablespace)
 ダイレクト・パスを使用したデータ移動
 外部表を使用したデータ移動
 従来型パスを使用したデータ移動
 ネットワーク・リンク・インポートを使用したデータ移動
– NETWORK_LINKインポート・パラメータ
 注意:データ・ポンプでは、無効な一意索引を持つ表は、ロードされません
データを表にロードするには、その索引を削除するかまたは再度有効にする必要があります
57
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
フィルタ処理を行います
INCLUDE / EXCLUDE
フィルタ処理を行い、エクスポートの対象となるオブジェクトを細かく設定する
ことができます
エクスポートの対象オブジェクトをINCLUDEパラメータで指定します
COMMAND > expdp scott/tiger include=table
COMMAND > expdp scott/tiger include=index
エクスポートの対象から除外するオブジェクトをEXCLUDEパラメータで指定します
COMMAND > expdp scott/tiger exclude=index:\”LIKE \’EMP%\’\”
※空白等を区切り文字にしないためにダブルクオーテーションが必要です
が、OSによってはエスケープ文字が必要となります従って、通常はパラメー
タを記述したファイルを読み込ませると便利です
※INCLUDEとEXCLUDEパラメータは排他的で、同時に指定できません
58
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
LIKEやINを指定するこ
とも可能です
Data Pump
データのフィルタ処理を行います
QUERY / SAMPLE
フィルタ処理を行い、エクスポートの対象となるデータを細かく設定することが
できます
エクスポート対象表のセットから行のサブセットを選択できます
例:職種が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
59
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
ファイルサイズを指定します
FILESIZE
各ダンプ・ファイルがそのサイズを上限とし、置換変数(%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
ファイル指定に置換変数が含まれている場合は、新しいファイルが作成されます
COMMAND > expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_3m%U.dmp FILESIZE=3MB
キロバイト(KB)、メガバイト(MB)、ギガバイト
(GB)を付けて指定する事もできます
60
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
フラッシュバック・モードを指定します
FLASHBACK_SCN / FLASHBACK_TIME
指定した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()で時刻を指定
エスケープ文字が必要となるので、パラ
メータファイルで指定
あるSCNにおける一貫性を維持したデータをエクスポートするために
FLASHBACK_SCNパラメータを指定します
COMMAND > expdp scott/tiger flashback_scn=364909
61
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SCN指定
Data Pump
パラレル・エクスポートを指定します
※要Enterprise Edition
PARALLEL
エクスポート処理をパラレルで行うことが可能です
並列度をPARALLELパラメータで指定します
出力先ディレクトリをそれぞれ指定することも可能です
並列度の指定
COMMAND > expdp scott/tiger parallel=3 dumpfile=dpump_dir1:expdat%U.dmp,
dpump_dir2%U.dmp
COMMAND > ls –lR
dpump_dir1:
生成されたダンプ
置き換え変数(%U)を指定しない場合、
ファイルセットの確認
dumpfileのファイル数はparallelの値に
…….expdat01.dmp
合わせる必要があります指定している
…….expdat02.dmp
場合、指定されたファイル指定がラウン
dpump_dir2:
ドロビンに使用されます
…….expdat01.dmp
62
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
ダンプファイルのサイズの見積もります
ESTIMATE
ダンプファイルを生成せず、生成されるダンプファイルのサイズを
見積もることが可能です
見積もりのモードをESTIMATEパラメータで指定します
パラメータ値には次のどちらかを設定します
BLOCKS ・・・ ブロックサイズにオブジェクトのブロック数をかけて見積もります
(精度は高くありません)
STATISTICS ・・・ 統計情報を元に見積もります
見積もりのみ出力する場合には、ESTIMATE_ONLY=yを指定します
COMMAND > expdp scott/tiger tables=emp,dept estimate=blocks estimate_only=y
63
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
見積もり実行例
実際にデータを作成し(40万行、2GB)、見積もりの精度を計測しましたdbms_statsはサンプル100%でかけてます
BLOCKS
COMMAND > expdp scott/tiger tables=test estimate=blocks estimate_only=y
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
. estimated “SCOTT".“TEST"
3.062 GB
Total estimation using BLOCKS method: 3.062
GB
STATISTICS
COMMAND > expdp scott/tiger tables=test estimate=statistics estimate_only=y
Estimate in progress using STATISTICS method...
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
. estimated “SCOTT".“TEST"
1.947 GB
Total estimation using STATISTICS method: 1.947
確認
64
COMMAND > ls –l
……. 2092179456 …. expdat.dmp
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
GB
約1.948GB
マスターテーブルの容量が見積もり
に入らないため、その分は考慮する
必要があります
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
65
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
Import – Data Pump –
Import Utility
IMPDP
9i までのインポートツールと同様の操作性を
もった新インポートユーティリティ
IMPDPでは、EXPDPで使用できたパラメータのほとんどを利用することができます
IMPDPでパラメータを指定することにより、EXPDPで作成したダンプファイルからさらに
対象データを絞りこんでインポートすることが可能です
COMMAND > impdp scott/tiger tables=emp,dept
ダンプファイルからemp表と
dept表のみをインポート
COMMAND > impdp scott/tiger include=index
ダンプファイルから索引のみをインポート
66
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
ネットワーク・リンクを使用します
NETWORK_LINK
データベース・リンクを使用して、リモートデータベースから直接ローカルデー
タベースにインポートを行うことができます
参考:エクスポートのネットワーク・リンク指定は、リモートデータベースのデータ
をローカルにエクスポートする機能です インポートの場合には直接ローカル
データベースに書き込むので、ダンプファイルを作成しません
接続するリモートデータベースを、NETWORK_LINKパラメータで指定します
指定する値はデータベース・リンク名です
COMMAND > impdp scott/tiger tables=emp,dept directory=dpump_dir
network_link=scott.jp.oracle.com DB LINKの指定
67
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
知っておきたい便利な使い方
68
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル / Data Pump
複数の表をExportし、データのみをImportしたい
複数の表をExportし、データのみ
をImportしたいが、外部キーが多
数あり、整合性制約に違反してし
まう・・・
以下のように、関連する参照整合性制約を disableし、Import後に
参照整合性制約を enable にすると、エラーを解消できます
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に設定します
69
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル / Data Pump
Exportダンプから一部データを取り出す方法
誤って一部データをdeleteし、
commit してしまった!!
エクスポートのダンプ・ファイル
から取り出したい・・・
SQL> delete from oradirect.emp
where emp_id=100;
SQL> 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
注)エクスポートした時点のデータと削除したデータが一致するかは不明であるため、
この例の場合emp_id=100のデータに関して、 エクスポート時と誤って削除した時が
同じであったことを前提と しています
70
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
オリジナル
索引作成文を受け取る方法 -オリジナル-
Option
INDEXFILE
デフォルト
なし
用途
索引作成文を受け取るファイルを指定します
使用例
imp scott/tiger TABLES=(wendy.emp) INDEXFILE=‘index.txt’
エクスポート・ファイルの
CREATE TABLE文もコメ
ントとして含まれます!
71
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
さらにData PumpではすべてのSQL文を
受け取れます
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
72
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
SQLFILEの一例
CREATE TABLE文や
CREATE INDEX文を
確認する事ができます
73
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
さらにINSERT文も
確認する事ができます
Data Pump
Data Pump 11g新機能を活用!
Data Pump 圧縮
データやメタデータを圧縮してダンプファイルにエクスポートできる
Advanced Compression
Option
 COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
– NONE...エクスポート操作全体について圧縮が無効
– METADATA_ONLY(default)...全ての“メタデータ”が圧縮形式でダンプ・ファイルへ書き込み
(以下の操作はAdvanced Compressionオプションが必要)
– DATA_ONLY...全ての“データ”が圧縮形式でダンプ・ファイルへ書き込み
– ALL...データ、メタデータともに圧縮
 (例)スキーマを指定し、メタデータ、データともに圧縮してダンプ・ファイルscott.dmpへエクスポート
$ expdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=scott.dmp
COMPRESSION=ALL SCHEMAS=scott
74
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Data Pump
Data Pump 11g新機能を活用!
Data Pump 暗号化
データやメタデータを暗号化してダンプファイルにエクスポートできる
Advanced Security
Option
 ENCRYPTION = {ALL | DATA_ONLY | ENCRYPTED_COLUMNS_ONLY |
METADATA_ONLY | NONE}
– ALL:すべてのデータおよびメタデータについて暗号化が有効
– DATA_ONLY:データのみが暗号化
– ENCRYPTED_COLUMNS_ONLY:暗号化された列のみが暗号化される
– METADATA_ONLY:メタデータのみが暗号化
– NONE:データは暗号化されない
 (例)ダンプ・ファイルでデータのみが暗号化されるエクスポート操作
$ expdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=scott_enc.dmp
SCHEMAS=scott ENCRYPTION=data_only ENCRYPTION_PASSWORD=tiger
75
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
まとめ
 Oracle Databaseにおいて2種類のテキスト・ファイルからのデータ・ロード方法があります
–
SQL*Loader
–
外部表を使用したローディング
 SQL*Loaderは以前のバージョンから提供されており、馴染み深いのですが、現在は外部表の利用が主流です
 外部表を利用することでデータ・ロードをSQLで柔軟におこなえます
 エクスポート・インポートの種類は2種類
–
オリジナルのExport/ImportとData Pump
–
Oracle Database 10gからはData Pumpを使用する
 Oracle Database 10g以前のバージョンからデータを移行する場合は、オリジナルのエクスポート・インポートを使用する
 ダイレクト・パス・ロードで高速な移行を実現
 Optionコマンドを使って、最適なExport/Importを実現
76
–
Advanced Compressionで圧縮して高速化を実現
–
セキュリティを高めたいなら、Advanced Security
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Appendix
HWMを下げるオペレーション
77
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
参考)ダイレクト・ロードとHWM
ハイウォーターマーク(HWM)とは
 テーブルに割り当てたブロックの中で、いままでデータが挿入されたことのある最後尾のブロック
– ハイウォーターマーク(High Water Mark):高水位標
データ格納済
ブロック
空き
ブロック
データ格納済
ブロック
データ削除
空き
ブロック
HWM
空き
ブロック
HWM
 テーブルのフルスキャン時にはHWMまで読み取ります
– メリット:テーブルの大きさに対してデータ量が少ない場合、高速に検索できる
– デメリット: 大量削除などでHWM以前の空きが多い場合、実レコード数に比較して時間がかかる
テーブルのフルスキャン
空き
ブロック
HWM
78
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
テーブルのフルスキャン
空き
ブロック
HWM
参考)ダイレクト・ロードとHWM
ダイレクト・ロードの書込み
 ダイレクト・ロードはHWMの後ろにデータを書き込みます
– ブロック・イメージを作成し直接物理的に書き込む為、使用中の
ブロックを利用しません
– ダイレクト・ロードは書込み速度は速いが、利用できない空き領域
(HWMよりも前の空き領域)がでてきます
データ格納済
ブロック
ダイレクト・ロードによる
データ書込み開始ブロック
空き
ブロック
HWM
 データ削除が頻繁に発生する表にダイレクト・ロードを行う際はHWMを下げるような運用も検
討します
79
Copyright © 2014, Oracle and/or its affiliates. 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 <表領域名>)
※ 索引等のメンテナンスも必須
 オンライン状態で実施
80
1.
オンライン表再定義(Enterprise Edition機能)
2.
オンライン・セグメント縮小(標準機能)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
HWMを下げるオペレーション
オンライン・セグメント縮小
 オンライン・セグメント縮小
– 業務でテーブルを利用中でもセグメント縮小が可能
– 自動セグメント領域管理(ASSM)のみ利用可能
②
①
空き領域 HWM
データの移動
③
HWMの移動
ALTER TABLE <表名> ENABLE ROW MOVEMENT;
ALTER TABLE <表名> SHRINK SPACE[CASCADE];
81
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
領域の解放
Appendix
Oracle Database からの
CSVアンロード
82
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
なぜCSVでロード / アンロードしたいのか?
 RDBMS製品間のデータ交換
– Oracle Database から他社RDBMSへ
– 他社RDBMSから Oracle Database へ
 業務処理(本番環境)としてデータ交換を行なっている
 検証・開発用にデータをベンダーに提供する
83
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
CSVロード / アンロードに関する問題
 CSVはフォーマット・エラーが発生しやすい
– ローディングが行えず、PoCが始まらない
 Oracle Database には CSVアンローダーが存在しない
– どのような手法でアンロードするかが性能に大きく影響する
– CSVフォーマット・エラーが発生しやすい
84
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
CSVフォーマットとは
 狭義では CSV = Comma-Separated Values [RFC4180]
– フィールド終端: ,
レコード終端: CRLF
 広義では CSV = Character-Separated Values
– フィールド終端とレコード終端が特定の文字
 狭義のCSVを使いがちだが
ほとんどのソフトウェアが広義のCSVに対応している
 狭義のCSVはフォーマット・エラーを起こしやすい
85
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
フォーマット・エラーの例
データにフィールド終端が含まれている
abc
def
1,234
uvw
xyz
7,890
abc,def,1,234
uvw,xyz,7,890
86
2列に分割されてしまっている
abc
def
1
234
uvw
xyz
7
890
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
正しい対応例
終端記号をデータに含まれない文字にする
 例)フィールド終端: タブ(^I)
abc^Idef^I1,234
uvw^Ixyz^I7,890
 タブ区切りテキスト (TSV) は Microsoft Excel 含め、
対応ソフトウェアが多いので利用しやすい
 注意: ユーザーが自由入力できるアプリケーション
(textarea要素を含むWebアプリケーションなど)では
データにタブが含まれることが少なくない
87
Copyright © 2014, Oracle and/or its affiliates. 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進数指定も可能
88
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
誤った対応例
エンクロージャでは解決できない
 エンクロージャ " を追加する
"abc","def","1,234"
 データに " は含まれていないか? → 含まれている → エラー
"abc","def","1'23""
 データに " が含まれていないことが確実なのであれば、
フィールド終端を " にするだけで解決
abc"def"1,234
89
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
ORACLE_LOADERの場合の間違いやすい対応例1
エンクロージャをつけても、レコード終端はデータに含められない
 ORACLE_LOADERドライバー(SQL*Loader含む)は
エンクロージャを使ってもデータにレコード終端を含められない
例)フィールド終端: , レコード終端: 改行 エンクロージャ: “
”abc“,”def“,”12
34“
→ エラー: 2番目の囲み文字列がありません
 可変レコード形式 (VAR) を使った対応方法もあるが、
レコード終端を改行から別のASCII制御文字に変更したほうが簡単
90
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
ORACLE_LOADERの場合の間違いやすい対応例2
エスケープ文字は使用できない
 ORACLE_LOADERドライバー(SQL*Loader含む)は
エスケープ文字でフィールド終端とレコード終端を無効化できない
例)フィールド終端: , レコード終端: 改行
abc,def,1\,234
uvw,xyz,78\
単なる文字として扱われる
90
abc
def
1\
uvw
xyz
78\
90
91
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
,234
ORACLE_LOADERの場合の間違いやすい対応例3
文字列にしても解決できない
 ORACLE_LOADERドライバー(SQL*Loader含む)は
文字 “列” に対応できるが、これで常に解決できるわけではない
 例)フィールド終端: ,,
abc,,def,,1,234 ← 一見良さそう
uvw,,xy,,,7,890 ← 想定外の区切り
uvw
xy
,7,890
区切りがずれている
92
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
正しいアプリケーション実装
 終端記号にマイナーなASCII制御文字を使用できないシステムでは
少なくとも2個の印字可能文字は、データに含まれないように
RDBMSからの入力時 / RDBMSからの出力時に置き換える
– ISO10646文字実体参照: , → &#44;
– SQLインジェクション対策に合わせて実装する
93
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
94
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
95
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SLC Total Solution
システムライフサイクル全般にわたるソリューションをご提供
弊社Oracle事業と
DBエンジニアによる人的サポートのご紹介
㈱NSソリューションズ西日本
ソリューション事業部 Oracle・PSSグループ
シニア・セールスマネージャ 笹井 健
SLC Total Solution
弊社Oracle事業と
DBエンジニアによる人的サポートのご紹介
97
八幡製鉄所システム部門をルーツとする歴史
‘60
八幡製鉄(株)
システム部
新日本製鐵(株)
‘70
‘80
SLC Total Solution
‘90
‘00
‘10
‘70新日鐵発足
八幡製鐵所
システム開発室
’88 エニコム設立
新日鉄情報通信
システム(株)
新日鉄
ソリューションズ
新日鉄住金
ソリューションズ
エニコム西日本支社
エニコム
システム
西日本
’2001 NSSOL設立
NSSOL西日本支社
NSソリューションズ西日本
2013
▽
システム技術への取り組みの歴史は
1961年(昭和36年)八幡製鉄所への
大型計算機導入から半世紀を超える。
98
NSソリューションズ㈱とオラクル社の関係
主要受賞実績
SLC Total Solution
2006年: Partner of the Year -日本オラクルのビジネスに最も貢献したパートナー
Showcase of the Year -先進的、かつ優れた採用事例を構築したパートナー企業
Sales of the Year -最も大きな案件を受注した営業社員
Support analyst of the Year-高度な専門知識を持ってサポートサービスに最も貢献したサポート・アナリスト
2007年: Excellent Partner 10年連続受賞 -日本オラクルの製品やサービスの売上げにおいて最も貢献したパートナー
BI of the Year -BIビジネスに最も貢献したパートナー
2008年: Technology Business Award 2008 - BI Award -BI関連ビジネスで最も貢献したパートナー
Industry Award 2008 -Retail Sector/Technology Award -流通サービス業界のビジネスで最も貢献したパートナー
2009年: Technology Business Award 2009 – Business Intelligence Award ~BIビジネスにおいて最も貢献したパートナー
2010年:Cloud Platform Award 先進的なクラウド基盤ソリューションの提供に最も貢献したパートナー
2011年:Support Partner of the Year サポートビジネスの成長に最も貢献したパートナー
Oracle Database との関わり
Oracle 11g
Oracle 10g
戦略的提携契約
Oracle9i
新日本製鐵
米国オラクル
Oracle8i
(現、新日鐵住金)
1991年
Oracle6
Oracle5
Oracle4
Oracle2
‘79
読取り一貫性
‘84
行レベルロック
パラレルサーバ
‘85
‘88
Oracle8
Oracle7
スタンバイDB
パラレル・クエリ
アドバンスト・
レプリケーション
‘92
レンジ・
パーティション
パラレルDML
AQ
‘97
ハッシュ/
コンポジット・
パーティション
マテビュー
Java/XML対応
‘99
‘01
Real
Application
Clusters
Data Guard
XML DB
9i OLAP
Grid Control
Transparent
Data
Encryption
Automatic
Storage
Management
ADDM
‘04
Exadata
Real
Application
Testing
Advanced
Compression
‘07
‘09
ODA
Multitenant
Plug into the
Cloud
Big Data for the
Enterprise
‘13
99
NSソリューションズ西日本のサポート体制
九州地場のSE体制
SLC Total Solution
自社直営SEサポート体制
お
客
様
SEEFOCU S
( N S S O L グループ 直営のサポート )
NS Solutions
カスタマーサポートセンター
障害コール
受付窓口
お問合せ
1st Line エンジニア
対応
日本Oracle
米国Oracle本社
連携
九州・福岡地場での
営業・SEフォロー
サポート
メニュー
2nd Line
担当アサイン
NSソリューションズ西日本
仮想環境構築
簡易版仮想環境アセスメント
仮想環境構築支援
データベース構築
DB物理設計支援
㈱NSソリューションズ西日本の
オラクルグループのメンバー
SE7名 営業2名
(全員福岡県内に常駐)
NSソリューションス西日本
グループ全体
【 売 上 】60.6億円
【従業員数】272人
【 売上 (連結) 】1,720億円
【従業員数(連結)】4,985人 (2013年3月期)
DB構築支援
バックアップ環境構築支援
移行支援
チューニング支援
データベース維持運用
年2 回の定期診断( 稼動状況評価)
年4 回の定期診断( 稼動状況評価)
ORACLE保守サービス
100
NSソリューションズ西日本のOracle新技術・製品事例
SLC Total Solution
Exadata を 顧客ビジネス拡大に向けたソリューションとして適用
顧客課題
解決策
コンテンツやメニューの拡大でDB負荷増。 応答劣化を懸念。
・Exadata を採用。高速処理を活用し、増加コンテンツ用をサブDBへ。
・OracleGoldenGateを採用。 既存DB性能を損なわず、DB間を連携。
既存Oracle RAC
サブDB(増加コンテンツ対応)
Exadata X2-2 → X3(Eighth)
Exadataの高速化テクノロジー
ストレージとサーバ間を40Gbit/secの
超高速スイッチInfiniBandで結ぶ
アクセス頻度の高いデータは
Smart Flash Cacheで高速キャッシュ
個々のディスクストレージに
データベース検索機能を持たせ、
検索結果のみをDBサーバーに転送

将来はExadataへの一元統合も
101
お客様のDBエンジニア様との技術交流
SLC Total Solution
NS西日本 Oracleメールマガジン
絶賛配信中!
SEのお客様向けにトラブル対応事例や
対策ナレッジをメルマガで提供しています。
バージョン移行障害 9i ⇒ 11.2.0.2
【現象】11.1から、AUDIT_TRAIL=DBがデフォルトとなっている為、
そのまま稼動させると、SYS.AUD$ が肥大化する。
バージョン移行障害 8.1.6 ⇒ 10.2.0.2
【対策】##############【現象】ルールベース・オプティマイザから、コストベース・オプティマ
イザに変更した際、一部のSQLで性能劣化が発生。
バージョン移行障害 10.2.0.2 ⇒ 11.2.0.2
【現象】11.1.0.6以降で適用されているBUG:4887636(ID 551749.1)修
【対策】##############
正の影響で、OPTIMIZER_MODEにFIRST_ROWS_n を指定し、且
つ、ROWNUM 条件指定を行ったSQLで性能劣化が発生(元々1~2
秒の処理性能だったものが数十秒に遅延)。
(毎月1回発行予定)
購読ご希望の方は、本日の
アンケートでお申し込み下さい。
【対策】##############
102
SLC Total Solution
21世紀のソリューションがここにあります。
本ご提案に関するお問合せは
株式会社NSソリューションズ西日本
ソリューション事業部 営業統括グループ
オラクル・PSSグループ
TEL 092-471-2066 FAX 092-477-2817
担当:笹井 健(ささい けん)
103