エクスポート、インポート ユーティリティの使用上の注意

オリジナルのエクスポート、インポート ユーティリティ*1は、 データを移動するように設計されている。バックアップやリカバリが本来の目的ではない。 Oracle もエクスポート、インポートユーティリティ のみ でバックアップすることを控えるように注意している(※)。 そして多くは単発のホット・バックアップとしてコード・バックアップの補助に使用されていると思う。

(※) Oracle Database 概要 マニュアル Import/Export Utility によるリカバリを使用する場合

エクスポート元と異なる表領域にインポートする場合

コピー元と異なる 表領域 にエクスポートしたデータをインポートしたい場合(実機 ⇒ 共有テスト環境など)、以下のステップで任意の表領域にインポートさせることができる。

DBA や RESOURCE ロール所有なら剥奪する。

REVOKE DBA FROM username;
REVOKE RESOURCE FROM username;

投入先に同じ表領域が存在しているとき QUOTA により作成不可にする

ALTER USER username QUOTA 0 ON exist_tablespace;

デフォルト表領域の設定
入れたいテーブルスペースをデフォルト表領域に設定する

ALTER USER username DEFAULT TABLESPACE target_tablespace;

インポート・ユーティリティを実行する。

権限を元に戻す
ロール、QUOTA およびデフォルト表領域を元に戻す。

外部 LOB 型、VARRY 型、OPAQUE 型などのある特定のタイプを使用している場合や パーティション表オーバフロー付き索引構成表 などの場合にも、この方法は失敗する。 その場合には最新のテーブル定義をあらかじめ投入しておく。 もし DDL が無い場合には DDL だけをエクスポートする例 を利用して表領域設定を編集するか、 手作業で DDL を作成するなどして実行しておく。
インポートするときに 'IGNORE=Y' オプション付でインポートする。

エキスポートの一貫性

ここでの一貫性とはエクスポート中の更新によるテーブル間の不整合が発生しないようにすることである。

CONSISTENT=N :テーブル単位で一貫性保持
CONSISTENT=Y :エクスポートの処理単位で一貫性保持

EXP 〜 CONSISTENT=Y FULL=Y の場合ならば DB 全体で一貫性が保持される。 この間は、UNDO 領域が一貫性を保つために拡張し続けるので、トランザクションの発生しない時間に行う。 また、別のトランザクションが並行稼動している状態で長時間のエクスポートを行なっている場合には ORA-01555: スナップショットが古すぎます が発生する可能性が高い。
大量のデータがあるテーブルを複数所持している場合、一貫性を保つテーブル毎にグループ化してエクスポート作業を分割する。 分割して複数回のエクスポートを行なうことで全体をバックアップする方法は読み取り一貫性を保証する時間を短くできるためエラーが発生しにくくなる。

CONSISTENT=N のときの注意点
このエクスポート方法では、複数のテーブルを更新するようなトランザクションを並行して実行中の場合、 テーブル間でトランザクションの前のデータと後のデータが、それぞれエクスポートされる危険性がある。
このため、整合性を保ったバックアップデータとしては役に立たない。

CONSISTENT=Y のときの注意点
エクスポート中のデータの更新により、UNDO 領域が不足してかつ拡張もできない場合エクスポートに失敗する。 (UNDO 領域の自動拡張する設定にしていればエラーは発生しない。しかし UNDO 表領域の縮小作業は面倒なため、 常に拡張分のディスク容量設計がされていることが前提となる。)
また、復旧時のインポートには、データを DELETE(TRUNCATE) が必要になることが多いので注意する。 不完全リカバリ (Point in time) は不可能。

インポート時の注意点

他のデータベースにデータの複製を行う場合、インポート先のデータファイルの自動拡張が起こらないようにする。 この自動拡張が発生していまうと断片化も発生する可能性があり、拡張処理のため投入所要時間が大幅に増えてしまう。
インポートの所要時間は、エクスポートの数倍〜十数倍かかることがあるのでしっかり検証して作業時間を見積もっておく。
エクスポートには ダイレクト読み込みモードがあるがインポートには ダイレクト・パス・ロード はない。(DataPump のインポートユーティリティにはダイレクトモードが追加されている)

移行元と移行先のインスタンスのバージョンが異なる場合

移行元と移行先のデータベースのバージョンが異なる場合には、必ず低い方のバージョン(マイナーバージョン番号にも注意)の エクスポート・ユーティリティでデータをエクスポートする。 移行先では、接続可能であり(※1)、かつ、そのダンプファイルを取り扱うことができる(※2) インポート・ユーティリティを使用する。

例) Oracle 10g から Oracle 9i に移行する場合

Oralce 10g -> export(9i) -> ファイル転送 -> import(9i) -> Oracle 9i

例) Oracle 8i から Oracle 10g に移行する場合

Oralce 8i(※) -> export(8i) -> ファイル転送 -> import(10g) -> Oracle 10g

旧製品のアップグレードにおいて「全体エクスポート」がサポートされているのはターミナルバージョンのみ
Oracle8 R8.0.6 / Oracle8i R8.1.7 / Oracle9i R9.0 / R9.2
トランスポータブル表領域による移行ができるのは Oracle 8i から

(※1) 接続可能製品 マトリックス

(※2) エクスポート・インポートユーティリティは上位互換である。



EXP/IMP 関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)

*1 Data Pump ユーティリティが登場してから旧来のエクスポート、インポート ユーティリティは、オリジナルのエクスポート、インポート ユーティリティと書かれている。