Oracle でDATAPUMPを使う時の注意点をいくつか記載します。
Oracleでのエクスポートやインポートする際に利用するDATAPUMPですが、このツールの利用で注意点があります。
自分がよくやりがちな事、周りからよく聞かれる事を基に、簡単ですが記事にしてみました。
もくじ
始めて扱う方、しばらく使っていなかった方、やってしまいがちな動作。
1.途中でキャンセル「Ctrl + C」を押しがち
それは
『Ctrl+C』を使ってしまうこと。
シェルスクリプトやコマンドを打ち込むエンジニアではついやりがちな操作ではないでしょうか。
何気なく、ちょっと止めてみようと「Ctrl+C」を何回か押してしまった経験があります。
DATAPUMPを実行した後に、『Ctrl+C』を実行してしまうと、所謂、ゴミJOBがバックグラウンドに残ってしまいます。
シェルを止める感覚で実施すると、残ってしまうので注意です。
このゴミJOBが残ると、同様に同じコマンドを実行しても、ゴミJOBが残っているせいで、実行されません。
いざ、そのような状況になってしまうと、急ぎの時などは焦ってくるんですよね。
どのように消すかと言うと、
SELECT * FROM DBA_DATAPUMP_JOBS;
このコマンドをたたくと、JOB_NAMEが確認できます。
インポート、エクスポートどちらか実施した方のコマンドを入力します。
exportの場合
expdp ユーザ/パスワード attach = JOB名
importの場合
impdp ユーザ/パスワード attach = JOB名
そこで、下記のコマンドを入力する。
kill_job
これを実施することで、該当のJOBが消えるので安心です。
もう一度、SELECT * FROM DBA_DATAPUMP_JOBS; を実施して消えているか確認してみると良いです。
尚、一時的にJOBをストップする場合、再開する場合は下記のコマンドを入力します
stop_job
start_job
2.DATAPUMPは、DBサーバ上で実施する
これも、結構Oracleを触れていると、年に何回かは問い合わせと言うか質問があったりするんです。
昔のimp/exp コマンドで実施していた名残か、そもそもデータの引っこ抜きを行わないのか業務担当者と話していると、エラーが出て取得できませんでしたなどと言うことがあります。
何でだろと思って見てみると、
そもそもDBサーバで実施していないと言う。
これは、DBサーバ上で実施する必要があります。
expdp、impdpそれぞれの環境から実施するようにした方が良いです。
因みに、データの格納、取り出しもDirectory Object指定です。
また権限が付いていないのに無理やり実施しようとする方もたまにいます。
その際は、DBAに確認しましょう。
あと、便利なのは、実際に実施はしないけど、いざ実施した場合にどのくらいの時間がかかるかなど見積もりたい場合は、estimate_only = y と入力すると、容量や時間が図れます。
規模の大きな開発などになると、基盤の土台を管理する部門がいるので、そちらから権限を割り出していただくか、DBAの権限を使って、実施をお願いするのが良いと思います。
3.データを引き抜く際にスキーマ変更するremap指定について
これも、たまにあるので、記載しておきます。
データのexportを実施して、新しいDB上にそのデータを入れる際に、違うスキーマ指定で入れる事はよくあります。
impdp 'ユーザ名/パスワード@インスタンス名' SCHEMAS=NEW_SCHEMA DIRECTORY=TEST1 DUMPFILE=XXXXX.dmp LOGFILE=XXXXX.log REMAP_SCHEMA=OLD_SCHEMA:NEW_SCHEMA REMAP_TABLESPACE=OLD_TABLESPACE:NEW_TABLESPACE TABLE_EXISTS_ACTION=TRUNCATE;
ここで例として挙げてますが、あくまで新しい方のスキーマを指定するという事。
(わかりやすいように赤字で記載しました。)
ここの記載が既存の古い方のスキーマを指定して入らないと言う方もいるので記載してみました。
確かにごっちゃになっちゃいますよね。
でも、仕様上そういうものなので、ここでは、新しい方へ入れるので、新しいDB上でのスキーマを指定します。
まとめ
データの移行やデータベースの再構築など、利用するケースは多いと思います。
特に、周りからも良く尋ねられる件でしたので、記事にしてみました。
他は、強いて言うと、やはりデータに関する権限が原因で失敗することがほとんどです。
なので、データのimport/export に関しては、DBAなどの担当の方と話し合った上で進めるのが良いです。
制約などが絡んでくると難易度が上がりますが、潰していくしか無いですからね。
実際、DBAの権限がある方に実施してもらうのが良いと思います。
フルモード、ユーザーモード、テーブルモード、テーブルスペースモードなどありますが、ここでは割愛します。(3番目はユーザーモード)
尚、Oracleを始めて間もない方は、下記の記事を参考にしてみてください。
最初のとっかかりは、このようにしたら良いのではという事を経験した身として、記事にしています。
よろしかったらどうぞ。