概要
検証環境の Oracle 11g (11.2.0.4) を新規構築した 19c インスタンスへ 1.2 TB のデータを含めて完全移行する。RMAN ではバージョン差が大きすぎるため、Data Pump のトランスポート可能表領域機能を利用し、短時間のダウンタイムで完了させる。
1. ソース側での準備
1.1 業務表領域を読み取り専用に変更
-- 対象表領域一覧
SELECT tablespace_name, status FROM dba_tablespaces;
-- 読み取り専用化
ALTER TABLESPACE app_data READ ONLY;
ALTER TABLESPACE app_idx READ ONLY;
ALTER TABLESPACE hist_data READ ONLY;
ALTER TABLESPACE hist_idx READ ONLY;
ALTER TABLESPACE users READ ONLY;
1.2 ディレクトリ作成とフルエクスポート
CREATE OR REPLACE DIRECTORY dpdir AS '/u01/dp_export';
expdp \'/ as sysdba\' \
directory=dpdir \
full=y \
dumpfile=full_%U.dmp \
logfile=full_exp.log \
transportable=always \
version=12
エラー ORA-29335 が出た場合は、該当表領域を READ ONLY にし直して再実行。
1.3 必要データファイル一覧の確認
エクスポート完了時に出力されるリストをメモしておく。例:
Datafiles required for transportable tablespace APP_DATA:
/u01/oradata/ORCL/app_data01.dbf
/u01/oradata/ORCL/app_data02.dbf
Datafiles required for transportable tablespace APP_IDX:
/u01/oradata/ORCL/app_idx01.dbf
...
2. ファイル転送
2.1 ダンプファイルのコピー
scp /u01/dp_export/full_*.dmp oracle@19chost:/u01/dp_import/
2.2 データファイルのコピー
rsync -av /u01/oradata/ORCL/*.dbf oracle@19chost:/u01/oradata/ORCL19c/
SYSTEM / SYSAUX / TEMP / UNDO は不要。
2.3 エンディアン確認
SELECT tp.platform_name, tp.endian_format
FROM v$transportable_platform tp, v$database d
WHERE tp.platform_name = d.platform_name;
Linux x86-64 同士であれば変換不要。
2.4 ソース側を読み書き可能に戻す
ALTER TABLESPACE app_data READ WRITE;
ALTER TABLESPACE app_idx READ WRITE;
ALTER TABLESPACE hist_data READ WRITE;
ALTER TABLESPACE hist_idx READ WRITE;
ALTER TABLESPACE users READ WRITE;
3. ターゲット側でのインポート
3.1 ディレクトリ作成
CREATE OR REPLACE DIRECTORY dpdir AS '/u01/dp_import';
3.2 パラメータファイル作成 (par.imp)
full=y
directory=dpdir
dumpfile=full_01.dmp
logfile=full_imp.log
transport_datafiles=
'/u01/oradata/ORCL19c/app_data01.dbf',
'/u01/oradata/ORCL19c/app_data02.dbf',
'/u01/oradata/ORCL19c/app_idx01.dbf',
...
'/u01/oradata/ORCL19c/users01.dbf'
3.3 インポート実行
impdp \'/ as sysdba\' parfile=par.imp
3.4 USERS 表領域重複時の対処
-- 既存 USERS を退避
ALTER TABLESPACE users RENAME TO users_old;
-- インポート再実行
impdp ... exclude=tablespace:\"IN ('USERS_OLD')\"
4. 移行後の作業
- DB リンクおよび統計情報はエクスポート時に除外してもよい。
exclude=db_link,statistics - インポート後、DB リンクを再作成し、無効になったプロシージャ/ビューを再コンパイル。
- アプリケーション接続文字列を 19c ホストへ切り替えて稼働開始。