Oracle Data Pump: エクスポート / インポート、データ移行、スキーマ・リフレッシュ、トランスポータブル
Oracleレベル: 中級所要時間: 30~90分(データ量による)expdp/impdp による表、スキーマ、表領域または全体(FULL)単位のエクスポート、インポート、2つのデータベース間の移行(ダンプ・ファイル + scp + チェックサム、または NETWORK_LINK)、ダンプからの DDL 抽出(SQLFILE)。ディレクトリ、ユーザー、パラメータ・ファイルの準備、一貫性、パラレル化、リマップ、監視、中断したジョブのクリーンアップを含みます。RAC では SCAN + サービス接続、共有ディレクトリでの CLUSTER=YES またはローカル・ディスクでの CLUSTER=NO、オプションとして Wallet を使うスクリプトと /etc/cron.d によるエクスポートのスケジュール設定。シナリオ: 本番からテストへのスキーマ・リフレッシュ(DROP USER … CASCADE または TABLE_EXISTS_ACTION=REPLACE、パスワード/プロファイルと権限の保持)、トランスポータブル表領域(同一/異なるプラットフォームとエンディアン、RMAN CONVERT)、フル・トランスポータブル(11g/12c → 19c PDB)、ダンプの暗号化と圧縮、大規模移行のパフォーマンス、中断したジョブの ATTACH/START_JOB/KILL_JOB による管理。
構成: データベース1つ(シングル・インスタンス、Oracle Restart または RAC)。移行ではソース + ターゲット
シナリオ
- エクスポート: データベースからダンプ・ファイルを作成する — 表、スキーマ、表領域またはデータベース全体をダンプ・ファイルに書き出します(expdp)。データベースはオープンのままで、アプリケーションも稼働を続けます。論理コピーであり、RMAN バックアップの代わりにはなりません(Point-in-Time リカバリと完全リカバリには RMAN が必要です)。
- インポート: ダンプ・ファイルをデータベースにロードする — 取得済みのダンプ・ファイルを impdp でロードします。スキーマ名、表領域名、表名はリマップできます。ターゲットはオープンのままですが、ロードするオブジェクトを使うアプリケーションは停止する必要があります。
- 移行: ソース・データベースからターゲットへデータを移す — エクスポート → ファイル・コピー → インポート、または NETWORK_LINK でダンプ・ファイルを使わず直接移行します。ターゲットにスキーマがまだない場合(初回ロード)はこのカードを選択します。ターゲットに同じスキーマがすでにあり、本番のものと置き換える場合は「スキーマ・リフレッシュ」カードを選択します。ソースはオープンのままです。
- ダンプ・ファイルから DDL のみを抽出する (SQLFILE) — 何もロードされず、オブジェクトの CREATE 文が .sql ファイルに書き出されます。データベースは変更されません。
- 本番からテストへのスキーマ・リフレッシュ (refresh) — テスト/UAT にすでにあるスキーマを、本番の最新の状態で置き換えます。ターゲット・スキーマのバックアップ、セッションの切断、DROP USER … CASCADE または TABLE_EXISTS_ACTION=REPLACE、パスワード/プロファイルと権限の保持を行います。ソースはオープンのままですが、ターゲット・スキーマは作業中は使用できません。
- データファイルのコピーで表領域を移す (トランスポータブル表領域) — 大きな表領域(数百 GB 以上)は、行単位ではなくデータファイルをコピーして移します。同一または異なるプラットフォーム/エンディアン(RMAN CONVERT)に対応します。キャラクタ・セットは両側で同じである必要があります。ソースでは作業中、表領域が READ ONLY になります(書込みの停止)。
- データベース全体を移す: フル・トランスポータブル (11g/12c → 19c, 非CDB → PDB) — FULL=Y TRANSPORTABLE=ALWAYS により、ユーザー表領域はデータファイルとして、それ以外のすべて(ユーザー、PL/SQL、権限)はメタデータとして新しい PDB に移されます。11.2.0.3 以上のソースでは VERSION=12 を指定します。ソースでは作業中、すべてのユーザー表領域が READ ONLY になります。
- 中断 / 停滞した Data Pump ジョブ: 監視、再開、終了 — expdp/impdp ジョブが停滞している(resumable wait)、停止している、または中断した状態です。ATTACH で接続して再開する、KILL_JOB で終了する、あるいは孤立したマスター表をクリーンアップします。データベースはオープンのままです。
開始前の確認
- コマンドはデータベース・サーバー上で oracle ユーザーとして実行します。このユーザーのログイン・プロファイルで ORACLE_HOME、ORACLE_SID、PATH 変数が定義され、expdp/impdp にパスが通っていることを前提とします。expdp、impdp、sqlplus は $ORACLE_HOME/bin 配下にあり、PATH に含まれていないと bash: expdp: command not found になります(. oraenv を実行するか、フルパス $ORACLE_HOME/bin/expdp を使います)。… RAC では、各ノードの ORACLE_SID はそのノードのインスタンス名です(例: ノード1では ……………)。…
- データベースは 12.2 以降(19c、21c、23ai)。このガイドで使う LOGTIME、ENCRYPTION_PWD_PROMPT、DISABLE_ARCHIVE_LOGGING パラメータは 12c で導入されました。10g/11g ではパラメータ一覧が異なります。Oracle 9i 以前の .dmp ファイルは旧来の imp でしか開けません。… フル・トランスポータブル: エクスポートは 11.2.0.3 から(11g では VERSION=12 を指定)、インポートは 12.1 からサポートされます。11g には LOGTIME/METRICS がないため、この場合ガイドではこれらを使いません。…
- リスナーが起動しており、… サービスが登録されている…。ターゲットで … サービスが登録されている…。
- ターゲット・サーバーでリスナーが起動しており、… サービスが登録されている。
- ……(ソース)および …(ターゲット)… に十分な空き領域がある。エクスポートでは見積りサイズ分(COMPRESSION=ALL では通常 3~5 分の1)、インポートではダンプ・ファイルがすでにこのディレクトリにあること。ディレクトリはデータファイルや FRA と同じディスクに置かない。
- 長時間の一貫性のある(FLASHBACK_TIME/SCN)エクスポートで ORA-01555 を避けるため、UNDO_RETENTION がエクスポート時間より長く(例: 3時間のエクスポートなら最低 10800 秒)、UNDO 表領域がその期間に足りる大きさ(autoextend)である。
- インポートは大量の REDO を生成します。データベースが ARCHIVELOG モードの場合、FRA(またはアーカイブ先)に空きが必要です。DISABLE_ARCHIVE_LOGGING は FORCE LOGGING が有効な場合(Data Guard)は効果がありません。
- ターゲット・データベースに最新の RMAN バックアップがあり、切り戻し方法が決まっている(インポートは取り消せません。誤ったスキーマへのインポートや TRUNCATE/REPLACE によるインポートは、バックアップまたは Flashback でしか元に戻せません)。重要な環境では、インポート前に保証付きリストア・ポイントを作成できます(ARCHIVELOG + FRA が必要)。
- メンテナンス・ウィンドウを計画済み: …ソースでは移送する表領域がエクスポートとデータファイルのコピーの間 READ ONLY になります(書き込むアプリケーションはエラー ORA-00372 になります)。ターゲットではプラグイン中に新しいオブジェクトを使用しないこと…インポート中はターゲットのオブジェクトを使うアプリケーションを停止するか、影響がないことを確認すること…一貫性オプションを選択していないため、エクスポート中はアプリケーションの書込みを停止すること…。
- ソースの oracle ユーザーがターゲットにパスワードなし(鍵認証)で SSH/SCP できる、またはファイルを別の方法(共有ストレージ、オブジェクト・ストレージ)で移す。
- ターゲット・サーバーからソースのリスナー・ポート(…:…)に到達できる(ファイアウォールが開いている)。
- ライセンスの確認: …COMPRESSION=ALL(および DATA_ONLY)には Advanced Compression Option のライセンスが必要です。……ダンプの暗号化(ENCRYPTION、ENCRYPTION_PASSWORD/ENCRYPTION_PWD_PROMPT)には Enterprise Edition の Advanced Security Option ライセンスが必要です。…ライセンスがない場合は、これらのオプションをオフにしてください。
ガイドのフェーズ
- 準備: 環境、ユーザー、ディレクトリ — 環境とリスナー・サービスを確認する · 環境とリスナー・サービスを確認する (ソース) · 環境とリスナー・サービスを確認する (ターゲット) · SCAN とサービスのインスタンスを確認する · リリース、キャラクタ・セット、ログ・モードを確認する · リリース、キャラクタ・セット、ログ・モードを確認する (ソース) …
- 1. 診断: ターゲットは正しいか (スキーマ・リフレッシュ) — ターゲット・スキーマの状態を記録する (ターゲット) · ソース・スキーマの状態を記録する (ソース)
- 2. セーフティ・ネット: ターゲット・スキーマのバックアップとユーザー定義 — テスト・ユーザーの定義と権限を保存する (ターゲット) · ターゲット・スキーマをバックアップする (ターゲット)
- 1. 診断: トランスポータブルの前提条件 — ソースのプラットフォーム、キャラクタ・セット、表領域セットを確認する (ソース) · ターゲットのプラットフォーム、キャラクタ・セット、名前の重複を確認する (ターゲット)
- 2. セーフティ・ネットと準備 — データファイルの一覧と現在の READ ONLY 状態を記録する (ソース) · ターゲットのデータファイル・ディレクトリを準備する (ターゲット)
- 3. 実行: ソースで READ ONLY、メタデータのエクスポートとコピー — 表領域を READ ONLY にする (ソース) · トランスポータブル・エクスポートのパラメータ・ファイルを作成する (ソース) · メタデータのエクスポートを実行する (ソース) · データファイルとダンプをターゲットにコピーする (ソース)
- 4. 実行: ターゲットでのプラグイン — コピーしたファイルを検証する (ターゲット) · データファイルをこのプラットフォーム用に変換する: RMAN CONVERT (ターゲット) · オブジェクト所有者のスキーマを作成する (ターゲット) · プラグイン用インポートのパラメータ・ファイルを作成する (ターゲット) · プラグイン・インポートを実行する (ターゲット) · 表領域を書込み可能にする (ターゲット)
- 5. 検証と事後作業 — 表領域外のオブジェクトをエクスポートする (ソース) · 表領域外のオブジェクトをロードする (ターゲット) · 無効なオブジェクトをコンパイルして検証する (ターゲット) · ソースの表領域を READ WRITE に戻す (ソース)
- エクスポート — 大きなオブジェクト、LOB、パーティションを確認する · サイズを見積もる (ESTIMATE_ONLY) · サイズを見積もる (ESTIMATE_ONLY) (ソース) · エクスポートのパラメータ・ファイルを作成する · エクスポートのパラメータ・ファイルを作成する (ソース) · エクスポートを実行する …
- ダンプ・ファイルのターゲットへの移動 — チェックサム・ファイルを作成する · ダンプ・ファイルをターゲットにコピーする · ターゲットでチェックサムを検証する
- データベース・リンク (NETWORK_LINK) — ターゲットでデータベース・リンクを作成する
- 3. 実行: ターゲット・スキーマを空にする — ユーザーをロックしてセッションを切断する (ターゲット) · スキーマを削除してテスト・ユーザーを再作成する (ターゲット) · REPLACE モードで更新されないオブジェクトを一覧表示する (ターゲット)
- インポート — ダンプ・ファイルを確認する · ダンプ・ファイルを確認する (ターゲット) · ターゲットの領域と既存スキーマを確認する · ターゲットの領域と既存スキーマを確認する (ターゲット) · インポートのパラメータ・ファイルを作成する · インポートのパラメータ・ファイルを作成する (ターゲット) …
- インポート後: コンパイルと統計 — 無効なオブジェクトをコンパイルする · 無効なオブジェクトをコンパイルする (ターゲット) · 統計を収集する · 統計を収集する (ターゲット)
- 4. 検証と事後作業 (スキーマ・リフレッシュ) — 本番から持ち込んだスケジューラ・ジョブを無効化する (ターゲット) · スキーマが他に付与している権限を再適用する (ターゲット) · オブジェクト、シノニム、リンクを確認する (ターゲット) · ユーザーのロックを解除する (ターゲット)
- SQLFILE: ダンプからの DDL 抽出 — ダンプ・ファイルを確認する · SQLFILE のパラメータ・ファイルを作成する · DDL ファイルを生成する · DDL ファイルを確認する
- スケジュール: エクスポートを定期的に実行する (cron) — スクリプト、ログ、TNS のディレクトリを準備する… (…)… · Wallet を作成して資格証明を追加する · Wallet を他のノードにコピーする · sqlnet.ora を作成する (このジョブ専用)… (…)… · tnsnames.ora を作成する (このジョブ専用)… (…)… · エクスポート・スクリプトを作成する… (…)… …
- 1. 診断: ジョブの状態 — ジョブの状態、セッション、待機理由を表示する · 結果を解釈して操作を選ぶ
- 2. 実行: ジョブを再開する — 停止または一時停止の原因を解消する · ジョブに接続して再開する (ATTACH、START_JOB) · ジョブが実行中であることを確認する
- 2. 実行: ジョブを終了する (KILL_JOB) — ジョブに接続して KILL_JOB で終了する · ジョブがなくなったことを確認する
- 2. 実行: 孤立したマスター表をクリーンアップする — 孤立したジョブのマスター表を削除する
- 監視 — 実行中のジョブを監視する · 実行中のジョブを監視する (ソース) · 実行中のジョブを監視する (ターゲット) · ジョブに接続する: ATTACH と対話型コマンド · ジョブに接続する: ATTACH と対話型コマンド (ソース) · ジョブに接続する: ATTACH と対話型コマンド (ターゲット)
- クリーンアップとセキュリティ — 中断したジョブとマスター表を一覧表示する · 中断したジョブとマスター表を一覧表示する (ソース) · 中断したジョブとマスター表を一覧表示する (ターゲット) · ジョブを KILL_JOB で終了する · ジョブを KILL_JOB で終了する (ソース) · ジョブを KILL_JOB で終了する (ターゲット) …