概要
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\
に保存して実施しました。
今回は作業を簡単化する為、実行用バッチ、パラメータファイルは全て、
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用にデータを保存します。
このパラメータファイルに従ってExportが実施されます。
https://docs.oracle.com/cd/E16338_01/server.112/b56303/dp_import.htm
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
https://docs.oracle.com/cd/E16338_01/server.112/b56303/dp_export.htm
FULL=YES詳細はOracle本家を参考に。
DIRECTORY=HOGE_DIR
JOB_NAME=job_expdp1
DUMPFILE= EXPDAT.DMP
https://docs.oracle.com/cd/E16338_01/server.112/b56303/dp_export.htm
このパラメータファイルに従ってExportが実施されます。
ファイル化しておくと、使いまわしたり、
日付ごとのバックアップを残しておけたりと便利です。
3.エクスポート実行バッチ
EXPDP.batexpdp IkouUser/password@HOGE parfile=export.par
※ログ出力については、下記、「実施」 参照
4.インポート用パラメータファイル
import.par
FULL=YES詳細はOracle本家を参考に。
DIRECTORY=HOGE_DIR
DUMPFILE=EXPDAT.DMP
DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS
JOB_NAME=job_impdp1
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>&13行目はログを保存する為です。
パラメータファイルでログファイルを指定しても良いのですが、
コマンドプロンプトで表示される内容と違ったので、このようにしてあります。
コマンドプロンプトで表示される内容と違ったので、このようにしてあります。
インポート
エクスポートで生成されたファイルを移行先の
'I:\ORACLE\HOGE'
フォルダにコピーしておきます。
事前テストによって移行先にインポートするスキーマが既に存在する場合、
事前に削除しておおきます。
事前テストによって移行先にインポートするスキーマが既に存在する場合、
事前に削除しておおきます。
DROP USER user1 CASCADE;
DROP USER user2 CASCADE;
...
移行先のコマンドプロンプトで実施。
D:
cd D:\ikou\
IMPDP.bat > impdp.log 2>&1
遭遇したエラー
所感
データ移行は99%が事前準備で結果が決まります。
本番移行時は、準備した手順書に従って頭を使わず粛々と手を使う、
という形が理想です。
今回は事前テストを5〜6回行いましたが、
その間に遭遇するエラーは出尽くしました。
机上の計画だけでは、見えないものがあるので、
出来る限り多くテストする事をおすすめします。
0 件のコメント:
コメントを投稿