この章では、オリジナルのエクスポート・ユーティリティを使用して作成されたダンプ・ファイルを、オリジナルのインポート・ユーティリティ(imp
)を使用してインポートする方法を説明します。
この章の内容は、次のとおりです。
インポート・ユーティリティは、オリジナルのエクスポート・ユーティリティで作成されたダンプ・ファイルからオブジェクトの定義および表データを読み込みます。ダンプ・ファイルはOracleのバイナリ形式になっており、オリジナルのインポートを使用した場合のみ読取りが可能です。
ダンプ・ファイルの作成に使用したエクスポート・ユーティリティより前のバージョンのインポート・ユーティリティは使用できません。
表オブジェクトは、エクスポート・ダンプ・ファイルから読み込まれたとおりにインポートされます。ダンプ・ファイルには、次の順序でオブジェクトが格納されています。
型定義
表定義
表データ
表索引
整合性制約、ビュー、プロシージャおよびトリガー
ビットマップ索引、ファンクション索引およびドメイン索引
インポートの順序は次のとおりです。まず、新しい表が作成されます。次にデータがインポートされ、索引が作成されます。その後トリガーがインポートされ、整合性制約が新しい表で使用可能になり、ビットマップ索引、ファンクション索引またはドメイン索引(あるいはそれらのすべて)が作成されます。このようにインポートされると、表のインポート順序が原因でデータが拒否されることがなくなります。また、同じデータについて、トリガーが重複して2回(最初の挿入時に1回、インポート中に1回)起動することもなくなります。
インポート・ユーティリティを使用する前に、次のことを行う必要があります(詳細は以降の項を参照してください)。
データベースを手動で作成した場合は、catexp.sql
またはcatalog.sql
スクリプトが実行されたことの確認。Database Configuration Assistant(DBCA)を使用してデータベースを作成した場合は、これらのスクリプトを実行する必要はありません。
必要なアクセス権限を所有していることの確認
インポート・ユーティリティを使用するには、データベースを作成するかまたは新しいバージョンに移行した後で、スクリプトcatexp.sql
または(catexp.sql
を実行する)catalog.sql
を実行する必要があります。
データベースに対して、catexp.sql
またはcatalog.sql
を実行するのは1回のみです。スクリプトを実行すると、次の処理が行われ、データベースはエクスポートおよびインポート操作に備えて調整されます。
インポート・ユーティリティを使用するには、Oracle Databaseに対するCREATE SESSION
権限が必要です。この権限は、データベースの作成時に設定されるCONNECT
ロールに含まれます。
他のユーザーが作成したエクスポート・ファイルをインポートすることもできます。ただし、EXP_FULL_DATABASE
ロールを所有するユーザーが作成したエクスポート・ファイルをインポートするには、IMP_FULL_DATABASE
ロールが必要です。通常、データベース管理者(DBA)にはこれらの両方のロールが割り当てられています。
表22-1に、自分のスキーマにオブジェクトをインポートするために必要な権限を示します。 これらのすべての権限は、あらかじめRESOURCE
ロールに含まれています。
表22-1 自分のスキーマにオブジェクトをインポートするために必要な権限
オブジェクト | 必要な権限(該当する場合の権限タイプ) |
---|---|
クラスタ |
|
データベース・リンク |
|
表のトリガー |
|
スキーマのトリガー |
|
索引 |
|
整合性制約 |
|
ライブラリ |
|
パッケージ |
|
プライベート・シノニム |
|
順序 |
|
スナップショット |
|
ストアド・ファンクション |
|
ストアド・プロシージャ |
|
表データ |
|
表定義(コメントおよび監査オプションを含む) |
|
ビュー |
実表の場合は |
オブジェクト型 |
|
外部関数ライブラリ |
|
ディメンション |
|
演算子 |
|
索引タイプ |
|
他のユーザーに付与されている権限をインポートするには、インポートを開始したユーザーがそのオブジェクトの所有者であるか、WITH
GRANT
OPTION
付きのオブジェクト権限を所有している必要があります。表22-2に、権限がターゲット・システムで有効となるために必要な条件を示します。
システム・オブジェクトを全データベース・エクスポート・ファイルからインポートする場合は、IMP_FULL_DATABASE
ロールを使用可能にする必要があります。パラメータFULL
を指定すると、次のシステム・オブジェクトがインポート対象に含まれます。
プロファイル
パブリック・データベース・リンク
パブリック・シノニム
ロール
ロールバック・セグメント定義
リソース・コスト
外部関数ライブラリ
コンテキスト・オブジェクト
システム・プロシージャ・オブジェクト
システム監査オプション
システム権限
表領域定義
表領域割当て制限
ユーザー定義
ディレクトリ別名
システム・イベント・トリガー
この項では、既存の表にデータをインポートする場合に考慮すべき点について説明します。
エクスポート・ファイルから表にデータをインポートする前に手動で表を作成する場合は、以前使用した表定義を使用するか、互換性のある形式を使用して表を作成します。たとえば、列幅の増加および列順序の変更はできますが、次のことはできません。
NOT NULL
列の追加
互換性がないデータ型への列のデータ型の変更(たとえば、LONG
型からNUMBER
型への変更)
表で使用されているオブジェクト型定義の変更
DEFAULT
列値の変更
注意: データをインポートする前に表を手動で作成した場合は、表がすでに存在するため、エクスポート・ダンプ・ファイルでCREATE TABLE 文を実行するとエラーが発生します。このエラーを回避して、表へのデータのロードを継続するには、インポート・パラメータをIGNORE =y に設定します。設定しない場合、表作成エラーが発生し、データは表にロードされません。 |
通常のインポートの順序では、参照制約はすべての表がインポートされた後にインポートされます。この順序でインポートすることによって、まだインポートされていないデータに対する参照整合性制約が存在する場合に発生するエラーを回避できます。
データが既存の表にロードされる場合に、このようなエラーが発生することがあります。たとえば、表emp
でmgr
列に参照整合性制約が定義されており、その制約によって表emp
内のマネージャ番号が検証される場合、マネージャの行がインポートされていない時点では、従業員の行が基準を満たしていても、参照整合性制約の違反になることがあります。
このようなエラーが発生すると、エラー・メッセージが生成され、失敗した行をバイパスして、引き続き他の行が表にインポートされます。制約を手動で使用禁止にすると、このエラーを回避できます。
複数の表にまたがって参照制約が存在すると、問題になることがあります。たとえば、emp
表の順序がエクスポート・ダンプ・ファイル内でdept
表より先であるにもかかわらず、emp
表からdept
表へ参照チェックが行われると、参照制約違反のため、emp
表のいくつかの行がインポートされないことがあります。
このようなエラーが発生しないようにするには、データを既存の表にインポートするときに、参照整合性制約を使用禁止にします。
特定のスキーマに対するDDLイベントまたはデータベースに対するDDL関連イベントで実行するように定義されているトリガーは、システム・トリガーです。これらのトリガーは、特定のインポート操作に悪い影響を与える場合があります。たとえば、表などのデータベース・オブジェクトを正常に再作成できない場合があります。これによって、トリガーが原因で問題が発生したということがわからないエラーが返されます。
データベース管理者およびシステム・トリガーを作成するユーザーは、このようなトリガーによって、ユーザーが、権限を持つデータベースの操作を実行できなくなることがないように確認する必要があります。システム・トリガーをテストするには、次の手順に従います。
トリガーを定義します。
データベース・オブジェクトを作成します。
表モードまたはユーザーモードでオブジェクトをエクスポートします。
オブジェクトを削除します。
オブジェクトをインポートします。
オブジェクトが正常に再作成されていることを確認します。
注意: 全体エクスポートでは、スキーマSYS が所有するトリガーはエクスポートされません。SYS トリガーは、全体インポートの前後のいずれかに手動で再作成する必要があります。このトリガーによってインポートの進行を妨げるような処理が定義されないように、インポートの後に再作成することをお薦めします。 |
次のいずれかの方法を使用して、インポート・ユーティリティの起動およびパラメータの指定ができます。
コマンドライン
パラメータ・ファイル
対話方式モード
これらのいずれかの方法を使用する前に、使用可能なパラメータについての説明を必ず読んでください。詳細は、「インポート・パラメータ」を参照してください。
次の構文を使用して、すべての有効なパラメータおよびその値をコマンドラインから指定できます(ユーザー名とパスワードを入力するように要求されます)。
imp PARAMETER=value
または
imp PARAMETER=(value1,value2,...,valuen)
システムでのコマンドラインの最大長を超える数のパラメータは指定できません。
パラメータ・ファイルに、すべての有効なパラメータおよびその値を指定できます。複数のパラメータを1つのファイルに格納することによって、これらを簡単に変更したり再利用することができます。データベースごとに別のパラメータを使用する場合は、複数のパラメータ・ファイルを作成できるので、それぞれにパラメータ・ファイルを用意すると便利です。
フラット・ファイル用のテキスト・エディタを使用してパラメータ・ファイルを作成します。コマンドライン・オプションPARFILE=
filename
を指定すると、インポート・ユーティリティは、コマンドラインからではなく指定されたファイルからパラメータを読み込みます。次に例を示します。
パラメータ・ファイルは、次のいずれかの構文を使用して指定します。
PARAMETER=value PARAMETER=(value) PARAMETER=(value1, value2, ...)
次に、パラメータ・ファイル内のリストの一部を示します。
FULL=y FILE=dba.dmp GRANTS=y INDEXES=y CONSISTENT=y
シャープ(#)記号を使用すると、パラメータ・ファイルにコメントを追加できます。シャープ(#)の右側にある文字はすべて無視されます。
コマンドラインでのパラメータの入力と同時にパラメータ・ファイルを指定できます。実際、パラメータ・ファイルとコマンドラインの両方に同じパラメータを指定することもできます。コマンドラインでのPARFILE
パラメータと他のパラメータの位置によって、優先されるパラメータが決まります。たとえば、パラメータ・ファイルparams.dat
でパラメータINDEXES=y
を指定し、インポート・ユーティリティを次のコマンドで起動するとします。
imp PARFILE=params.dat INDEXES=n
この場合、INDEXES=n
はPARFILE=params.dat
の後にあるため、パラメータ・ファイルに指定されているINDEXES
パラメータの値は、INDEXES=n
によって上書きされます。
各パラメータの値をプロンプトで入力するには、コマンドラインでimp
を指定するだけです。ユーザー名とパスワードを入力するように要求されます。
その後、一般的に使用されるパラメータが表示されます。デフォルト値を受け入れるか(示された場合)、または異なる値を入力できます。コマンドライン対話方式では、すべての機能に関してプロンプトが表示されるわけではありません。また、コマンドライン対話方式は下位互換用のみに提供されています。
SYSDBA
は内部的に使用され、一般ユーザーとは異なる特別な機能を持ちます。そのため、通常、次の場合以外は、インポート・ユーティリティをSYSDBA
で起動する必要はありません。
Oracleサポート・サービスから要求された場合
トランスポータブル表領域セットをインポートする場合
インポート・ユーティリティでは、オンライン・ヘルプが提供されます。インポート・ユーティリティのヘルプを起動するには、imp
help
=y
と入力します。
インポート・ユーティリティには、次の4種類の操作モードがあります。
全体インポート: データベース全体をインポートします。IMP_FULL_DATABASE
ロールを所有するユーザーのみが使用できます。FULL
パラメータを使用してこのモードを指定します。
表領域モード: 特権ユーザーが表領域をOracle Database間で移動できます。TRANSPORT_TABLESPACE
パラメータを使用してこのモードを指定します。
ユーザー・モード: 所有するすべてのオブジェクト(表、権限、索引、プロシージャなど)をインポートできます。特権ユーザーがユーザー・モードでインポートする場合、指定したユーザー・グループのユーザーのスキーマにあるすべてのオブジェクトをインポートできます。このモードを指定するには、FROMUSER
パラメータを使用します。
表モード: 特定の表およびパーティションをインポートできます。特権ユーザーは、インポートする表を含むスキーマを指定して、その表を修飾できます。TABLES
パラメータを使用してこのモードを指定します。
表22-3に、各モードでインポートされるオブジェクトのリストを示します。
IMP_FULL_DATABASE
ロールを持つユーザーは、これらのモードのいずれかを指定する必要があります。指定しない場合、インポートはエラーになります。IMP_FULL_DATABASE
ロールを持たないユーザーがこれらのモードをいずれも指定しない場合は、ユーザー・レベルのインポートが実行されます。
表22-3 各モードでインポートされるオブジェクト
オブジェクト | 表モード | ユーザー・モード | 全データベース・モード | 表領域モード |
---|---|---|---|---|
分析クラスタ |
なし |
あり |
あり |
なし |
分析表/統計 |
あり |
あり |
あり |
あり |
アプリケーション・コンテキスト |
なし |
なし |
あり |
なし |
監査情報 |
あり |
あり |
あり |
なし |
Bツリー索引、ビットマップ索引、ドメイン・ファンクション索引 |
あり脚注 1 |
あり |
あり |
あり |
クラスタ定義 |
なし |
あり |
あり |
あり |
列コメントおよび表コメント |
あり |
あり |
あり |
あり |
データベース・リンク |
なし |
あり |
あり |
なし |
デフォルト・ロール |
なし |
なし |
あり |
なし |
ディメンション |
なし |
あり |
あり |
なし |
ディレクトリ別名 |
なし |
なし |
あり |
なし |
外部表(データなし) |
あり |
あり |
あり |
なし |
外部関数ライブラリ |
なし |
あり |
あり |
なし |
表の所有者以外のユーザーが所有する索引 |
あり(特権ユーザーのみ) |
あり |
あり |
あり |
索引タイプ |
なし |
あり |
あり |
なし |
JavaリソースおよびJavaクラス |
なし |
あり |
あり |
なし |
ジョブ・キュー |
なし |
あり |
あり |
なし |
ネストした表のデータ |
あり |
あり |
あり |
あり |
オブジェクト権限 |
あり(表および索引のみ) |
あり |
あり |
あり |
表で使用されるオブジェクト型定義 |
あり |
あり |
あり |
あり |
オブジェクト型 |
なし |
あり |
あり |
なし |
演算子 |
なし |
あり |
あり |
なし |
パスワード履歴 |
なし |
なし |
あり |
なし |
インスタンスの事後処理およびオブジェクト |
なし |
なし |
あり |
なし |
スキーマの事後プロシージャ処理およびオブジェクト |
なし |
あり |
あり |
なし |
表の事後処理 |
あり |
あり |
あり |
あり |
表の事後プロシージャ処理およびオブジェクト |
あり |
あり |
あり |
あり |
スキーマの事前プロシージャ・オブジェクトおよび処理 |
なし |
あり |
あり |
なし |
表の事前処理 |
あり |
あり |
あり |
あり |
表の事前プロシージャ処理 |
あり |
あり |
あり |
あり |
プライベート・シノニム |
なし |
あり |
あり |
なし |
プロシージャ・オブジェクト |
なし |
あり |
あり |
なし |
プロファイル |
なし |
なし |
あり |
なし |
パブリック・シノニム |
なし |
なし |
あり |
なし |
参照整合性制約 |
あり |
あり |
あり |
なし |
リフレッシュ・グループ |
なし |
あり |
あり |
なし |
リソース・コスト |
なし |
なし |
あり |
なし |
ロール権限 |
なし |
なし |
あり |
なし |
ロール |
なし |
なし |
あり |
なし |
ロールバック・セグメント定義 |
なし |
なし |
あり |
なし |
表のセキュリティ・ポリシー |
あり |
あり |
あり |
あり |
順序番号 |
なし |
あり |
あり |
なし |
スナップショット・ログ |
なし |
あり |
あり |
なし |
スナップショットおよびマテリアライズド・ビュー |
なし |
あり |
あり |
なし |
システム権限 |
なし |
なし |
あり |
なし |
表制約(主キー制約、一意制約、CHECK制約) |
あり |
あり |
あり |
あり |
表データ |
あり |
あり |
あり |
あり |
表定義 |
あり |
あり |
あり |
あり |
表領域定義 |
なし |
なし |
あり |
なし |
表領域割当て制限 |
なし |
なし |
あり |
なし |
トリガー |
あり |
あり脚注 2 |
あり脚注 3 |
あり |
他のユーザーが所有するトリガー |
あり(特権ユーザーのみ) |
なし |
なし |
なし |
ユーザー定義 |
なし |
なし |
あり |
なし |
ユーザー・プロキシ |
なし |
なし |
あり |
なし |
ユーザー・ビュー |
なし |
あり |
あり |
なし |
ユーザー・ストアド・プロシージャ、ユーザー・ストアド・パッケージおよびユーザー・ストアド・ファンクション |
なし |
あり |
あり |
なし |
脚注 1 非特権ユーザーがエクスポートおよびインポートできるのは、そのユーザー自身が所有する表に関する索引のみです。他のユーザーが所有する表に関する索引や、ユーザー自身が所有する表に関して他のユーザーが作成した索引はエクスポートできません。特権ユーザーは、エクスポートおよびインポート対象に指定したユーザーの表に関する索引が、表の所有者以外のユーザーが作成したものであっても、その索引をエクスポートおよびインポートできます。指定したユーザーが他のユーザーの表に関する索引を所有しているときは、エクスポートするユーザーのリストに表の所有者であるユーザーを指定しないかぎり、その索引はエクスポートされません。
脚注 2 特権ユーザーも非特権ユーザーも、そのユーザー自身が所有するすべてのトリガーを(他のユーザーが所有する表に関するトリガーの場合でも)、エクスポートおよびインポートできます。
脚注 3 全体エクスポートでは、スキーマSYSが所有するトリガーはエクスポートされません。SYSトリガーは、全体インポートの前後のいずれかに手動で再作成する必要があります。このトリガーによってインポートの進行を妨げるような処理が定義されないように、インポートの後に再作成することをお薦めします。
この項では、インポート・コマンドライン・パラメータについて説明します。
デフォルト: オペレーティング・システムによって異なります。
BUFFER
に指定された整数は、転送したデータ行を格納するバッファのバイト数です。
BUFFER
によって、インポートで挿入される配列の行数が決定します。所定の行配列の挿入に必要なバッファ・サイズは、次のように計算できます。
buffer_size = rows_in_array * maximum_row_size
LOB、LONG
、BFILE
、REF
、ROWID
、UROWID
またはTIMESTAMP
の各列が含まれている表には、1回に1行ずつ挿入されます。バッファ・サイズは(LOBおよびLONG
列の場合以外は)、行全体を格納できるだけの容量が必要です。バッファ・サイズが足りずに表の最長の行を格納できない場合、インポート・ユーティリティはさらに大きいサイズのバッファを割り当てようとします。
DATE
列の場合は、バッファの大きさが十分であれば一度に複数の行が挿入されます。
注意: このパラメータのデフォルト値については、ご使用のオペレーティング・システム固有のOracleマニュアルを参照してください。 |
配列を挿入するたびにコミットするかどうかを指定します。デフォルトでは、各表はロードされた後にのみコミットされ、エラーが発生した場合はロールバックを実行してから次のオブジェクトに進みます。
表にネストした表の列または属性が含まれている場合、ネストした表の内容は、それぞれ別の表としてインポートされます。したがって、ネストした表の内容は、常に、外部表をコミットしたトランザクションとは別のトランザクションとしてコミットされます。
パーティション表の場合にCOMMIT=n
を指定すると、エクスポート・ファイルのそれぞれのパーティションおよびサブパーティションは、別のトランザクションとしてインポートされます。
LOB、LONG
、BFILE
、REF
、ROWID
、UROWID
またはTIMESTAMP
の各列が含まれている表では、配列の挿入は行われません。COMMIT=y
が指定されていると、各行の挿入後に表がコミットされます。
デフォルト: y
パッケージ、プロシージャおよびファンクションを、作成時にインポート・ユーティリティでコンパイルするかどうかを指定します。
COMPILE
=n
の場合、これらのユニットは最初の使用時にコンパイルされます。たとえば、ドメイン索引作成に使用されるパッケージは、ドメイン索引作成時にコンパイルされます。
デフォルト: y
表の制約をインポートするかどうかを指定します。デフォルトでは、制約をインポートします。制約をインポートしないようにするには、このパラメータ値をn
に設定します。
IOTおよびオブジェクト表の主キー制約は、常にインポートされます。
デフォルト: n
データのみ(メタデータなし)をダンプ・ファイルからインポートする場合は、DATA_ONLY=y
を指定します。
DATA_ONLY=y
を指定すると、コマンドライン(またはパラメータ・ファイル)で入力されたインポート・パラメータのうち、メタデータと関連のあるパラメータは無効になります。つまり、ダンプ・ファイルからメタデータはインポートされないことになります。
メタデータに関連するパラメータは、COMPILE
、CONSTRAINTS
、DATAFILES
、DESTROY
、GRANTS
、IGNORE
、INDEXES
、INDEXFILE
、ROWS=n
、SHOW
、SKIP_UNUSABLE_INDEXES
、STATISTICS
、STREAMS_CONFIGURATION
、STREAMS_INSTANTIATION
、TABLESPACES
、TOID_NOVALIDATE
、TRANSPORT_TABLESPACE
、TTS_OWNERS
です。
データベースを構成する既存のデータ・ファイルを再利用するかどうかを指定します。つまり、DESTROY=y
と指定すると、インポートではSQL CREATE TABLESPACE
文のデータ・ファイル句にREUSE
オプションが含められ、これにより、オリジナル・データベースのデータ・ファイルの内容が削除された後に、データ・ファイルが再利用されます。
エクスポート・ファイルには、各表領域内で使用されるデータ・ファイル名が含まれていることに注意してください。DESTROY=y
を指定して、2つ目のデータベースを(テストまたはその他の目的で)同じシステム上に作成しようとすると、インポート・ユーティリティでは、表領域を作成するときに最初のデータベースのデータ・ファイルを上書きします。このような場合には、デフォルトのDESTROY=n
を使用して、表領域が作成されるときにデータ・ファイルがすでに存在する場合、エラーが発生するようにする必要があります。また、オリジナル・データベースにインポートする必要がある場合は、既存のデータ・ファイルを置換しないでデータ・ファイルに追加するように、IGNORE=y
を指定する必要があります。
注意: データ・ファイルがRAWデバイスに格納されている場合は、DESTROY=n を指定しても、ファイルは上書きされます。 |
デフォルト: 0
(ゼロ)
n
行分のインポートを1つのピリオドで示すプログレス・バーの表示を指定します。たとえば、FEEDBACK=10
を指定すると、10行分のインポートが終了するたびにピリオドが1つ表示されます。FEEDBACK
値は、インポートされるすべての表に適用されるため、各表に対して個別には設定できません。
インポートするエクスポート・ファイル名を指定します。デフォルトの拡張子は、.dmp
です。エクスポート・ユーティリティは、複数ファイルのエクスポートをサポートしているため(次のFILESIZE
パラメータの説明を参照)、複数のインポート・ファイル名が必要な場合もあります。次に例を示します。
imp scott IGNORE=y FILE = dat1.dmp, dat2.dmp, dat3.dmp FILESIZE=2048
ユーザー自身がエクスポートしたファイルでなくても指定できますが、そのファイルに対する読取り権限が必要です。他のユーザーがエクスポートしたエクスポート・ファイルの場合は、IMP_FULL_DATABASE
ロールが必要です。
デフォルト: オペレーティング・システムによって異なります。
エクスポート時に指定したサイズと同じ最大ダンプ・ファイル・サイズを指定できます。
注意: 許容最大サイズは、オペレーティング・システムによって異なります。この最大値については、FILESIZE を指定する前に、ご使用のオペレーティング・システム固有のOracleマニュアルで確認してください。 |
FILESIZE
の値は、数字にKB(キロバイト数)を付けて指定できます。たとえば、FILESIZE=2KB
は、FILESIZE=2048
と同じです。同様に、MBはメガバイト(1024×1024)を、GBはギガバイト(1024の3乗)を表します。Bはバイトの省略です。この場合、最終的なファイル・サイズの算出に乗算は不要です(FILESIZE=2048B
は、FILESIZE=2048
と同じです)。
インポートするスキーマをカンマで区切ったリスト。このパラメータは、IMP_FULL_DATABASE
ロールを持つユーザーにのみ関係があります。このパラメータで、複数のスキーマを含むエクスポート・ファイル(たとえば、全体エクスポート・ダンプ・ファイルまたは複数スキーマのユーザー、ユーザー・モードのエクスポート・ダンプ・ファイルなど)からスキーマのサブセットをインポートできます。
ファンクション索引、ファンクション、プロシージャ、トリガー、型本体、ビューなどの内部に表示されるスキーマ名は、FROMUSER
またはTOUSER
の処理には影響されません。影響を受けるのは、オブジェクト名のみです。インポートの完了後、TOUSER
スキーマに含まれる項目が古いスキーマ(FROMUSER
)を参照しているかどうかを手動で確認し、必要に応じて修正する必要があります。
通常は、インポート・パラメータTOUSER
とFROMUSER
を組み合せて使用し、インポートのターゲットとなるスキーマの所有者ユーザー名のリストを指定します(「TOUSER」を参照)。インポート操作の前にターゲット・データベース内にTOUSER
で指定するユーザーが存在している必要があります。存在していない場合、エラーが返されます。
TOUSER
を指定しない場合、インポート操作では次のことが行われます。
エクスポート・ファイルが、全データベース・モードのダンプ・ファイル、または複数スキーマ、ユーザー・モードのエクスポート・ダンプ・ファイルの場合、FROMUSER
のスキーマへオブジェクトをインポートします。
エクスポート・ファイルが単一のスキーマで、ユーザー・モードのエクスポート・ダンプ・ファイルが権限のないユーザーに作成された場合、(インポート時にFROMUSER
スキーマが存在するかどうかにかかわらず)インポートするユーザーのスキーマにオブジェクトを作成します。
注意: FROMUSER=SYSTEM を指定しても、システム・オブジェクトはインポートされず、ユーザーSYSTEM が所有するスキーマ・オブジェクトのみがインポートされます。 |
エクスポート・ダンプ・ファイル全体をインポートするかどうかを指定します。
全データベースのエクスポートおよびインポートは、データベースの複製およびクリーンアップに有効です。ただし、問題が発生しないように、次の点に注意する必要があります。
全体エクスポートでは、スキーマSYS
が所有するトリガーはエクスポートされません。SYS
トリガーは、全体インポートの前後のいずれかに手動で再作成する必要があります。このトリガーによってインポートの進行を妨げるような処理が定義されないように、インポートの後に再作成することをお薦めします。
全体エクスポートでは、デフォルトのプロファイルもエクスポートされません。ソース・データベースでデフォルトのプロファイルを変更した場合(たとえば、スキーマSYS
が所有するパスワード確認機能を追加するなど)は、事前に手動でその機能を作成し、インポートの完了後にターゲット・データベースでデフォルトのプロファイルを変更する必要があります。
可能な場合、開始前にエクスポートされたデータベースおよびインポートするデータベースの物理コピーを作成します。これによって、誤った操作をやり直すことができます。
エクスポートの開始前に、次の情報を含むレポートを作成することをお薦めします。
表領域およびデータ・ファイルのリスト
ロールバック・セグメントのリスト
ユーザーごとの各オブジェクト型(表、索引など)の数
この情報で、表領域がすでに作成され、インポートが正常に完了したことを確認できます。
エクスポートから完全に新しいデータベースを作成する場合、SYSTEM
に余分なロールバック・セグメントを作成し、初期化パラメータ・ファイル(init
.ora
)で使用可能にしてからインポートを開始します。
インポートの実行時に、正しいインスタンスを指していることを確認します。一部のUNIXシステムでは、サブシェルの入力のみで、インポート操作を行ったデータベースが変更される場合があります。
すべての表領域が作成されるまで、複数のデータベースを含むシステムでは全体インポートを行わないでください。全体インポートは、エクスポートされたデータベースと同じデータ・ファイル名を使用して、未定義の表領域を作成します。このため、次のような状況で問題が発生します。
データ・ファイルが他のいずれかのデータベースに属する場合、データ・ファイルは破損します。このことは特に、エクスポートされるデータベースが同じシステムに存在する場合に当てはまります(そのデータ・ファイルがインポート先のデータベースによって再利用されるため)。
データ・ファイルの名前が既存のオペレーティング・システム・ファイルの名前と同じ場合も問題が発生します。
デフォルト: y
デフォルトでは、エクスポートされたオブジェクト権限はすべてインポートされます。ユーザー・モードでエクスポートが実行されている場合は、第1レベルのオブジェクト権限(所有者によって付与されているもの)のみがエクスポート・ファイルにインポートされます。
全データベース・モードでエクスポートが実行されている場合は、下位レベルのオブジェクト権限(WITH GRANT OPTION
で権限が付与されたユーザーによって付与されているもの)を含むすべての権限が、エクスポート・ファイルにインポートされます。GRANTS=n
を指定すると、オブジェクト権限はインポートされません(GRANTS=n
を指定しても、システム権限はインポートされます)。
注意: エクスポート・ユーティリティでは、セキュリティ上の理由から、インポートに影響するデータ・ディクショナリ・ビューの権限はエクスポートされません。このような権限がエクスポートされると、インポートしたユーザーが気付かないうちに、アクセス権が変更される場合があります。 |
オブジェクト作成エラーの処理方法を指定します。デフォルトのIGNORE=n
が指定されている場合は、オブジェクト作成エラーがログに記録または表示されて、インポートが続行されます。
IGNORE=y
を指定すると、データベース・オブジェクトの作成時に作成エラーが発生しても、このエラーは無視され、エラーはレポートされずに継続します。
無視されるのはオブジェクト作成エラーのみです。オペレーティング・システム、データベース、SQLなどのエラーは無視されず、場合によっては処理が停止します。
IGNORE=y
が指定され、1つのエクスポート・ファイルから何回もリフレッシュが行われる場合、オブジェクトが何回も作成される場合があります(ただし、各オブジェクトには一意のシステム定義名が付けられます)。特定のオブジェクト(たとえば、制約など)に対しては、CONSTRAINTS=n
を指定してインポートを実行すると、この問題を回避できます。CONSTRAINTS=n
を指定して全インポートを実行すると、表の制約はインポートされません。
表がすでに存在する場合、IGNORE=y
を指定すると、行は既存の表にインポートされ、エラーやメッセージは出力されません。新しい記憶域パラメータを使用するため、またはクラスタにすでに表を作成済であるため、すでに存在する表にデータをインポートする場合があります。
表がすでに存在する場合、IGNORE=n
を指定すると、エラーがレポートされ、表は、行が挿入されないままスキップされます。また、表に依存するオブジェクト(索引、権限、制約など)は作成されません。
注意: 既存の表へのインポート時に、表の列の索引が一意でない場合、行データが重複することがあります。 |
索引をインポートするかどうかを指定します。LOB索引、OID索引、一意制約索引など、システムによって作成される索引は、このパラメータの指定に関係なく、インポート・ユーティリティによって自動的に再作成されます。
INDEXES=n
を指定すると、すべてのユーザー作成索引をインポートの終了後に作成できます。
インポート時、ターゲット表にすでに索引が存在する場合は、データ挿入時にターゲット表の索引のメンテナンスを実行します。
索引作成文を受け取るファイルを指定します。
このパラメータを指定すると、指定したモードでの索引作成文は、データベース中に索引を作成するために使用されるのではなく、抽出されて指定のファイルに書き込まれます。データベース・オブジェクトはインポートされません。
インポート・パラメータCONSTRAINTS
にy
を設定している場合、索引ファイルに表制約も書き込まれます。
その後、このファイルを編集して(記憶域パラメータの変更など)、索引を作成するためのSQLスクリプトとして使用できます。
ファイル内で定義されている索引をさらに簡単に識別するために、エクスポート・ファイルのCREATE
TABLE
文およびCREATE
CLUSTER
文がコメントとして含まれます。
この機能を使用するには、次の手順を実行します。
INDEXFILE
パラメータを使用してインポートを行い、索引作成文のファイルを作成します。
ファイルを編集して、有効なパスワードをconnect
文字列に追加します。
INDEXES=n
を指定してインポートを再実行します。
(この手順でデータベース・オブジェクトがインポートされますが、エクスポート・ファイルに格納されている索引定義は使用されません。)
索引作成文のファイルをSQLスクリプトとして実行し、索引を作成します。
INDEXFILE
パラメータを指定できるのは、FULL=y
、FROMUSER
、TOUSER
またはTABLES
パラメータを指定した場合のみです。
情報メッセージおよびエラー・メッセージを受け取るファイル(import.logなど)を指定します。ログ・ファイルを指定すると、端末画面およびログ・ファイルの両方にインポートに関する情報が書き込まれます。
デフォルト: オペレーティング・システムによって異なります。
ファイル・レコードの長さをバイト単位で指定します。RECORDLENGTH
パラメータは、異なるデフォルト値を使用する別のオペレーティング・システムにエクスポート・ファイルを転送する場合に指定する必要があります。
このパラメータを指定しない場合、ご使用のプラットフォーム固有のBUFSIZ
の値がデフォルトになります。
RECORDLENGTH
は、ご使用のシステムのBUFSIZ
の値以上の任意の値に設定できます。(最大値は64KBです。)RECORDLENGTH
パラメータの変更により影響を受けるのは、データベースに書き出す前に累積されるデータのサイズのみです。オペレーティング・システム・ファイルのブロック・サイズには影響しません。
このパラメータは、インポート・ユーティリティのI/Oバッファのサイズ指定にも使用できます。
デフォルト: n
RESUMABLE
パラメータを使用して、再開可能な領域割当てを有効または無効にします。このパラメータはデフォルトでは無効なため、関連するRESUMABLE_NAME
およびRESUMABLE_TIMEOUT
を使用するには、RESUMABLE=y
を設定する必要があります。
参照:
|
デフォルト: 'User USERNAME (USERID), Session SESSIONID, Instance INSTANCEID'
再開可能な文を指定します。この値はユーザー定義のテキスト文字列で、USER_RESUMABLE
またはDBA_RESUMABLE
ビューに挿入して、一時停止されている特定の再開可能な文を識別できます。
RESUMABLE
パラメータをy
に設定して、再開可能な領域割当てを有効にしないかぎり、このパラメータは無視されます。
デフォルト: 7200
秒(2時間)
エラー修正に必要な時間を指定します。タイムアウト時間内にエラーを修正できない場合は、文の実行が途中で終了します。
RESUMABLE
パラメータをy
に設定して、再開可能な領域割当てを有効にしないかぎり、このパラメータは無視されます。
デフォルト: n
SHOW=y
を指定すると、エクスポート・ダンプ・ファイルの内容が画面に表示されますが、インポートは実行されません。エクスポート・ファイルに含まれるSQL文は、インポート・ユーティリティでその文が実行される順序で表示されます。
SHOW
パラメータを指定できるのは、FULL=y
、FROMUSER
、TOUSER
またはTABLES
パラメータを指定した場合のみです。
デフォルト: 初期化パラメータ・ファイルで指定した、Oracle Databaseの構成パラメータSKIP_UNUSABLE_INDEXES
の値
SKIP_UNUSABLE_INDEXES
パラメータは、インポート・ユーティリティおよびOracle Databaseの両方で提供されます。インポート・ユーティリティのSKIP_UNUSABLE_INDEXES
パラメータは、インポート・ユーティリティのコマンドラインで指定します。Oracle DatabaseのSKIP_UNUSABLE_INDEXES
パラメータは、初期化パラメータ・ファイルの構成パラメータとして指定します。相互に与える影響を理解しておく必要があります。
インポート・ユーティリティのコマンドラインでSKIP_UNUSABLE_INDEXES
の値を指定しない場合、初期化パラメータ・ファイルで指定した、SKIP_UNUSABLE_INDEXES
構成パラメータのデータベース設定が使用されます。
インポート・コマンドラインでSKIP_UNUSABLE_INDEXES
の値を指定すると、インポートは、初期化パラメータ・ファイルに指定されているSKIP_UNUSABLE_INDEXES
構成パラメータの値を上書きします。
y
の値を指定すると、(システムまたはユーザーのいずれかによって)索引使用禁止状態に設定されている索引の作成が、インポート・ユーティリティではスキップされます。他の索引(事前に索引使用禁止に設定されていない索引)に対しては、行の挿入時にメンテナンス処理が行われます。
このパラメータを使用すると、選択した索引パーティションに対する索引のメンテナンスを、行データの挿入が完了するまで延期できます。インポート後、影響を受けた索引パーティションの再作成が必要です。
注意: 一意で使用禁止状態の索引に対しては、索引メンテナンスをスキップできません。したがって、一意の索引はSKIP_UNUSABLE_INDEXES パラメータの影響を受けません。 |
INDEXES=n
を指定してINDEXFILE
パラメータを使用すると、索引の再作成を行うSQLスクリプトを作成できます。SKIP_UNUSABLE_INDEXES
パラメータを指定しない場合、行挿入によって使用禁止索引をメンテナンスすると、その行挿入によってエラーが発生します。
参照: 『Oracle Database SQL言語リファレンス』のALTER SESSION 文についての説明を参照してください。 |
デフォルト: ALWAYS
インポート時のデータベース・オプティマイザ統計の処理方法を指定します。
メニュー項目は次のとおりです。
ALWAYS
データベース・オプティマイザ統計に問題があるかどうかにかかわらず、常にインポートします。
NONE
データベース・オプティマイザ統計をインポートまたは再計算しません。
SAFE
データベース・オプティマイザ統計に問題がない場合のみにインポートします。問題がある場合は、オプティマイザ統計を再計算します。
RECALCULATE
データベース・オプティマイザ統計をインポートしません。かわりに、インポート時に再計算します。この場合、ダンプ・ファイルを作成した元のエクスポート操作で、必要なANALYZE
文を生成している(STATISTICS
=NONE
を指定してエクスポートを実行していない)必要があります。ANALYZE
文は、ダンプ・ファイルに含まれ、インポート操作で表統計の再計算に使用されます。
デフォルト: y
エクスポート・ダンプ・ファイル内に存在する一般的なStreamsメタデータをインポートするかどうかを指定します。
参照: 『Oracle Streamsレプリケーション管理者ガイド』 |
デフォルト: n
エクスポート・ダンプ・ファイル内に存在するStreamsインスタンス化メタデータをインポートするかどうかを指定します。ストリーム環境でインスタンス化の一部としてインポートする場合は、y
を指定します。
参照: 『Oracle Streamsレプリケーション管理者ガイド』 |
表モード・インポートでインポートすることを指定します。インポートの対象となる表名、パーティション名およびサブパーティション名をリストとして指定します。表レベル・インポートでは、パーティション表または非パーティション表全体をインポートできます。TABLES
パラメータでは、インポート対象は、表およびその関連オブジェクトに限定されます(表22-3を参照)。TABLES
パラメータでは、次の値を指定できます。
tablename
には、インポートされる表の名前を指定します。リストにパーティション表が含まれる場合、パーティション名を指定しないと、すべてのパーティションおよびサブパーティションがインポートされます。エクスポートされたすべての表をインポートするには、アスタリク(*)のみを表名パラメータとして指定します。
tablename
は、任意の数の「%」パターン一致文字を含むことができます。各「%」パターン一致文字は、エクスポート・ファイルの表名の0個以上の文字と一致します。リスト中の固有の表名の指定されたすべてのパターンと一致する名前を持つすべての表が、選択されてインポートされます。すべてのパターン一致文字で構成され、パーティション名を含まないリスト中の表名によって、エクスポートされたすべての表がインポートされます。
partition_name
およびsubpartition_name
によって、パーティション表内で指定された1つ以上のパーティションまたはサブパーティションにインポートが制限されます。
構文の形式は、次のとおりです。
tablename:partition_name tablename:subpartition_name
tablename
:
partition_name
を使用する場合、指定された表はパーティション化されている必要があり、partition_name
はそのいずれかのパーティションまたはサブパーティションの名前である必要があります。指定された表がパーティション化されていない場合、partition_name
は無視されて表全体がインポートされます。
一度に指定できる表の数は、コマンドラインの制限によって決まります。
エクスポート・ファイルの処理中、エクスポート・ファイルの各表名は、パラメータで指定された順に、リスト中の各表名と比較されます。あいまいな処理が行われたり、処理時間が極端に長くならないように、固有の表名がリストの始めに表示され、一般的な表名(パターンを使用したもの)がリストの終わりに表示される必要があります。
エクスポート時には表名をスキーマ名(scott
.emp
など)で修飾できますが、インポート時にはできません。次に、間違って指定されたTABLES
パラメータの例を示します。
imp TABLES=(jones.accts, scott.emp, scott.dept)
これらの表をインポートするには、次のように指定します。
imp FROMUSER=jones TABLES=(accts) imp FROMUSER=scott TABLES=(emp,dept)
詳細は、「パターン一致を使用して様々な表をインポートする例」を参照してください。
表名には次の制限があります。
デフォルトでは、表名は大文字でデータベースに格納されます。表名が大文字と小文字または小文字のみで表記され、大/小文字を区別する場合、名前を引用符で囲む必要があります。したがって、表名は、データベースに格納されている表名と完全に一致するように指定する必要があります。
ただし、オペレーティング・システムによっては、コマンドラインの引用符自体をエスケープする必要がある場合があります。次に、異なるインポート・モードで大/小文字の区別を保持する方法を示します。
コマンドライン・モード
tables='\"Emp\"'
対話方式モード
Table(T) to be exported: "Exp"
パラメータ・ファイル・モード
tables='"Emp"'
表名を引用符で囲まないかぎり、コマンドラインで指定する表名にシャープ(#)記号は使用できません。同様に、パラメータ・ファイルでは、表名が引用符で囲まれていないかぎり、表名にシャープ(#)記号を使用すると、インポート・ユーティリティではシャープ(#)記号より右側の文字がコメントとして解釈されます。
たとえば、パラメータ・ファイルに次のコマンドラインが記述されている場合、インポート・ユーティリティではemp#
の右側がすべてコメントとして解釈されるため、表dept
およびmydata
はインポートされません。
TABLES=(emp#, dept, mydata)
ただし、次の例では、emp#
が引用符で囲まれているため、3つの表はすべてインポートされます。
TABLES=("emp#", dept, mydata)
注意: オペレーティング・システムによっては、一重引用符を使用する必要がある場合と、二重引用符を使用する必要がある場合があります。ご使用のオペレーティング・システム固有のドキュメントで確認してください。表のネーミング方法に制限があるオペレーティング・システムもあります。たとえば、UNIXのCシェルではドル記号($)やシャープ(#)(またはその他の特殊文字)には特別な意味があります。これらの文字をシェルを介してインポートするには、エスケープ文字を使用する必要があります。 |
デフォルト: なし
TRANSPORT_TABLESPACE
にy
を指定した場合、データベースに転送する表領域を、このパラメータを使用して表示します。エクスポート・ファイルに複数の表領域がある場合は、そのすべての表領域をインポート操作の一部として指定する必要があります。
詳細は、「TRANSPORT_TABLESPACE」を参照してください。
デフォルト: なし
型を参照している表のインポート時に、その名前の型がすでにデータベースに存在している場合は、その既存の型が、実際にその表で使用されているかどうか(実際は異なる型で、単に同じ名前であるだけではないか)を確認します。
この検証のために、型の一意の識別子(TOID)と、エクスポート・ファイルに格納された識別子が比較されます。TOIDが一致しない場合、その表の行はインポートされません。
この妥当性チェックをしてはいけない型もあります(たとえば、その型がカートリッジのインストールによって作成された場合)。TOID_NOVALIDATE
パラメータを使用して、TOIDと比較しない型を指定できます。
構文は次のようになります。
TOID_NOVALIDATE=([schemaname.]typename [, ...])
次に例を示します。
imp scott TABLES=jobs TOID_NOVALIDATE=typ1 imp scott TABLES=salaries TOID_NOVALIDATE=(fred.typ0,sally.typ2,typ3)
その型にスキーマ名を指定しない場合、インポートするユーザーのスキーマがデフォルトになります。たとえば、前述の最初の例では、型typ1
はscott.typ1
がデフォルトになり、2番目の例では、型typ3
はscott.typ3
がデフォルトになります。
TOID_NOVALIDATE
は、表の列型のみを処理します。表型には影響しません。
通常のインポートでは、削除される型が含まれていると、次のように出力されます。
[...] . importing IMP3's objects into IMP3 . . skipping TOID validation on type IMP2.TOIDTYP0 . . importing table "TOIDTAB3" [...]
注意: 型の識別子を比較しないように指定する場合は、ユーザーの責任において、インポートされる型の属性リストを既存の型の属性リストと一致させるようにしてください。これらの属性リストが一致しない場合、インポート結果は保証されません。 |
デフォルト: なし
インポートの対象となるスキーマを所有するユーザー名のリストを指定します。インポート操作の前にユーザー名が存在している必要があります。存在していない場合は、エラーが返されます。このパラメータを使用するには、IMP_FULL_DATABASE
ロールが必要です。オブジェクトがもともと入っていたスキーマと異なるスキーマにインポートする場合は、TOUSER
を指定してください。次に例を示します。
imp FROMUSER=scott TOUSER=joe TABLES=emp
複数のスキーマを指定する場合、スキーマ名は対で指定します。次の例では、scott
のオブジェクトをjoe
のスキーマに、fred
のオブジェクトをted
のスキーマにインポートします。
imp FROMUSER=scott,fred TOUSER=joe,ted
FROMUSER
リストがTOUSER
リストより長い場合、残りのスキーマは、通常のデフォルトの規則に従って、FROMUSER
スキーマにインポートされるか、またはインポートを実行するユーザーのスキーマにインポートされます。余分なオブジェクトがTOUSER
スキーマにインポートされるようにするには、次の構文を使用します。
imp FROMUSER=scott,adams TOUSER=ted,ted
ユーザーted
は2回指定されています。
デフォルト: n
y
を指定した場合、エクスポート・ファイルからトランスポータブルの表領域メタデータがインポートされます。
暗号化された列は、トランスポータブル表領域モードではサポートされていません。
注意: トランスポータブル表領域をエクスポートした後、それよりも古いリリース・レベルのデータベースにインポートすることはできません。ターゲット・データベースのリリース・レベルは、ソース・データベース以上である必要があります。 |
デフォルト: なし
TRANSPORT_TABLESPACE
にy
を指定した場合、このパラメータを使用して、一連のトランスポータブル表領域のデータの所有者ユーザーを表示できます。
詳細は、「TRANSPORT_TABLESPACE」を参照してください。
デフォルト: なし
インポートを実行するユーザーのユーザー名、パスワードおよびオプションの接続文字列を指定します。
ユーザーSYS
として接続する場合は、接続文字列にAS SYSDBA
も指定する必要があります。オペレーティング・システムによっては、AS SYSDBA
を特殊文字列とみなし、その文字列全体を引用符で囲む必要があります。
参照:
|
この項では、インポート・セッションの例をいくつか取り上げ、パラメータ・ファイル方式およびコマンドライン方式の使用方法を示します。ここでは、次のシナリオを示します。
この例では、管理者が全データベース・エクスポート・ファイルを使用して、dept
表およびemp
表をscott
のスキーマにインポートします。
パラメータ・ファイル方式
> imp PARFILE=params.dat
params
.dat
ファイルには、次の情報が格納されています。
FILE=dba.dmp SHOW=n IGNORE=n GRANTS=y FROMUSER=scott TABLES=(dept,emp)
コマンドライン方式
> imp FILE=dba.dmp FROMUSER=scott TABLES=(dept,emp)
インポート・メッセージ
使用しているインポート・ユーティリティのリリース情報および接続しているOracle Databaseのリリース情報が表示されます。また、状態メッセージも表示されます。
この例では、blake
がエクスポートしたファイルからunit
表およびmanager
表をscott
のスキーマにインポートします。
パラメータ・ファイル方式
> imp PARFILE=params.dat
params
.dat
ファイルには、次の情報が格納されています。
FILE=blake.dmp SHOW=n IGNORE=n GRANTS=y ROWS=y FROMUSER=blake TOUSER=scott TABLES=(unit,manager)
コマンドライン方式
> imp FROMUSER=blake TOUSER=scott FILE=blake.dmp TABLES=(unit,manager)
インポート・メッセージ
使用しているインポート・ユーティリティのリリース情報および接続しているOracle Databaseのリリース情報が表示されます。また、状態メッセージも表示されます。
この例では、データベース管理者(DBA)がユーザーscott
のすべての表をユーザーblake
のアカウントにインポートします。
パラメータ・ファイル方式
> imp PARFILE=params.dat
params
.dat
ファイルには、次の情報が格納されています。
FILE=scott.dmp FROMUSER=scott TOUSER=blake TABLES=(*)
コマンドライン方式
> imp FILE=scott.dmp FROMUSER=scott TOUSER=blake TABLES=(*)
インポート・メッセージ
使用しているインポート・ユーティリティのリリース情報および接続しているOracle Databaseのリリース情報が表示されます。その後で、次に示すような状態メッセージが表示されます。
. . . Warning: the objects were exported by SCOTT, not by you import done in WE8DEC character set and AL16UTF16 NCHAR character set . importing SCOTT's objects into BLAKE . . importing table "BONUS" 0 rows imported . . importing table "DEPT" 4 rows imported . . importing table "EMP" 14 rows imported . . importing table "SALGRADE" 5 rows imported Import terminated successfully without warnings.
この項では、複数のパーティションがある表、パーティションとサブパーティションがある表、および異なる列で再パーティション化した表のインポートについて説明します。
この例では、emp
は、P1
、P2
およびP3
で構成されているパーティション表です。
表レベルのエクスポート・ファイルを作成するには、次のコマンドを使用します。
> exp scott TABLES=emp FILE=exmpexp.dat ROWS=y
エクスポート・メッセージ
使用しているエクスポート・ユーティリティのリリース情報および接続しているOracle Databaseのリリース情報が表示されます。その後で、次に示すような状態メッセージが表示されます。
. . . About to export specified tables via Conventional Path ... . . exporting table EMP . . exporting partition P1 7 rows exported . . exporting partition P2 12 rows exported . . exporting partition P3 3 rows exported Export terminated successfully without warnings.
パーティション・レベルのインポートでは、インポートの対象に、エクスポートした表の特定のパーティションを指定できます。この例では、emp
表のP1
およびP3
を指定します。
> imp scott TABLES=(emp:p1,emp:p3) FILE=exmpexp.dat ROWS=y
インポート・メッセージ
使用しているインポート・ユーティリティのリリース情報および接続しているOracle Databaseのリリース情報が表示されます。また、状態メッセージも表示されます。
この例では、コンポジット・パーティション表のパーティションおよびサブパーティションがインポートされます。emp
は、2つのコンポジット・パーティションP1
およびP2
のパーティション表です。パーティションP1
には、3つのサブパーティションP1_SP1
、P1_SP2
およびP1_SP3
があります。パーティションP2
には、2つのサブパーティションP2_SP1
およびP2_SP2
があります。
表レベルのエクスポート・ファイルを作成するには、次のコマンドを使用します。
> exp scott TABLES=emp FILE=exmpexp.dat ROWS=y
エクスポート・メッセージ
使用しているエクスポート・ユーティリティのリリース情報および接続しているOracle Databaseのリリース情報が表示されます。その後で、次に示すような状態メッセージが表示されます。
コマンドラインで実行されると次のエクスポート・メッセージが表示されます。
. . . About to export specified tables via Conventional Path ... . . exporting table EMP . . exporting composite partition P1 . . exporting subpartition P1_SP1 2 rows exported . . exporting subpartition P1_SP2 10 rows exported . . exporting subpartition P1_SP3 7 rows exported . . exporting composite partition P2 . . exporting subpartition P2_SP1 4 rows exported . . exporting subpartition P2_SP2 2 rows exported Export terminated successfully without warnings.
次のインポート・コマンドでは、emp
表にあるコンポジット・パーティションP1
のサブパーティションP1_SP2
およびP1_SP3
と、emp
表にあるコンポジット・パーティションP2
のすべてのサブパーティションがインポートされます。
> imp scott TABLES=(emp:p1_sp2,emp:p1_sp3,emp:p2) FILE=exmpexp.dat ROWS=y
インポート・メッセージ
使用しているインポート・ユーティリティのリリース情報および接続しているOracle Databaseのリリース情報が表示されます。その後で、次に示すような状態メッセージが表示されます。
. . . . importing SCOTT's objects into SCOTT . . importing subpartition "EMP":"P1_SP2" 10 rows imported . . importing subpartition "EMP":"P1_SP3" 7 rows imported . . importing subpartition "EMP":"P2_SP1" 4 rows imported . . importing subpartition "EMP":"P2_SP2" 2 rows imported Import terminated successfully without warnings.
この例では、emp
表に、empno
列に基づく2つのパーティションがあります。emp
表をdeptno
列で再パーティション化します。
別の列で表を再パーティション化するには、次の手順を実行してください。
エクスポートを実行して、データを保存します。
データベースから表を削除します。
表を新しいパーティションに分割して再作成します。
表データをインポートします。
次に、これらの手順の例を示します。
> exp scott table=emp file=empexp.dat . . . About to export specified tables via Conventional Path ... . . exporting table EMP . . exporting partition EMP_LOW 4 rows exported . . exporting partition EMP_HIGH 10 rows exported Export terminated successfully without warnings. SQL> connect scott Connected. SQL> drop table emp cascade constraints; Statement processed. SQL> create table emp 2 ( 3 empno number(4) not null, 4 ename varchar2(10), 5 job varchar2(9), 6 mgr number(4), 7 hiredate date, 8 sal number(7,2), 9 comm number(7,2), 10 deptno number(2) 11 ) 12 partition by range (deptno) 13 ( 14 partition dept_low values less than (15) 15 tablespace tbs_1, 16 partition dept_mid values less than (25) 17 tablespace tbs_2, 18 partition dept_high values less than (35) 19 tablespace tbs_3 20 ); Statement processed. SQL> exit > imp scott tables=emp file=empexp.dat ignore=y . . . import done in WE8DEC character set and AL16UTF16 NCHAR character set . importing SCOTT's objects into SCOTT . . importing partition "EMP":"EMP_LOW" 4 rows imported . . importing partition "EMP":"EMP_HIGH" 10 rows imported Import terminated successfully without warnings.
次に示すSQLのSELECT
文では、データはdeptno
列でパーティション化されます。
SQL> connect scott Connected. SQL> select empno, deptno from emp partition (dept_low); EMPNO DEPTNO ---------- ---------- 7782 10 7839 10 7934 10 3 rows selected. SQL> select empno, deptno from emp partition (dept_mid); EMPNO DEPTNO ---------- ---------- 7369 20 7566 20 7788 20 7876 20 7902 20 5 rows selected. SQL> select empno, deptno from emp partition (dept_high); EMPNO DEPTNO ---------- ---------- 7499 30 7521 30 7654 30 7698 30 7844 30 7900 30 6 rows selected. SQL> exit;
この例では、パターン一致を使用して、ユーザーscott
の様々な表をインポートします。
パラメータ・ファイル方式
imp PARFILE=params.dat
params
.dat
ファイルには、次の情報が格納されています。
FILE=scott.dmp IGNORE=n GRANTS=y ROWS=y FROMUSER=scott TABLES=(%d%,b%s)
コマンドライン方式
imp FROMUSER=scott FILE=scott.dmp TABLES=(%d%,b%s)
インポート・メッセージ
使用しているインポート・ユーティリティのリリース情報および接続しているOracle Databaseのリリース情報が表示されます。その後で、次に示すような状態メッセージが表示されます。
. . . import done in US7ASCII character set and AL16UTF16 NCHAR character set import server uses JA16SJIS character set (possible charset conversion) . importing SCOTT's objects into SCOTT . . importing table "BONUS" 0 rows imported . . importing table "DEPT" 4 rows imported . . importing table "SALGRADE" 5 rows imported Import terminated successfully without warnings.
インポート・ユーティリティでは、操作の完了後、すぐに実行結果を確認できます。プラットフォームによっては、実行結果はプロセス終了コードに通知され、ログ・ファイルにも記録されます。これによって、コマンドラインやスクリプトからの出力を確認できます。表22-4に、様々な結果の終了コードを示します。
表22-4 インポート・ユーティリティの終了コード
結果 | 終了コード |
---|---|
インポートは警告なしで正常終了しました。 |
|
インポートは正常に終了しましたが、警告が発生しました。 |
|
エラーが発生したためインポートを終了します。 |
|
UNIXの場合、終了コードは次のようになります。
EX_SUCC 0 EX_OKWARN 0 EX_FAIL 1
この項では、データベース・オブジェクトのインポート時に発生する可能性のあるエラーについて説明します。
整合性制約違反またはデータが無効なために行のインポートが拒否されると、警告メッセージが表示されますが、その表の残りの行は引き続き処理されます。「tablespace full」というエラーなど、後続のすべての行に影響するエラーもあります。このようなエラーの場合には、現行の表の処理は停止され、次の表にスキップします。
RESUMABLE=y
パラメータが指定されている場合、「tablespace full」エラーによって、インポートが一時停止することもあります。
データベース・オブジェクトをインポートするときにエラーが発生する理由にはいろいろありますが、この項ではその理由について説明します。これらのエラーが発生すると、現行のデータベース・オブジェクトのインポートは中断されます。その後、インポート・ユーティリティでは、エクスポート・ファイルの次のデータベース・オブジェクトが継続して処理されます。
インポートするオブジェクトがデータベース中にすでに存在していると、オブジェクト作成エラーが発生します。これ以降の処理は、IGNORE
パラメータに指定されている値によって異なります。
IGNORE=n
(デフォルト)が指定されている場合、エラーが報告され、次のデータベース・オブジェクトが継続して処理されます。現行のデータベース・オブジェクトは置き換えられません。オブジェクトが表の場合、エクスポート・ファイル内の行はインポートされません。
IGNORE=y
が指定されている場合、オブジェクト作成エラーは報告されません。データベース・オブジェクトは置き換えられません。オブジェクトが表の場合、行がインポートされます。無視できるエラーはオブジェクト作成エラーのみです。他のすべてのエラー(オペレーティング・システムのエラー、データベースのエラー、SQLのエラーなど)は報告されます。また、処理が停止することもあります。
注意: IGNORE=y を指定した場合、表の1つ以上の列に対してUNIQUE 整合性制約を指定しないかぎり、その表に対して重複した行が挿入されます。たとえば、誤って2回インポートを実行した場合などがこれに該当します。 |
インポート処理で、順序番号をエクスポート・ファイルの値に設定しなおす必要がある場合は、順序を削除してください。インポートでは、既存の順序の削除と再作成は行われません。そのため、順序は、インポートの前に削除されない場合、エクスポート・ファイルに保存されている値には設定されません。順序がすでに存在している場合、エクスポート・ファイルのCREATE SEQUENCE
文は失敗し、その順序はインポートされません。
リソースの制限によって、オブジェクトがインポートされないことがあります。たとえば、表のインポート中に、内部的な問題またはメモリーなどのリソース不足によって、リソース・エラーが発生する場合があります。
行のインポート中にリソース・エラーが発生すると、現行の表の処理が中止され、次の表にスキップします。COMMIT=y
を指定している場合、現行の表のインポート済の部分がコミットされます。指定していない場合は、現行の表の処理がロールバックされた後で、インポートが続行されます。「COMMIT」を参照してください。
表、パーティションおよびサブパーティションのインポートは、次のように実行できます。
表レベル・インポート: エクスポート・ファイルのすべてのデータをインポートします。
パーティション・レベル・インポート: 指定されたソース・パーティションまたはサブパーティションのデータのみインポートします。
表レベル・インポートでは、指定した各表に関して表のすべての行がインポートされます。表レベル・インポートの特長は次のとおりです。
(TRANSPORT_TABLESPACES
を除く)どのエクスポート・モードでエクスポートされた場合でも、表レベル・インポートを使用してエクスポートされたすべての表をインポートできます。
ユーザーは、表レベルでエクスポートされたすべての表(パーティション表または非パーティション表)、パーティションまたはサブパーティションを、同じ名前のターゲット表(パーティション表または非パーティション表)にインポートできます。
表が存在しない場合で、なおかつエクスポートされた表がパーティション表である場合は、表レベル・インポートによってパーティション表が作成されます。表が正常に作成されると、エクスポート・ファイルからすべてのソース・データが読み込まれ、ターゲット表に書き込まれます。インポート後、ターゲット表には、エクスポート・ファイル内のソース表に対応付けられたすべてのパーティションおよびサブパーティションに関するパーティション定義が格納されます。この処理によって、ソース・パーティションの物理属性および論理属性(パーティションの境界を含む)が、インポート時に維持されます。
パーティション・レベル・インポートを指定できるのは、表モードでインポートを実行する場合のみです。パーティション・レベル・インポートでは、エクスポート・ファイル内の特定のパーティションまたはサブパーティションを選択してデータをロードすることができます。パーティション・レベル・インポートを使用する場合は、次のガイドラインに注意してください。
インポートでは、常にターゲット表のパーティション化スキームに従って行が格納されます。
パーティション・レベル・インポートでは、指定されたソース・パーティションまたはサブパーティションの行データのみ挿入されます。
ターゲット表がパーティション表の場合、パーティション・レベル・インポートを行うと、そのターゲット表の最上位パーティションより上に入る行はすべて拒否されます。
エクスポートされた表が非パーティション表の場合は、パーティション・レベル・インポートを実行できません。ただし、表レベル・インポートを使用すると、エクスポートされた非パーティション表からパーティション表をインポートできます。
ソース表(エクスポート時にtablenameに指定された表)がパーティション表で、エクスポート・ファイルに存在する場合のみ、パーティション・レベル・インポートは正常に実行されます。
エクスポート・ファイルに存在しないパーティション名またはサブパーティション名を指定すると、警告が発行されます。
パラメータの中で指定するパーティション名またはサブパーティション名には、エクスポート・ファイルにあるパーティションまたはサブパーティションのみを指定します。エクスポート・ファイルには、エクスポート・ソース・システム上の表のすべてのデータが含まれているとはかぎりません。
ROWS=y
(デフォルト)が指定されていて、表がインポート先のシステムに存在しない場合、表が作成され、すべての行が、ソース・パーティションまたはサブパーティションから、インポート先の表のパーティションまたはサブパーティションに挿入されます。
ROWS=y
(デフォルト)およびIGNORE=y
が指定されていて、対象となる表の表名がインポート前に存在している場合は、指定された表のパーティションまたはサブパーティションの行がすべて、同名の表に挿入されます。インポートでは、常に、ターゲット表の既存のパーティション化スキーマに従って行が格納されます。
ROWS=n
が指定されている場合、データはターゲット表に挿入されず、エクスポート・ファイル中の表およびパーティションまたはサブパーティションに関連する他のオブジェクトに対する処理が、継続して行われます。
ターゲット表が非パーティション表の場合、パーティションおよびサブパーティションは表全体にインポートされます。1つ以上のパーティションまたはサブパーティションを、エクスポート・ファイルからインポート・ターゲット・システム上の非パーティション表にインポートするには、IGNORE=y
を指定します。
コンポジット・パーティションのパーティション名を指定しない場合、コンポジット・パーティション内のすべてのサブパーティションが、ソースとして使用されます。
次の例では、パーティション名によって指定されたパーティションは、コンポジット・パーティションです。すべてのサブパーティションがインポートされます。
imp SYSTEM FILE=expdat.dmp FROMUSER=scott TABLES=b:py
次の例では、表scott.e
のパーティションqc
およびqd
の行データが、表scott.e
にインポートされます。
imp scott FILE=expdat.dmp TABLES=(e:qc, e:qd) IGNORE=y
インポート・ターゲット・データベースに表e
が存在しない場合は、表eの作成後、同じパーティションにデータが挿入されます。インポート前にターゲット・システムに表e
が存在する場合、行データは、挿入可能な範囲を持つパーティションに挿入されます。行データは、最終的にqc
およびqd
以外の名前のパーティションに挿入することもできます。
注意: 既存の表にパーティション・レベル・インポートを実行する場合は、ターゲット・パーティションまたはサブパーティションを正しく設定し、IGNORE=y を指定してください。 |
この項では、索引作成およびメンテナンスに関連するインポートの動作について説明します。
インポート・ユーティリティには、索引の作成およびメンテナンスの実行を、インポートが完了し、エクスポート・データの挿入が終了するまで延期させる機能が用意されています。インポート完了後に索引の作成、再作成またはメンテナンスを実行すると、通常、その処理時間は、インポートで各行が挿入されるたびにメンテナンスを実行するより短くなります。
索引作成には時間がかかるため、他のすべてのオブジェクトのインポートが完了してから行った方が効率的です。INDEXES=n
を指定すると、インポートの終了後に索引を作成できます。(デフォルトはINDEXES=y
です。)その後、INDEXFILE
パラメータを使用してインポートを実行し、SQLスクリプト内の未作成の索引定義を格納できます。索引作成文は、このように指定しない場合、インポート・ユーティリティから発行されますが、このように指定した場合、指定されたファイルに書き込まれます。
インポート完了後、索引を作成する必要があります。索引を作成するには、通常、CONNECT文にパスワードを指定した後、INDEXFILE
で指定したファイルの内容をSQLスクリプトとして使用します。
SKIP_UNUSABLE_INDEXES=y
を指定すると、インポート前に索引使用禁止に設定されていた索引のメンテナンスはすべて延期されます。他の索引(事前に索引使用禁止に設定されていない索引)に対しては、行の挿入時にメンテナンス処理が行われます。これにより、既存の表をインポートする間、索引の更新が保存されます。
索引のメンテナンスが延期されると、その索引で設定されている既存の一意整合性制約に対して違反が発生することがあります。表に一意整合性制約が存在しても、INDEXES=n
を指定してインポートした表内の重複キーは回避できません。このため、その索引は、重複キーが削除されて索引が再構築されるまでは、UNUSABLE
状態となります。
パーティションp1
およびp2
を持つパーティション表t
が、インポート・ターゲット・システムに存在するとします。また、パーティションp1
にローカル索引p1_ind
、パーティションp2
にローカル索引p2_ind
が存在するとします。このパーティションp1
には既存の表t
のデータが入っており、そのデータ量は、エクスポート・ファイル(expdat
.dmp
)を使用して挿入されるデータの量よりはるかに多いとします。一方、パーティションp2
はその逆であるとします。
表データ挿入時にp1_ind
の索引メンテナンスを実行すると、パーティション索引の再作成時に実行するより、処理効率が高くなります。p2_ind
については、この逆になります。
また、p2_ind
については、インポート中のローカル索引のメンテナンスを延期できます。延期するには、次の手順を実行します。
インポート前に、次のSQL文を発行します。
ALTER TABLE t MODIFY PARTITION p2 UNUSABLE LOCAL INDEXES;
次のインポート・コマンドを発行します。
imp scott FILE=expdat.dmp TABLES = (t:p1, t:p2) IGNORE=y SKIP_UNUSABLE_INDEXES=y
この例では、インポートの実行前にALTER
SESSION
SET
SKIP_UNUSABLE_INDEXES=y
文を実行します。
インポート後に次のSQL文を発行します。
ALTER TABLE t MODIFY PARTITION p2 REBUILD UNUSABLE LOCAL INDEXES;
この例では、p1
のローカル索引p1_ind
は、インポート中、表データがパーティションp1
に挿入されるときにメンテナンスされます。一方、p2
のローカル索引p2_ind
は、インポート後の索引再作成時にメンテナンスされます。
Oracle Netを使用すると、ネットワークを介してインポートを実行できます。たとえば、インポート・ユーティリティをローカルで実行した場合に、リモートのOracle Databaseにデータを読み取ることができます。
Oracle Netでインポート・ユーティリティを使用するには、imp
コマンドにユーザー名とパスワードを入力するときに接続修飾文字列@
connect_string
を指定する必要があります。この句の構文の詳細は、ご使用のOracle Netプロトコルのユーザーズ・ガイドを参照してください。
参照:
|
この項では、ユーザー・データおよびデータ定義言語(DDL)のキャラクタ・セット変換に関連するインポート・ユーティリティのグローバリゼーション・サポートの動作について説明します。
エクスポート・ユーティリティは、常に、エクスポート・サーバーのキャラクタ・セットでUnicodeデータを含むユーザー・データをエクスポートします。(キャラクタ・セットは、データベース作成時に指定されます。)ソース・データベースのキャラクタ・セットが、インポート・データベースのキャラクタ・セットと異なる場合、自動的にデータをインポート・サーバーのキャラクタ・セットに変換するためのキャラクタ・セット変換が実行されます。
エクスポート・キャラクタ・セットのソート順が、インポート・キャラクタ・セットと異なる場合、キャラクタ列をパーティション化した表では、結果が保証されません。 たとえば、次のようなASCIIキャラクタ・セットのデータベースの表定義について考えてみます。
CREATE TABLE partlist ( part VARCHAR2(10), partno NUMBER(2) ) PARTITION BY RANGE (part) ( PARTITION part_low VALUES LESS THAN ('Z') TABLESPACE tbs_1, PARTITION part_mid VALUES LESS THAN ('z') TABLESPACE tbs_2, PARTITION part_high VALUES LESS THAN (MAXVALUE) TABLESPACE tbs_3 );
ASCIIキャラクタ・セットでは、Z
の後にz
があるため、このパーティション・スキームには意味があります。
この表がEBCDICキャラクタ・セット・ベースのデータベースにインポートされると、EBCDICキャラクタ・セットでは、z
がZ
の前にあるため、part_mid
パーティションのすべての行が、part_low
パーティションに移行します。希望する結果を得るには、partlist
表の所有者は、インポート後に表を再パーティション化する必要があります。
参照: Oracle Databaseグローバリゼーション・サポート・ガイド |
エクスポートおよびインポート操作時に、データ定義言語(DDL)に対して最大3回のキャラクタ・セット変換が必要です。
エクスポート・ファイルは、環境変数NLS_LANG
でユーザー・セッション用に指定されたキャラクタ・セットで書き出されます。NLS_LANG
の値が、データベースのキャラクタ・セットと異なる場合は、キャラクタ・セット変換が実行されます。
エクスポート・ファイルのキャラクタ・セットが、インポート先ユーザー・セッション用のキャラクタ・セットと異なる場合、ユーザー・セッションのキャラクタ・セットに変換されます。シングルバイト・キャラクタ・セットの場合のみにこの変換が実行されます。マルチバイト・キャラクタ・セットの場合は、インポート・ファイルのキャラクタ・セットがエクスポート・ファイルのキャラクタ・セットと同じである必要があります。
ターゲット・データベースのキャラクタ・セットが、インポート・ユーザー・セッション用のキャラクタ・セットと異なる場合、最後のキャラクタ・セット変換が実行される場合があります。
キャラクタ・セット変換によるデータの損失を最小限にするには、エクスポート・データベース、エクスポート・ユーザー・セッション、インポート・ユーザー・セッションおよびインポート・データベースのすべてにおいて、同一のキャラクタ・セットを使用するようにしてください。
8ビット・キャラクタ・セットのエクスポート・ファイルをインポートすると、8ビット文字の一部が消去されることがあります(同等の7ビットに変換されます)。これが発生するのは、インポートを実行するシステムに、システム固有の7ビット・キャラクタ・セットが存在するか、オペレーティング・システム環境変数NLS_LANG
が7ビット・キャラクタ・セットに設定されている場合です。アクセント記号が付いている文字からアクセントが消去されるのが最もよく見られる例です。
このような状況を回避するために、オペレーティング・システム環境変数NLS_LANG
にエクスポート・ファイルのキャラクタ・セットを設定できます。
ターゲット・キャラクタ・セットに同等の文字がないエクスポート・ファイル中の文字は、変換時にデフォルトの文字に置換されます(デフォルトの文字は、ターゲット・キャラクタ・セットによって定義されます)。(デフォルトの文字は、ターゲット・キャラクタ・セットによって定義されます)。100%完全に変換されるためには、ターゲット・キャラクタ・セットはソース・キャラクタ・セットのスーパーセットであるか、ソース・キャラクタ・セットと同等である必要があります。
参照: Oracle Databaseグローバリゼーション・サポート・ガイド |
注意: エクスポート・サーバーとインポート・サーバーとの間でキャラクタ・セットの幅が異なるとき、変換が原因でデータの拡張が発生する場合にデータの切捨てが発生することがあります。切捨てが発生する場合、インポート・ユーティリティに警告メッセージが表示されます。 |
インスタンス親和性を使用して、インポートおよびエクスポートするデータベース内のインスタンスにジョブを関連付けることができます。複数のリリースを組み合せて使用している場合は、互換性の問題に注意してください。
参照:
|
次の項では、特定のデータベース・オブジェクトをインポートする場合の、制限事項および考慮点について説明します。
Oracle Databaseでは、オブジェクト型、オブジェクト表およびオブジェクト表内の行を一意に識別できるように、オブジェクト識別子が割り当てられます。オブジェクト識別子はインポート・ユーティリティによって保持されます。
型を参照している表のインポート時に、その名前の型がすでにデータベースに存在している場合は、その既存の型が、実際にその表で使用されているかどうか(実際は異なる型で、単に同じ名前であるだけではないか)を確認します。
この確認のために、型の一意の識別子(TOID)とエクスポート・ファイルに格納された識別子が比較されます。これらの識別子が一致する場合は、型の一意のハッシュ・コードとエクスポート・ファイルに格納されたハッシュ・コードが比較されます。TOIDまたはハッシュ・コードが一致しない場合、その表の行はインポートされません。
この妥当性チェックをしてはいけない型もあります(たとえば、その型がカートリッジのインストールによって作成された場合)。パラメータTOID_NOVALIDATE
を使用して、TOIDおよびハッシュ・コードと比較しない型を指定できます。詳細は、「TOID_NOVALIDATE」を参照してください。
注意: 型比較は、不正なデータを発生させないための非常に重要な機能であるため、TOID_NOVALIDATE の使用には、特に注意してください。この機能を使用禁止にする場合は、データ型の妥当性チェックとその処理について十分な知識を持つユーザーが行ってください。 |
次の基準によって、オブジェクト型、オブジェクト表およびオブジェクト表の行の処理方法が決まります。
オブジェクト型に関して、IGNORE
=y
が指定されていて、オブジェクト型がすでに存在し、そのオブジェクト識別子、ハッシュ・コードおよび型記述子が一致する場合は、エラーは通知されません。オブジェクト識別子またはハッシュ・コードが一致しない場合、パラメータTOID_NOVALIDATE
にそのオブジェクト型を無視する設定がされていないと、エラーが通知され、そのオブジェクト型を使用している表はインポートされません。
オブジェクト型に関して、IGNORE
=n
が指定されていて、そのオブジェクト型がすでに存在する場合は、エラーが通知されます。オブジェクト識別子、ハッシュ・コードまたは型記述子が一致しない場合、パラメータTOID_NOVALIDATE
にそのオブジェクト型を無視するように設定されていないと、エラーが通知され、そのオブジェクト型を使用している表はインポートされません。
オブジェクト表に関して、IGNORE
=y
が指定されていて、表がすでに存在し、そのオブジェクト識別子、ハッシュ・コードおよび型記述子が一致する場合、エラーは通知されません。行はオブジェクト表にインポートされます。同じオブジェクト識別子の行が、すでにそのオブジェクト表に存在している場合、行のインポートはエラーになります。オブジェクト識別子、ハッシュ・コードまたは型記述子が一致しない場合、パラメータTOID_NOVALIDATE
がそのオブジェクト型を無視するように設定されていないと、エラーが通知され、そのオブジェクト型を使用している表はインポートされません。
オブジェクト表に関して、IGNORE
=n
が指定されていて、オブジェクト表がすでに存在する場合は、エラーが通知され、オブジェクト表はインポートされません。
インポート・ユーティリティにオブジェクト型とオブジェクト表に関するオブジェクト識別子が保持されるため、FROMUSER
パラメータおよびTOUSER
パラメータを使用して、あるユーザー・スキーマから別のユーザー・スキーマにオブジェクトをインポートする場合は、次のことを考慮してください。
FROMUSER
のオブジェクト型およびオブジェクト表がターゲット表にすでに存在する場合は、TOUSER
のオブジェクト型およびオブジェクト表の識別子がすでに使用されているため、エラーが発生します。インポート開始前に、FROMUSER
のオブジェクト型およびオブジェクト表をシステムから削除する必要があります。
オブジェクト表作成時に、OID
AS
オプションを指定して他の表と同じオブジェクト識別子が割り当てられている場合は、同じオブジェクト識別子を持つ表を両方インポートすることはできません。1つ目の表はインポートできますが、同じオブジェクト識別子がすでに使用されているため、2つ目の表をインポートするとエラーになります。
表領域の使用方法または表の記憶域パラメータを変更するため、インポートの前に表を作成することがよくあります。表を作成する場合、以前(記憶域パラメータ以外に対して)使用していた定義と同じ定義で作成するか、互換性のある形式で作成する必要があります。オブジェクト表や、オブジェクト型の列を含む表の場合は、形式の互換性がさらに制限されます。
オブジェクト表およびオブジェクト列を含む表の場合、表が参照する各オブジェクトは、その名前、構造およびバージョン情報をエクスポート・ファイルに書き出されます。エクスポート・ユーティリティでは、必要に応じて、異なるスキーマのオブジェクト型の情報も含まれます。
インポート・ユーティリティは、表データをインポートする前に、表に必要な各オブジェクト型の存在を確認します。この確認機能には、オブジェクト型の名前の確認、インポート・システムのオブジェクト型の構造およびバージョンと、エクスポート・ファイルに書き込まれた情報との比較が含まれます。
オブジェクト型名がインポート・システムで検出され、構造またはバージョンがエクスポート・ファイルと一致しない場合、エラー・メッセージが生成され、表データはインポートされません。
インポート・パラメータTOID_NOVALIDATE
を使用して、特定のオブジェクトのオブジェクト型の構造およびバージョンの確認機能を使用禁止にできます。
内部のネストした表は外部表とは別にエクスポートされます。したがって、内部のネストした表が正しくインポートされない場合、次のような状況が予想されます。
内部にネストした表を持つ表がエクスポートされ、インポート時に、表も表内の行も削除されなかったとします。IGNORE=y
パラメータが指定されている場合、外部表に各行を挿入すると、制約違反が発生します。ただし、内部のネストした表のデータは正常にインポートされることがあり、その場合、内部表の行データが重複します。
外部表へデータをインポート中にリカバリ不能なエラーが発生した場合は、外部表の残りのデータはスキップされますが、対応する内部表の行はスキップされません。その結果、内部表の行は外部表のどの行からも参照されなくなります。
リカバリ可能なエラーの後で内部表への挿入がエラーになる場合、外部表の行はすでに外部表にインポートされています。また、外部表および他の内部表へのデータのインポートは続行されます。その結果、不完全な論理行が作成されます。
内部表へのデータのインポート中にリカバリ不能なエラーが発生した場合は、その内部表の残りのデータはスキップされますが、外部表やその他のネストした表はスキップされません。
常にログ・ファイルを調べて、外部表および内部表にエラーがないかどうかを確認する必要があります。データに一貫性を持たせるためには、表データの変更や削除が必要になることがあります。
内部にネストした表は、外部表とは別にインポートされるので、インポート中に、このネストした表のデータにアクセスしようとしても失敗することがあります。たとえば、内部表の行がインポートされる前に、外部表の行にアクセスすると、ユーザーには不完全な行が返されます。
REF
列および属性には、参照されている型のインスタンスを示すROWID
が隠されていることがあります。インポート・ユーティリティでは、ターゲット・データベースに対するROWID
は、自動的には再設定されません。ROWID
を適切な値に再設定するには、次の文を実行します。
ANALYZE TABLE [schema.]table VALIDATE REF UPDATE;
参照: ANALYZE TABLE 文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 |
BFILE
列および属性で参照されているデータは、ソース・データベースからターゲット・データベースへはコピーされません。BFILE
列で参照されているファイルの名前とディレクトリ別名が伝達されるのみです。BFILE
列および属性で参照されている実際のファイルは、DBAまたはユーザーが移動してください。
BFILE
列を含む表データをインポートする場合、BFILE
ロケータは、ディレクトリ別名およびエクスポート時のファイル名でインポートされます。インポート・ユーティリティでは、そのディレクトリ別名またはファイルが存在するかどうかの確認は行われません。ディレクトリ別名またはファイルが存在しない場合、ユーザーがBFILE
データにアクセスするとエラーが発生します。
ディレクトリ別名に関しては、エクスポート・システムで使用しているオペレーティング・システムのディレクトリ構文がインポート・システムで有効でない場合でも、インポート時にエラーは通知されません。ユーザーがインポート後に、そのファイルのデータにアクセスするとエラーが返されます。ディレクトリ別名がインポート・システムで有効かどうかは、DBAまたはユーザーが確認してください。
インポート・ユーティリティでは、外部関数ライブラリの参照先が正しいかどうかの確認は行われません。エクスポート・ファイル上のライブラリの指定で使用されているディレクトリやファイル名の形式がインポート・システムで無効であっても、インポート時にエラーは通知されません。この場合、インポート後にそのファンクションを呼び出そうとすると、エラーが返されます。
DBAまたはユーザーが手動でライブラリを移動し、ライブラリの指定がインポート・システムで有効になるようにしてください。
ローカルのストアド・プロシージャ、ストアド・ファンクションまたはパッケージがインポートされるときのインポート・ユーティリティの動作は、COMPILE
パラメータがy
またはn
に設定されているかどうかによって異なります。
ローカルのストアド・プロシージャ、ストアド・ファンクションまたはパッケージがインポートされ、COMPILE=y
が指定されている場合は、プロシージャ、ファンクション、パッケージはインポート時に再コンパイルされ、元のタイムスタンプ仕様が保持されます。コンパイルが成功すると、リモート・プロシージャによってアクセスしてもエラーは発生しません。
COMPILE=n
が指定されている場合も、プロシージャ、ストアド・ファンクションまたはパッケージはインポートされます。ただし、元のタイムスタンプは失われます。次に、プロシージャ、ファンクションまたはパッケージを使用するときに、コンパイルが実行されます。
Javaオブジェクトを任意のスキーマにインポートしても、リゾルバはインポート・ユーティリティによって変更されません(リゾルバとは、Javaのフルネームの解決に使用されるスキーマのリストです)。(リゾルバとは、Javaのフルネームの解決に使用されるスキーマのリストです)。インポートの終了後、明示的または暗黙的に再検証しないかぎり、すべてのユーザー・クラスが無効な状態のままになります。暗黙的な再検証は、クラスが最初に参照されるときに実行されます。明示的な再検証は、SQLのALTER JAVA CLASS...RESOLVE
文を使用すると実行されます。いずれの方法でもクラスは正常に解決され、有効になります。
インポート・ユーティリティでは、外部表によって参照される場所が正しいかどうかを検証しません。エクスポート・ファイルの表の指定で使用されるディレクトリ名およびファイル名の書式がインポート・システムで無効な場合、エラーはインポート時に報告されません。後でコールアウト関数を使用するときにエラーを受け取ります。
DBAまたはユーザーが手動で表を移動し、表の指定がインポート・システムで有効になるようにしてください。
キュー表をインポートすると、基礎となっているキューや関連するディクショナリ情報もインポートされます。キューのインポートは、キュー表単位のレベルでのみ実行できます。キュー表のインポートでは、エクスポートの表処理プロシージャの前後に、キュー・ディクショナリがメンテナンスされます。
参照: Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド |
LONG
列の長さは、最大2GBです。インポートおよびエクスポート時には、LONG
列は各行の残りのデータとともにメモリーに収まるサイズである必要があります。ただし、LONG
データはセクション単位でロードされるため、LONG
列を格納するメモリーが連続している必要はありません。
インポート・ユーティリティを使用して、LONG
列をCLOB
列に変換できます。このためには、まず、新しいCLOB
列を指定する表を作成します。インポートを実行すると、LONG
データはCLOB
形式に変換されます。同じ方法で、LONG
RAW
列をBLOB
列に変換できます。
注意: 既存のLONG 列をLOB列に変換することをお薦めします。LOB列は、LONG 列に比べ、より少ない制限事項が適用されます。また、LOB機能はすべてのリリースで拡張されていますが、LONG 機能は、いくつかのリリースでは拡張されていません。 |
Oracle Database 10gでは、トリガーが正常に動作し、LOBのロード中に高いパフォーマンスが保たれるようにLOB処理が改善されています。インポート・ユーティリティでは、エクスポート時に空であるすべてのLOBがインポート後に自動的にNULLに変更されるように改善されています。
LOBがNULLではなく、空である必要があるアプリケーションを使用している場合は、インポート後に、各LOB列に対してSQL UPDATE
文を発行できます。LOB列型がBLOB
かCLOB
かによって、構文は次のいずれかになります。
UPDATE <tablename> SET <lob column> = EMPTY_BLOB() WHERE <lob column> = IS NULL; UPDATE <tablename> SET <lob column> = EMPTY_CLOB() WHERE <lob column> = IS NULL;
インポートの実行後、NULLのLOB列と空のLOB列を区別する方法はありません。そのため、この情報がデータの整合性上重要である場合は、インポートの実行前にNULLのLOB列および空のLOB列を確認してください。
ビューは、依存順序でエクスポートされます。状況によっては、データベースから順序を取得するのではなく、エクスポートで順序付けをする必要があります。この場合、常に正しい順序を複製できるとはかぎりません。順序が正しくない場合、ビューのインポート時にコンパイル上の警告が発行され、そのビューに関する列コメントはインポートされません。
特に、viewa
でストアド・プロシージャprocb
が使用され、procb
でビューviewc
が使用されている場合、エクスポート・ユーティリティでは、ビューviewa
とviewc
の正しい順序付けはできません。viewa
がviewc
より先にエクスポートされ、procb
がインポート・システムにすでに存在する場合は、viewa
のインポート時にコンパイル上の警告が出されます。
ビューに関する権限は、ビューにコンパイル・エラーがあってもインポートされます。ビューの作成時に、そのビューの基礎になっているオブジェクト(たとえば、表、プロシージャ、他のビューなど)が存在していない場合、ビューにコンパイル・エラーが発生する場合があります。実表が存在しない場合、実表に対する権限を付与したユーザー自身が、その実表に対してGRANT
OPTION
付きの適正な権限を持っているかどうかを、サーバーでは検証できません。権限を付与したユーザーが適正な権限を持っていない場合、インポートされなかった表の作成後にその表にアクセスしようとすると、エラーが発生します。
他のスキーマの表を参照しているビューをインポートする場合は、インポートを実行するユーザーに、SELECT
ANY
TABLE
権限が必要です。この権限がない場合、ビューは、コンパイルされていない状態でインポートされます。ロールに権限を付与するのみでは不十分です。ビューのコンパイルには、インポートするユーザーに直接権限を付与する必要があります。
エクスポートしたパーティション表と同じパーティション名またはサブパーティション名を使用してパーティション表を作成するために、SYS_P
nnn
形式の名前もインポートされます。同じ名前のパーティション表がすでに存在している場合、これ以降の処理はIGNORE
パラメータに指定されている値によって異なります。
SKIP_UNUSABLE_INDEXES
=y
が指定されていないかぎり、インポート時に非パーティション索引またはパーティション索引が(索引使用禁止に設定されているか、またはその他の不適合が理由で)メンテナンスできない場合は、エクスポート・データはターゲット表にインポートできません。
ファイングレイン・アクセス・コントロール・ポリシーをリストアするには、ファイングレイン・アクセス・コントロール・ポリシーが使用可能な表を含むエクスポート・ファイルからインポートするユーザーが、表のセキュリティ・ポリシーを回復するためのDBMS_RLS
パッケージに対するEXECUTE
権限が必要です。
ファイングレイン・アクセス・コントロール・ポリシーが使用可能な表を含むエクスポートファイルからインポートを行うための正しい権限が付与されていない場合は、警告メッセージが発行されます。
インポート先のデータベースにマスター表がすでに存在し、そのマスター表にスナップショット・ログがある場合は、ダンプ・ファイルのスナップショット・ログがインポートされます。
ROWID
スナップショット・ログのエクスポートでは、スナップショット・ログに記録されているROWID
はインポートした後には意味を持ちません。このため、各ROWID
のスナップショットによる最初の高速リフレッシュは失敗し、完全リフレッシュが必要であることを示すエラーが発生します。
リフレッシュのエラーを回避するには、ROWID
のスナップショット・ログをインポートしてから完全リフレッシュを実行してください。完全リフレッシュを実行すると、後続の高速リフレッシュが適切に行われます。これに対し、主キー・スナップショット・ログをエクスポートした場合は、インポートした後でも主キーの値は意味を持ちます。したがって、インポートした後でも、主キーのスナップショットにより、高速リフレッシュを実行できます。
参照: インポート固有の移行と互換性、およびスナップショットとスナップショット・ログの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。 |
エクスポート・ファイルからリストアされたスナップショットは、前の状態に戻ってしまいます。インポートでは、最後のリフレッシュが実行された時刻が、スナップショット表定義の一部としてインポートされます。次のリフレッシュ時刻を計算する機能もインポートされます。
各リフレッシュによって、署名が付けられます。高速リフレッシュでは、スナップショットを最新に保つため、その署名の時刻から日付を決定するログ・エントリが使用されます。高速リフレッシュが完了した時点で署名は削除され、新しい署名が付けられます。他のスナップショットのリフレッシュに必要でないログ・エントリ(残っている最も古い署名よりも前の時刻を持つすべてのログ・エントリ)も削除されます。
エクスポート・ファイルからスナップショットをリストアすると、問題が発生する場合があります。
スナップショットが時刻Aにリフレッシュされ、時刻Bにエクスポートされ、時刻Cに再びリフレッシュされたとします。破損などの問題が発生したため、スナップショットを削除してインポートしなおすことによってリストアする必要があります。新規にインポートされたバージョンは、時刻Aとして記録された最終リフレッシュ時刻を保持しています。高速リフレッシュに必要となるログ・エントリが存在しなくなっている可能性があります。ログ・エントリが存在する場合は(たとえば、リフレッシュする必要のある別のスナップショットに必要なため)、このエントリが使用され、高速リフレッシュは正常に完了します。ログ・エントリが存在しない場合、高速リフレッシュは失敗し、完全リフレッシュが必要であることを示すエラーが発生します。
トランスポータブル表領域機能は、一連の表領域を、あるOracle Databaseから他のOracle Databaseに移動できる機能です。
注意: トランスポータブル表領域をエクスポートした後、それよりも古いリリース・レベルのデータベースにインポートすることはできません。ターゲット・データベースのリリース・レベルは、ソース・データベース以上である必要があります。 |
一連の表領域を移動またはコピーするには、表領域を読取り専用にし、表領域のデータ・ファイルをターゲット・データベースに手動でコピーしてから、エクスポートおよびインポートを使用して、データ・ディクショナリに格納されているデータベース情報(メタデータ)をターゲット・データベースに移動します。データ・ファイルの転送は、オペレーティング・システムのコピー機能、バイナリ・モードFTP、CD-ROMへの出力などのような、フラット・バイナリ・ファイルのコピー機能を使用して行われます。
データ・ファイルのコピーおよびメタデータのエクスポートの後、表領域を任意に読み書き両用モードにできます。
次のパラメータで、トランスポータブル表領域のメタデータを移動できます。
TABLESPACES
TRANSPORT_TABLESPACE
インポート操作時のこれらのパラメータの使用方法の詳細は、「TABLESPACES」および「TRANSPORT_TABLESPACE」を参照してください。
参照:
|
その表領域が存在しない場合、またはユーザーがその表領域に十分な割当て制限を持っていない場合、次の表の場合を除いて、そのユーザーにはデフォルトの表領域が割り当てられます。
パーティション表
特定の型の表
LOB型列、VARRAY
型列またはOPAQUE
型列を含む表
オーバーフロー・セグメントがあるIOTを含む表
ユーザーがデフォルトの表領域に対する十分な割当て制限を持っていない場合、そのユーザーの表はインポートされません。この制限の利用方法の詳細は、「表領域を再編成する方法」を参照してください。
表は、その表の現行の記憶域パラメータを使用してエクスポートされます。オブジェクト表に関しては、OIDINDEXの作成時に、OIDINDEXの現行の記憶域パラメータおよび名前が設定されている場合は、それらを使用して作成されます。LOB型列、VARRAY
型列またはOPAQUE
型列が含まれている表に関しては、LOB型データ、VARRAY
型データまたはOPAQUE
型データは、それらの現行の記憶域パラメータを使用して作成されます。
エクスポートの前に、ユーザーが既存の表の記憶域パラメータを変更する場合もありますが、このような場合、表は変更された記憶域パラメータを使用してエクスポートされます。ただし、LOBデータの記憶域パラメータは、エクスポートの前には変更できません(たとえば、LOB列のチャンク・サイズ、LOB列がCACHE
またはNOCACHE
か、など)。
LOBデータは、含んでいる表と同じ表領域に存在しない場合があることに、注意してください。このデータの表領域は、インポート時に読取り/書込みが可能である必要があります。そうでない場合、表はインポートされません。
LOBデータまたはLOB索引がインポート時に存在しない表領域にある場合、またはユーザーがその表領域に対して必要な割当て制限を持っていない場合、表はインポートされません。表領域の句は、表に関する句も含めて複数の句を同時に指定できるため、インポート時にエラーが発生しても、インポート・ユーティリティではどの表領域句が原因のエラーかを特定できません。
読取り専用表領域はエクスポート可能です。インポートでは、表領域がターゲット・データベース内に存在しない場合、読取り/書込み表領域として表領域が作成されます。読取り専用機能が必要な場合は、インポート後にその表領域を手動で読取り専用にする必要があります。
ターゲット・データベース内に表領域がすでに存在し、読取り専用である場合は、インポート前にこの表領域を読取り/書込み可能にする必要があります。
インポート前に、オブジェクトに別の表領域を使用するように再定義すると、表領域を削除できます。imp
コマンドの発行時には、IGNORE=y
を指定します。
表領域を削除するには、通常、全データベース・エクスポートを実行し、(ログオフの前に)削除する表領域と同名の表領域をブロック数0(ゼロ)で作成します。IGNORE=y
が指定されていると、インポート時にその表領域に関するCREATE TABLESPACE
文はエラーとなります。これにより、削除対象である不要な表領域は作成されません。
その表領域のすべてのオブジェクト(ただし、パーティション表、特定の型の表、LOB列またはVARRAY
列を含む表またはオーバーフロー・セグメントのあるIOTを除く)が、そのオブジェクトの所有者のデフォルトの表領域にインポートされます。インポート・ユーティリティでは、エラーの原因となった表領域を特定できません。かわりに、ユーザー自身が表の作成後、IGNORE=y
を指定して表のインポートを実行する必要があります。
その表領域が存在しない場合、またはデフォルトの表領域に対するユーザーの割当て制限が十分でない場合は、オブジェクトはデフォルトの表領域にインポートされません。
ユーザーの割当て制限が十分な場合、そのユーザーの表はエクスポート元と同じ表領域にインポートされます。その表領域がもう存在しないか、またはユーザーの割当て制限が十分でない場合は、そのユーザーに対するデフォルトの表領域が適用されます。ただし、パーティション表、LOB列またはVARRAY
列が含まれている表、特定の型の表およびオーバーフロー・セグメントのある索引構成表には適用されません。この条件を利用して、表領域間でユーザーの表を移動できます。
たとえば、全データベース・エクスポートを実行した後、joe
の表を表領域A
から表領域B
に移動する必要があるとします。この場合には、次の手順を実行します。
joe
がUNLIMITED
TABLESPACE
権限を持っている場合、その権限を取り消します。表領域A
に対するjoe
の割当て制限を0(ゼロ)に設定します。さらに、このような権限または割当て制限を含む可能性のあるすべてのロールを取り消します。
ロールの取消しでは、カスケード効果はありません。したがって、joe
によって他のロールを付与されたユーザーは影響を受けません。
joe
の表をエクスポートします。
表領域A
からjoe
の表を削除します。
joe
に表領域B
の割当て制限を付与し、joe
のデフォルトの表領域とします。
joe
の表をインポートします(デフォルトでは、joe
の表は表領域B
にインポートされます)。
統計情報がエクスポート時に必要で、表にアナライザ統計が利用できる場合、表の統計情報の再計算に使用されるANALYZE
文が、エクスポートによってダンプ・ファイルに含まれます。ほとんどの場合、表、索引および列に対する計算済オプティマイザ統計情報も、ダンプ・ファイルにエクスポートされます。インポート・パラメータの詳細は、「STATISTICS」を参照してください。
ANALYZE
文の実行には時間がかかるため、通常のインポートでは、エクスポートによって保存されるANALYZE
文を計算するのではなく、表(およびその索引や列)の計算済オプティマイザ統計情報を使用してください。デフォルトでは、エクスポート・ダンプ・ファイルにある計算済統計情報が使用されます。
エクスポート・ユーティリティによって、計算済統計情報に問題ありというフラグが付けられる場合もあります。次の状況では、計算済統計情報ではなく、問題のない統計情報のみをインポートする必要がある場合があります。
ダンプ・ファイル、インポート・クライアント、インポート・データベース間のキャラクタ・セット変換(計算済統計情報で暗黙的に照合順番が変更されている可能性が高いため)。
表のインポート時に行エラーが発生した場合。
パーティション・レベル・インポートが実行された場合(列統計情報が、すでに正確ではないため)。
注意: ROWS=n を指定しても、計算済統計情報は使用できます。この機能により、本番データベースからの統計情報を使用して、非本番データベース上で問合せの実行計画のチューニングを行うことができます。このような場合は、STATISTICS=SAFE を指定する必要があります。 |
場合によっては、インポート時に、計算済統計情報ではなく、常にANALYZE
文を使用する必要があります。たとえば、分散データベースから収集した統計情報は、そのデータが圧縮形式でインポートされると、適切でなくなる場合があります。このような場合は、インポート時にSTATISTICS=RECALCULATE
を指定して、統計情報を再計算する必要があります。
インポート時に統計情報を確定しない場合は、STATISTICS=NONE
を指定する必要があります。
エクスポート・ユーティリティおよびインポート・ユーティリティを使用して大規模データベースを移行する場合、移行を複数のエクスポート・ジョブおよびインポート・ジョブにパーティション化するとより効率的です。移行をパーティション化する場合は、次のメリットおよびデメリットに注意してください。
移行をパーティション化すると、次のメリットがあります。
多くのサブジョブをパラレルに実行できるため、移行に必要な時間を削減できます。
最初のエクスポート・ジョブが完了するとすぐにインポート・ユーティリティを起動できます。
移行をパーティション化すると、次のデメリットがあります。
エクスポートおよびインポートのプロセスがより複雑になります。
特定の型のオブジェクトに対する相互スキーマ参照のサポートが損なわれます。たとえば、異なるスキーマの表に対する外部キー制約を持つ表がスキーマに含まれている場合、その表を依存スキーマにインポートしたときに、必要な親レコードが存在しない場合があります。
データベースの移行をパーティション化方法で実行するには、次の手順に従います。
データベースのすべての最上位メタデータに、次のコマンドを発行します。
exp FILE=full FULL=y CONSTRAINTS=n TRIGGERS=n ROWS=n INDEXES=n
imp FILE=full FULL=y
データベースの各スキーマn
に、次のコマンドを発行します。
exp OWNER=schema
n
FILE=schema
n
imp FILE=schema
n
FROMUSER=schema
n
TOUSER=schema
n
IGNORE=y
すべてのエクスポートはパラレルで実行できます。full
.dmp
のインポートが完了すると、残りのインポートもパラレルで実行できます。
この項では、インポート操作のパフォーマンスを向上させる方法を説明します。パフォーマンスを向上させる方法は、次のとおりです。
システム・レベル・オプションに関して次の点を考慮すると、インポート操作のパフォーマンスの向上につながる場合があります。
1つの大きなロールバック・セグメントを作成および使用し、他のすべてのロールバック・セグメントをオフラインにします。一般に、インポートする最大の表の半分のサイズが、十分なロールバック・セグメントのサイズです。また、同じサイズの2つ以上のエクステントで、ロールバック・セグメントを作成することも有効です。
注意: ロールバック・セグメントのかわりに、自動UNDO管理を使用することをお薦めします。 |
インポートが完了するまでデータベースをNOARCHIVELOG
モードにします。これによって、アーカイブ・ログの作成および管理によるオーバーヘッドが削減されます。
いくつかの大きいREDOファイルを作成し、小さいREDOログ・ファイルをすべてオフラインにします。これによって、作成されるログ・スイッチが少なくなります。
可能な場合、ロールバック・セグメント、表データおよびREDOログ・ファイルをすべて個別のディスクに配置します。I/O競合が削減され、スループットが増加します。
可能な場合、システム・リソースに対するインポート操作との競合が発生する可能性がある他のジョブは、同時に実行しないでください。
ディクショナリ表に統計が存在しないことを確認してください。
sqlnet
.ora
ファイルにTRACE_LEVEL_CLIENT
=OFF
を設定します。
可能な場合、データベースの再作成時にDB_BLOCK_SIZE
の値を増加します。ブロック・サイズを大きくすると、必要なI/Oサイクル数は少なくなります。この変更は永続的であるため、行う前にすべての影響を考慮してください。
初期化パラメータ・ファイルの設定に関して次の点を考慮すると、インポート操作のパフォーマンスの向上につながる場合があります。
LOG_CHECKPOINT_INTERVAL
をREDOログ・ファイルのサイズより大きい数に設定します。オペレーティング・システム・ブロックの数(ほとんどのUNIXシステムでは512)です。これによって、(ログ・スイッチ時の)チェックポイントが最小まで削減されます。
SORT_AREA_SIZE
の値を増加します。増加する量は、システムで行われている他のアクティビティおよび使用可能な空きメモリーの量によって異なります。(システムでスワッピングおよびページングが開始された場合、設定値が高くなりすぎる可能性があります)。
DB_BLOCK_BUFFERS
およびSHARED_POOL_SIZE
の値を増加します。
インポート・オプションの使用について次の点を考慮すると、パフォーマンスの向上につながる場合があります。「インポート・パラメータ」に示す使用可能なオプションの各説明も参照してください。
COMMIT
=N
を設定します。これによって、各バッファの後ではなく、各オブジェクト(表)の後にインポートがコミットされます。このため、1つの大きなロールバック・セグメントが必要となります。(ロールバック・セグメントは将来のリリースでは非推奨になるため、かわりに、自動UNDO管理の使用をお薦めします。)
システム・アクティビティ、データベースのサイズなどに応じて、BUFFER
またはRECORDLENGTH
に大きい値を指定します。サイズを大きくすると、データに対してエクスポート・ファイルがアクセスされる回数が削減されます。通常は数MBで十分です。バッファ・サイズが大きすぎることを示す、過剰なページングおよびスワッピング・アクティビティをチェックします。
索引はインポート後に作成できるため、時間に余裕がある場合は、INDEXES
=N
の設定を考慮してください。設定する場合は、INDEXFILE
パラメータを使用して索引作成のDLLを抽出するか、またはINDEXES
=Y
およびROWS
=N
を指定してインポートを再実行します。
大量のLOBデータをインポートする場合は、次のことに注意してください。
索引を削除すると、総インポート時間が大幅に削減されます。LOBロケータには、インポート時に明示的に削除または無視できない主キーが存在するため、LOBデータのインポート時には特別な注意が必要です。
データのロードを完了するために使用できる十分な領域が、大きな連続したチャンクで存在することを確認してください。
LONG
列を持つ表をインポートすると、I/Oおよびディスクの使用率が高くなり、その結果、インポート操作のパフォーマンスが低くなります。大量のLONGデータのインポート時にパフォーマンスを向上させる特定のパラメータは存在しませんが、この項で説明したチューニングに関する一般的な考慮点に注意することによって、パフォーマンス全体が向上する場合があります。
この項では、リリースが異なるエクスポート・ユーティリティおよびOracle Databaseを使用することに関連した互換性の問題について説明します。
異なるリリースのOracle Database間でデータを移動するときは、必ず次の基本的な規則に従います。
インポート・ユーティリティとデータのインポート先データベース(ターゲット・データベース)は同じバージョンである必要があります。たとえば、インポート・ユーティリティ9.2.0.7を使用して9.2.0.8のデータベースにインポートしようとすると、エラーが発生する場合があります。
エクスポート・ユーティリティのバージョンは、ソースまたはターゲット・データベースの古い方のバージョンに合わせる必要があります。
たとえば、新しいリリースのデータベースにインポートするためにエクスポート・ファイルを作成する場合は、ソース・データベースと同じエクスポート・ユーティリティのバージョンを使用します。一方、古いリリースのデータベースにインポートするためのエクスポート・ファイルを作成する場合は、ターゲット・データベースのバージョンと同じバージョンのエクスポート・ユーティリティを使用します。
通常は、Oracle8リリースのエクスポート・ユーティリティを使用して、Oracle9iサーバーからエクスポートし、Oracle8エクスポート・ファイルを作成できます。
異なるリリースのエクスポート・ユーティリティおよびインポート・ユーティリティを使用する場合、次の制限があります。
エクスポート・ダンプ・ファイルは、特別なバイナリ形式で格納されているため、インポート・ユーティリティによる読取り専用です。
すべてのエクスポート・ダンプ・ファイルは、上位リリースのOracle Databaseにインポートできます。
インポート・ユーティリティでは、上位のメンテナンス・リリースまたはバージョンのエクスポート・ユーティリティで作成されたエクスポート・ダンプ・ファイルの読取りはできません。たとえば、リリース9.2のエクスポート・ダンプ・ファイルは、リリース9.0.1のインポート・ユーティリティではインポートできません。
下位バージョンのエクスポート・ユーティリティを上位バージョンのOracle Databaseで実行すると、下位バージョンに存在しないデータベース・オブジェクトのカテゴリは、常に、エクスポートから除外されます。
Oracle9iのエクスポート(ダイレクト・パスまたは従来型パス)によって生成されたエクスポート・ファイルは、以前のリリースのインポート・ユーティリティと互換性がありません。したがって、インポートにはOracle9iのインポートのみを使用できます。下位互換性が問題になる場合は、Oracle9iデータベースよりも古いリリースのエクスポート・ユーティリティを使用してください。
表22-5に、異なるリリースのOracle Database間でデータを移動させる場合に使用するエクスポート・ユーティリティおよびインポート・ユーティリティのリリースの例を示します。
表22-5 リリースが異なるエクスポート・ユーティリティおよびインポート・ユーティリティの使用
エクスポート元>インポート先 | 使用するエクスポート・ユーティリティのリリース | 使用するインポート・ユーティリティのリリース |
---|---|---|
8.1.6 -> 8.1.6 |
8.1.6 |
8.1.6 |
8.1.5 -> 8.0.6 |
8.0.6 |
8.0.6 |
8.1.7 -> 8.1.6 |
8.1.6 |
8.1.6 |
9.0.1 -> 8.1.6 |
8.1.6 |
8.1.6 |
9.0.1 -> 9.0.2 |
9.0.1 |
9.0.2 |
9.0.2 -> 10.1.0 |
9.0.2 |
10.1.0 |
10.1.0 -> 9.0.2 |
9.0.2 |
9.0.2 |
表22-5に、オリジナルのエクスポートおよびインポート・ユーティリティ間のデータ移動を示します。Oracle Database 10gリリース1(10.1)以上では、ほとんどの場合にデータ・ポンプ・エクスポートおよびデータ・ポンプ・インポート・ユーティリティを使用することをお薦めします。これらのユーティリティは、オリジナルのエクスポートおよびインポート・ユーティリティと比較して、パフォーマンスが著しく向上しています。
参照: 10.1以上のリリースを含めた異なるリリース間のエクスポートおよびインポートの詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。 |