本番環境DBと検証環境DBのデータexport,import
タイトル通りデータのexport,importについて。
本番環境DBからexportし、検証環境DBへimportした作業を記載していきます。
まずは各環境、
DBはOracle
OSはLinux
です。
Oracleにはデータのexport,importに2種類ありますが、
ここではData Pumpを用いた方法になります。
まず、Data Pumpを行う場合、
ディレクトリ・オブジェクトの作成
と
権限の付与
が必要です。
まずData Pumpの概念として理解する必要があります。
Data Pumpは標準のexport,importに比べて、高速に作動します。
これはなぜかというと、
Data PumpはOracle Database内に実行エンジンをもっているからです。
※そりゃあDB自身にエンジンをもって作動を働きかけたほうが早い。
そしてなぜディレクトリ・オブジェクトなんてものが必要なのか…
データをexportする場合、dmpファイルを作成します。
DB自身に働きかけるということは、
DB自身がdmpファイルを作成します。
つまり、dmpファイルを作成するためにDB自身にディレクトリ情報を保持してもらわなければなりません。
そして、
exportしたいデータのユーザーにそのディレクトリ・オブジェクトへの権限を付与しなければなりません。
ディレクトリ・オブジェクト一覧の確認sql(もちろんしかるべき権限のユーザーで)
SELECT * FROM ALL_DIRECTORIES;
SELECT directory_name, directory_path FROM ALL_DIRECTORIES;
ディレクトリ・オブジェクトの作成sql(作成権限のあるユーザーで)
CREATE OR REPLACE directory ディレクトリ・オブジェクト名 as '対象のパス';
権限の付与sql(権限付与できるユーザーで)
GRANT READ, WRITE ON directory ディレクトリ・オブジェクト名 to 権限付与するユーザー名;
もろもろ設定後、
sqlplusをせずにコマンド実行します。
export文(サンプル)
expdp ユーザー名/パスワード directory=ディレクトリ・オブジェクト名 dumpfile=ダンプファイル名.dmp
※テーブル名指定オプション tables=テーブル名
※exportデータタイプ指定オプション(例はデータのみ) content=data_only
※ダンプファイル名指定オプション dumpfile=ダンプファイル名.dmp
他のオプションはいろいろ参照してみてください。
ちなみにダンプファイル名を指定しなかった場合、ダンプファイル名は
【EXPDAT.DMP】になります。(windowsでの実行確認)
また、事前作成済みのダンプファイルと同名のダンプファイルを指定して実行した場合、
ORA-39001: 引数値が無効です
ORA-39000: ダンプ・ファイル指定が無効です
ORA-31641: ダンプ・ファイル"/work\sample.dmp"を作成できません
ORA-27038: 作成したファイルはすでに存在します
OSD-04010: <create>オプションが指定されましたが、ファイルはすでに存在します
と作成はできません。
では次にimportです。
exportしたユーザーと同ユーザーでimportする場合は問題なく、以下の通り、
import文
impdp ユーザー名/パスワード directory=ディレクトリ・オブジェクト名 dumpfile=ダンプファイル名.dmp
しかし、タイトルにあるような違うユーザーの持っている同名テーブルにimportする場合、
リマッピングをする必要があります。
以下が、
データexportユーザー名:A、データimportユーザー名:B
とした場合のsqlです。
impdp ユーザー名/パスワード directory=ディレクトリ・オブジェクト名 dumpfile=ダンプファイル名.dmp remap_schema=Aユーザー名:Bユーザー名
以上!
こんな感じでやります。