前回の記事では、Data PumpとRMANによるトランスポータブル表領域の違いについて解説しました。今回は、実際にData Pumpを使って表領域を移行する手順を詳しく紹介していきます。
トランスポータブル表領域の流れをマスターすることで、大量データの移行がぐっと効率的になります!
✅ 前提条件(事前確認)
この手順を実行するには、以下の条件を満たしている必要があります:
項目 | 内容 |
---|---|
表領域の状態 | READ ONLY に変更できること |
Oracleバージョン | 10g以降(11g以降推奨) |
DIRECTORYオブジェクト | 作成済で、適切なパスと権限があること |
エクスポート/インポート実行ユーザー | DBA権限を持つユーザー |
✅ 手順の全体像
以下のような流れで実施します。
① 表領域をREAD ONLYにする
② expdpでメタデータをエクスポート
③ データファイル(.dbf)をコピー
④ impdpでメタデータをインポート
⑤ 表領域をREAD WRITEに戻す(必要に応じて)
🔹 ① 表領域をREAD ONLYにする
ALTER TABLESPACE test_tbs READ ONLY;
Data Pumpトランスポータブルでは、対象の表領域を一時的にREAD ONLYにする必要があります。
これにより、ファイルの整合性を保ったまま移行が可能になります。
🔹 ② メタデータをexpdpでエクスポート
expdp system/password TRANSPORT_TABLESPACES=users DIRECTORY=dpump_dir DUMPFILE=test_tbs_meta.dmp LOGFILE=expdp_users.log
TRANSPORT_TABLESPACES
:対象の表領域名(複数指定可)DIRECTORY
:事前に作成したOracle DIRECTORYオブジェクトDUMPFILE
:メタデータが出力されるファイル名LOGFILE
:ログ出力用ファイル
補足:DIRECTORYの作成例
CREATE OR REPLACE DIRECTORY dpump_dir AS '/u01/app/oracle/dpump';
GRANT READ, WRITE ON DIRECTORY dpump_dir TO system;
SQL> ALTER TABLESPACE test_tbs READ ONLY; ★表領域を読み取り専用に変更
表領域が変更されました。
SQL> set lin 1000 pages 1000
SQL> col tablespace_name for a30
SQL> SELECT tablespace_name,status FROM dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------------------------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
TEST_TBS READ ONLY ★
6行が選択されました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ expdp system/oracle TRANSPORT_TABLESPACES=test_tbs DIRECTORY=dpump_dir DUMPFILE=test_tbs_meta.dmp LOGFILE=expdp_test_tbs.log ★メタデータをエクスポート
Export: Release 19.0.0.0.0 - Production on 土 3月 29 18:48:12 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
"SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01"を起動しています: system/******** TRANSPORT_TABLESPACES=test_tbs DIRECTORY=dpump_dir DUMPFILE=test_tbs_meta.dmp LOGFILE=expdp_test_tbs.log
オブジェクト型TRANSPORTABLE_EXPORT/PLUGTS_BLKの処理中です
オブジェクト型TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLKの処理中です
マスター表"SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01"は正常にロード/アンロードされました
******************************************************************************
SYSTEM.SYS_EXPORT_TRANSPORTABLE_01に設定されたダンプ・ファイルは次のとおりです:
/u01/app/oracle/dpump/test_tbs_meta.dmp
******************************************************************************
トランスポータブル表領域TEST_TBSにはデータファイルが必要です:
/u01/app/oracle/oradata/V19/test_tbs.dbf
ジョブ"SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01"が土 3月 29 18:48:43 2025 elapsed 0 00:00:26で正常に完了しました
🔹 ③ データファイル(.dbf)をコピー
表領域が使用しているデータファイルを、移行先サーバーにコピーします。
以下のSQLでファイル名を確認可能です。
SELECT tablespace_name, file_name FROM dba_data_files WHERE tablespace_name = 'USERS';
例:
scp /u01/app/oracle/oradata/ORCL/test_tbs.dbf oracle@target:/u01/app/oracle/oradata/ORCL/
🔹 ④ impdpでメタデータをインポート
impdp system/password TRANSPORT_DATAFILES='/u01/app/oracle/oradata/ORCL/test_tbs.dbf' DIRECTORY=dpump_dir DUMPFILE=users_meta.dmp LOGFILE=impdp_users.log
TRANSPORT_DATAFILES
:コピーしたデータファイルのパスDUMPFILE
:エクスポート時に作成したdmpファイルDIRECTORY
:dmpファイルが格納されているOracle DIRECTORY
🔹 ⑤ 表領域をREAD WRITEに戻す(必要に応じて)
ALTER TABLESPACE test_tbs READ WRITE;
受信側で通常どおり書き込みできるようにします。
SQL> set lin 1000 pages 1000
SQL> col tablespace_name for a30
SQL> SELECT tablespace_name,status FROM dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------------------------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ ls -l /u01/app/oracle/dpump
total 152
-rw-r--r--. 1 oracle oinstall 155648 Mar 29 18:48 test_tbs_meta.dmp
[oracle@v19single ~]$ ls -l /u01/app/oracle/oradata/V19
total 3500004
-rw-r-----. 1 oracle oinstall 10600448 Mar 29 19:12 control01.ctl
-rw-r-----. 1 oracle oinstall 10600448 Mar 29 19:12 control02.ctl
-rw-r-----. 1 oracle oinstall 209715712 Mar 29 19:07 redo01.log
-rw-r-----. 1 oracle oinstall 209715712 Mar 29 19:07 redo02.log
-rw-r-----. 1 oracle oinstall 209715712 Mar 29 19:11 redo03.log
-rw-r-----. 1 oracle oinstall 765468672 Mar 29 19:11 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 1226842112 Mar 29 19:07 system01.dbf
-rw-r-----. 1 oracle oinstall 165683200 Nov 26 2023 temp01.dbf
-rw-r--r--. 1 oracle oinstall 10493952 Mar 29 18:43 test_tbs.dbf ★データファイル配置
-rw-r-----. 1 oracle oinstall 760225792 Mar 29 19:07 undotbs01.dbf
-rw-r-----. 1 oracle oinstall 5251072 Mar 29 19:07 users01.dbf
[oracle@v19single ~]$ impdp system/oracle TRANSPORT_DATAFILES='/u01/app/oracle/oradata/V19/test_tbs.dbf' DIRECTORY=dpump_dir DUMPFILE=test_tbs_meta.dmp LOGFILE=impdp_test_tbs.log ★メタデータをインポート
Import: Release 19.0.0.0.0 - Production on 土 3月 29 19:14:12 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
マスター表"SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"は正常にロード/アンロードされました
"SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"を起動しています: system/******** TRANSPORT_DATAFILES=/u01/app/oracle/oradata/V19/test_tbs.dbf DIRECTORY=dpump_dir DUMPFILE=test_tbs_meta.dmp LOGFILE=impdp_test_tbs.log
オブジェクト型TRANSPORTABLE_EXPORT/PLUGTS_BLKの処理中です
オブジェクト型TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLKの処理中です
ジョブ"SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"が土 3月 29 19:14:21 2025 elapsed 0 00:00:04で正常に完了しました
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 土 3月 29 19:14:31 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> set lin 1000 pages 1000
SQL> col tablespace_name for a30
SQL> SELECT tablespace_name,status FROM dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------------------------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
TEST_TBS READ ONLY ★
6行が選択されました。
SQL> ALTER TABLESPACE test_tbs READ WRITE;
表領域が変更されました。
SQL> SELECT tablespace_name,status FROM dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------------------------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
TEST_TBS ONLINE
6行が選択されました。
📘 テキスト図:全体フロー
送信元DB(Source) 受信先DB(Target)
┌─────────────────────┐ ┌─────────────────────┐
│ ALTER TABLESPACE users READ ONLY │ │ │
│ expdp users_meta.dmp │──┐ │ │
│ users01.dbf │──┘→→scp│ users01.dbf → TRANSPORT_DATAFILES │
└─────────────────────┘ │ impdp users_meta.dmp → メタデータ導入 │
└─────────────────────┘
✅ 注意点・トラブル回避ポイント
項目 | 内容 |
---|---|
表領域に含まれるオブジェクト | すべて対象スキーマに属していることが必要です |
オブジェクトの制約 | DIRECTORY、LOBなどがあると制限されるケースあり |
移行先の環境 | Oracleのバージョンやエンディアンが一致していることを確認 |
クロスプラットフォーム | DBMS_TTS.TRANSPORT_SET_CHECK で事前チェック推奨 |
✅ 移行可能か事前チェックするSQL
EXEC DBMS_TTS.TRANSPORT_SET_CHECK('TEST_TBS', TRUE);
SELECT * FROM transport_set_violations;
結果が0件であれば、移行可能です。
✅ まとめ
Data Pumpによるトランスポータブル表領域は、高速で柔軟な移行手段です。
コマンドもシンプルで、手順をマスターすれば実務でもすぐ活用できます。
[参考]
Oracle® Databaseユーティリティ 19c
コメント