Oracleデータ移行作業の忘備録

2019/06/27

export import Oracle

t f B! P L

概要

HW老朽化に伴うDBサーバのリプレイスを行います。

ネットワーク経由でDB_LINKを使って移行することも検討しましたが、
所用時間を比較して、ダンプしたデータをハンドキャリーする方式を選択しました。

expdpコマンドでファイルに書き出してデータセンターへハンドキャリーし
impdpコマンドで取り込むという流れになります。

環境

【移行元】
DB:Oracle11g  11.2.0.3
OS:Windows2008R2

【移行先】
DB:Oracle11g  11.2.0.3
OS:Windows2008R2

※HWのみのリプレイスになります。OSも同じです。

準備

1.移行用ユーザ&ディレクトリオブジェクト
2.エクスポート用パラメータファイル
3.エクスポート実行バッチ
4.インポート用パラメータファイル
5.インポート実行バッチ
を準備します。
今回は作業を簡単化する為、実行用バッチ、パラメータファイルは全て、
D:\ikou\
に保存して実施しました。

1.移行用ユーザ&ディレクトリオブジェクト

移行元と移行先でSQL DeveloperでSYSで接続し実行。

権限は無駄に多いですがコピペして作成した為、厳密に不要権限を外したい場合はググって下さい。
大事なのはDATAPUMP_EXP_FULL_DATABASE、DATAPUMP_IMP_FULL_DATABASE。
移行元と移行先でスキーマを分けても良いが同じスクリプトを流す方が
管理が楽なので下記のようにしました。
移行後、不要になれば削除すれば問題ありません。

CREATE USER "IkouUser" PROFILE "DEFAULT" IDENTIFIED BY "password" DEFAULT TABLESPACE "HOGE_DATA" TEMPORARY TABLESPACE "HOGE_TEMP" QUOTA UNLIMITED ON "HOGE_DATA" QUOTA UNLIMITED ON "HOGE_INDX" ACCOUNT UNLOCK;
GRANT ALTER SESSION TO "IkouUser";
GRANT COMMENT ANY TABLE TO "IkouUser";
GRANT CREATE ANY DIRECTORY TO "IkouUser";
GRANT DROP USER TO "IkouUser";
GRANT CREATE DATABASE LINK TO "IkouUser";
GRANT EXECUTE ON "SYS"."DBMS_SNAPSHOT" TO "IkouUser";
GRANT "DATAPUMP_EXP_FULL_DATABASE" TO "IkouUser";
GRANT "DATAPUMP_IMP_FULL_DATABASE" TO "IkouUser";
GRANT "EXP_FULL_DATABASE" TO "IkouUser";
GRANT "IMP_FULL_DATABASE" TO "IkouUser";
GRANT "MGMT_USER" TO "IkouUser";
GRANT "SELECT_CATALOG_ROLE" TO "IkouUser";

OracleではOSのフォルダを参照する為、
ディレクトリオブジェクトを作成する必要があります。
このフォルダにデータが出力される想定です。

移行先でも同じパスのフォルダを準備します。
Import用にデータを保存します。
create or replace directory HOGE_DIR as 'I:\ORACLE\HOGE';
GRANT READ ON DIRECTORY "SYS"."HOGE_DIR" TO "IkouUser";
GRANT WRITE ON DIRECTORY "SYS"."HOGE_DIR" TO "IkouUser";


 

2.エクスポート用パラメータファイル

export.par
FULL=YES
DIRECTORY=HOGE_DIR
JOB_NAME=job_expdp1
DUMPFILE= EXPDAT.DMP
詳細はOracle本家を参考に。
https://docs.oracle.com/cd/E16338_01/server.112/b56303/dp_export.htm

このパラメータファイルに従ってExportが実施されます。
ファイル化しておくと、使いまわしたり、
日付ごとのバックアップを残しておけたりと便利です。


3.エクスポート実行バッチ

EXPDP.bat
expdp IkouUser/password@HOGE parfile=export.par

※ログ出力については、下記、「実施」 参照


4.インポート用パラメータファイル

import.par
FULL=YES
DIRECTORY=HOGE_DIR
DUMPFILE=EXPDAT.DMP
DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS
JOB_NAME=job_impdp1
詳細はOracle本家を参考に。
https://docs.oracle.com/cd/E16338_01/server.112/b56303/dp_import.htm


5.インポート実行バッチ

IMPDP.bat
impdp IkouUser/password@HOGE parfile=import.par

※ログ出力については、下記、「実施」 参照



実施

準備が全て終わってから実施します。

エクスポート

移行元のコマンドプロンプトで実施。
D: 
cd D:\ikou\ 
EXPDP.bat > expdp.log 2>&1
3行目はログを保存する為です。
パラメータファイルでログファイルを指定しても良いのですが、
コマンドプロンプトで表示される内容と違ったので、このようにしてあります。


インポート

エクスポートで生成されたファイルを移行先の
'I:\ORACLE\HOGE'
フォルダにコピーしておきます。
事前テストによって移行先にインポートするスキーマが既に存在する場合、
事前に削除しておおきます。
DROP USER user1 CASCADE;
DROP USER user2 CASCADE;
...
移行先のコマンドプロンプトで実施。
D:
cd D:\ikou\ 
IMPDP.bat > impdp.log 2>&1


遭遇したエラー 





所感

データ移行は99%が事前準備で結果が決まります。
本番移行時は、準備した手順書に従って頭を使わず粛々と手を使う、
という形が理想です。

今回は事前テストを5〜6回行いましたが、
その間に遭遇するエラーは出尽くしました。
机上の計画だけでは、見えないものがあるので、
出来る限り多くテストする事をおすすめします。

QooQ