「特定の表領域だけバックアップしたい」「別の表領域に移行したい」――OracleのData Pump(expdp/impdp)は、スキーマ単位・テーブル単位だけでなく、表領域(Tablespace)単位でもエクスポート・インポートできます。
この記事では、tablespacesパラメータの基本的な使い方から、remap_tablespaceによる再配置、並列実行、よくあるエラーと対処法まで実務レベルで解説します。
この記事で学べること
- Data Pumpのエクスポードモード比較(FULL/SCHEMA/TABLE/TABLESPACE)
- 前提確認:DATA_PUMP_DIRの確認・表領域の所有オブジェクト確認
- expdpで表領域単位にエクスポートするコマンド・オプション
- impdpで表領域単位にインポートするコマンド
- REMAP_TABLESPACEで別の表領域に再配置する方法
- REMAP_SCHEMAと組み合わせた環境移行パターン
- 並列実行(PARALLEL)でのパフォーマンス向上
- よくあるエラーと対処法
Data Pumpのエクスポートモード比較
expdp/impdpには複数のエクスポードモードがあります。用途に応じて使い分けましょう。
| モード | パラメータ | 対象範囲 | 用途 |
|---|---|---|---|
| フル | FULL=Y |
DB全体 | 全体バックアップ・DB移行 |
| スキーマ | SCHEMAS=スキーマ名 |
指定スキーマのオブジェクト全体 | スキーマ単位のバックアップ・移行 |
| テーブル | TABLES=テーブル名 |
指定テーブルのみ | 部分バックアップ・テーブル移行 |
| 表領域 | TABLESPACES=表領域名 |
指定表領域のオブジェクト全体 | 表領域単位の移行・バックアップ(本記事) |
前提確認:実行前に確認すること
① DATA_PUMP_DIRの確認
Data Pumpはデータベースサーバー上のディレクトリオブジェクトを経由してファイルを読み書きします。デフォルトの DATA_PUMP_DIR のパスを確認しておきましょう。
② 対象表領域とそのオブジェクトを確認
注意:表領域モードは対象表領域のオブジェクトを所有するスキーマのオブジェクトすべてが対象になります。SYSなど内部スキーマのオブジェクトが含まれる表領域(SYSTEM, SYSAUXなど)では使用しないでください。
expdpで表領域単位にエクスポートする
基本コマンド
使用例:USERS表領域をエクスポート
複数の表領域を一括エクスポート
ポイント:ファイル名に %U を含めると複数ファイルに分割したとき 01〜99 の連番が付きます。大容量の表領域を扱う場合は filesize オプションと組み合わせましょう。
主要オプション一覧
| オプション | 説明 | 例 |
|---|---|---|
COMPRESSION |
圧縮指定(ALL/DATA_ONLY/METADATA_ONLY/NONE) | compression=ALL |
PARALLEL |
並列ワーカー数(Enterprise Edition + Advanced Compression要) | parallel=4 |
FILESIZE |
出力ファイルの最大サイズ(超えると%Uで分割) | filesize=5G |
EXCLUDE |
特定オブジェクト種別を除外 | exclude=INDEX |
CONTENT |
DATA_ONLY/METADATA_ONLYで内容を限定 | content=DATA_ONLY |
impdpで表領域単位にインポートする
基本コマンド
impdp の tablespaces パラメータの意味:インポート時に指定した場合は「dumpfile内のデータのうち、指定した表領域に属するオブジェクトだけをインポートする」というフィルタとして機能します。dumpfileがフル(FULL=Y)で取得されていても、特定の表領域だけを選んで復元できます。
SQLFILE オプションでSQLを確認してからインポート
実際にインポートする前に、実行されるDDLをファイルに出力して確認できます。
REMAP_TABLESPACEで別の表領域に再配置する
インポート先の表領域名をエクスポート元と変えたい場合は remap_tablespace を使います。環境移行(本番→検証)やストレージ再構成に欠かせないオプションです。
複数の表領域を同時に再配置
複数の remap_tablespace を並べて指定できます。
注意:remap_tablespace の移行先の表領域は事前に作成しておく必要があります。存在しない表領域を指定するとインポートがエラーになります。
REMAP_SCHEMAと組み合わせた環境移行パターン
本番から検証環境へのデータ移行では、スキーマ名と表領域名を同時に置き換えることが多いです。remap_schema と remap_tablespace を組み合わせましょう。
| TABLE_EXISTS_ACTION | 動作 | 用途 |
|---|---|---|
SKIP |
既存テーブルはスキップ(デフォルト) | 追加インポート |
APPEND |
既存テーブルにデータを追記 | 差分追加 |
TRUNCATE |
既存テーブルをTRUNCATEしてからインポート | 全件置き換え |
REPLACE |
既存テーブルをDROPしてからCREATE+インポート | 完全置き換え(制約・インデックスも再作成) |
並列実行(PARALLEL)でパフォーマンスを向上させる
parallelオプションで複数のワーカープロセスを使い、エクスポート・インポートを高速化できます。ファイル名に %U を含めて並列ファイル出力と組み合わせるのが基本です。
ポイント:PARALLELはOracle Enterprise Edition + Data Pump機能ライセンスが必要です。Standard Editionでは使用できません。CPUコア数以下のワーカー数を目安に設定しましょう。
ログ確認と実行中の進捗確認
実行中ジョブの進捗を確認する
別ターミナルからexpdp/impdpのジョブに接続してステータスを確認できます。
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
ORA-39002invalid operation |
ディレクトリオブジェクトが存在しない、または権限がない | CREATE DIRECTORYでディレクトリ作成後、GRANT READ,WRITE ON DIRECTORYで権限付与 |
ORA-39166Object not found |
指定した表領域名が存在しない(大文字・小文字に注意) | 表領域名は通常大文字。SELECT tablespace_name FROM dba_tablespaces;で確認 |
ORA-31684Object already exists |
インポート先に同名のオブジェクトが存在する | table_exists_action=REPLACEまたはTRUNCATEを指定する |
ORA-01658unable to create INITIAL extent |
インポート先の表領域の空き容量不足 | 表領域を拡張するか、remap_tablespaceで別の表領域に移行 |
ORA-39083Object type failed to create |
参照先スキーマ・オブジェクトが移行先にない | 依存オブジェクトを先にインポートするか、remap_schemaで対応 |
よくある質問(FAQ)
まとめ
Data Pumpによる表領域単位のエクスポート・インポートのポイントを整理します。
| やりたいこと | 使うパラメータ |
|---|---|
| 表領域単位でエクスポート | expdp ... tablespaces=表領域名 |
| 表領域単位でインポート | impdp ... tablespaces=表領域名 |
| インポート先の表領域を変える | remap_tablespace=旧:新 |
| スキーマ名と表領域名を同時に変える | remap_schema=旧:新 remap_tablespace=旧:新 |
| 大容量を高速処理 | parallel=N dumpfile=file_%U.dmp |
表領域モードは物理配置に基づいた柔軟なバックアップ・移行を可能にします。remap_tablespace と組み合わせることで、本番から検証環境への環境再構築や、ストレージ再配置もシンプルに実現できます。

