Oracle Data Pumpのお話。
仕事の一環でOracleDBについて触る機会があったので定着の意も含めて書きます。
DataPumpとは
OracleDB10gより導入されたテクノロジー。
従来のインポート/エクスポート(exp/imp)と同様論理バックアップの取得、データベース間の移動が目的。
従来のexp/impは基本的にユーティリティツールが実行される側で処理されるが、DataPumpはデータベースサーバ側でジョブとして管理・処理される。得られるメリットは「パフォーマンス向上」「管理性向上」の2点。
パフォーマンス向上
一般的に従来のexp/impよりも高速に実行可能。
exp:ダイレクトパスでアンロード実行の場合約2倍の処理速度
imp:データのロードの場合、15~45倍の速度で処理
※パラレル処理でさらに高速化実現も可能
管理性向上
実行の停止・再開、ダンプファイルの暗号化(Oracle Advanced Security option)、圧縮(Oracle Advanced Compression option)などがサポート。
version 11gではexpdp/impdpコマンドにREMAP_DARAという新パラメータが提供されDataPumpがデータ変換をする際に、ユーザが指定したPL/SQLファンクションでユーザのデータを変更できるようになった。
DataPumpの仕組みアーキテクチャ
DataPumpは3つの要素で構成される。
①コマンドライン・クライアントexpdp/impdp
②PL/SQLパッケージDBMS_DATAPUMP(Data Pump API)
③PL/SQLパッケージDBMS_METADATA(メタデータAPI)
図にするとこんな感じ。
ざっとですが。ダンプファイルはサーバ側に格納されます。
実行エンジン(EXPDP/IMPDP)はOracleDBサーバ側。
DataPumpの使い方
<実行前の準備>
export/importを行う場合ディレクトリ・オブジェクトの作成と権限付与が必要。
【DIRECTORY OBJECTの作成】
そのディレクトリへのアクセス権限の付与として
TEST_DIRというディレクトリを/home/testに作成し、NNNユーザがEXPDP/IMPDPを実行するとします。
ディレクトリ作成とread/write権限付与は
SQL > create of replace directory TEST_DIR as '/home/test';
SQL > grant read,write on directory TEST_DIR to NNN;
権限の付与にはConnectおよびResourceロールが必要となります。
DataPump Export(EXPDP)の実行例
ユーザ:NNN
パスワード:RRR
としてDIRECTORY OBJECT:TEST_DIRを使用前提とします。
NNNユーザのテーブルTBLをexportする場合
% expdp NNN/RRR directory=test_dir tebles=tbl
Data Pump Import(IMPDP)の実行例
ユーザ:NNN
パスワード:RRR
としてDIRECTORY OBJECT:TEST_DIR
ダンプファイル:tbl.dmpを使用前提とします。
% impdp NNN/RRR directory=test_dir dumpfile=tbl.dmp tables=dmp
その他便利なオプション機能
・exportと異なるスキーマにimportする場合→REMAP_SCHEMA
例)NNNユーザの持つオブジェクトをTTTユーザにimportする場合
% impdp NNN/RRR directory=test_dir dumpfile=tbl.dmp remap_schema=NNN:TTT
・exort時と異なる表領域にimportする→REMAP_TABLESPACE
例)USERS表領域のオブジェクトをTESTTBS表領域にimportする場合
% impdp NNN/RRR directory=test_dir dumpfile=tbl.dmp remap_tablespase=users:testtbs
IMPDP実行時に実行されるSQLコマンドを任意のファイルに出力する→SQLFILE
例)import時に実行されるSQL文を確認する場合
% impdp NNN/RRR directory=test_dir dumpfile=tbl.dmp sqlfile=confirm.sql
最後に
OracleDBも、勉強をだいぶ後回しにしてしまっている部分もあってまだまだ未熟者ですがこういった機会にしっかりと知識を拾っていきつつ全体的に視野を広げて勉強していきたいと思います。では。
N
私の常日頃の生活をベースに、皆さんの役に立てたり、探しているものを紹介できたらと思っています。今後もよろしくお願いします!