Data Pumpトランスポータブル表領域 実行手順をわかりやすく解説!

Oracle Master Gold

前回の記事では、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

コメント

タイトルとURLをコピーしました