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文字実体参照: , → , – 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
© Copyright 2024