プライマリ・コンテンツに移動
Oracle® Databaseユーティリティ
11gリリース2 (11.2)
B56303-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

22 オリジナルのインポート

この章では、オリジナルのエクスポート・ユーティリティを使用して作成されたダンプ・ファイルを、オリジナルのインポート・ユーティリティ(imp)を使用してインポートする方法を説明します。

この章の内容は、次のとおりです。

インポート・ユーティリティとは

インポート・ユーティリティは、オリジナルのエクスポート・ユーティリティで作成されたダンプ・ファイルからオブジェクトの定義および表データを読み込みます。ダンプ・ファイルはOracleのバイナリ形式になっており、オリジナルのインポートを使用した場合のみ読取りが可能です。

ダンプ・ファイルの作成に使用したエクスポート・ユーティリティより前のバージョンのインポート・ユーティリティは使用できません。

表オブジェクト: インポートの順序

表オブジェクトは、エクスポート・ダンプ・ファイルから読み込まれたとおりにインポートされます。ダンプ・ファイルには、次の順序でオブジェクトが格納されています。

  1. 型定義

  2. 表定義

  3. 表データ

  4. 表索引

  5. 整合性制約、ビュー、プロシージャおよびトリガー

  6. ビットマップ索引、ファンクション索引およびドメイン索引

インポートの順序は次のとおりです。まず、新しい表が作成されます。次にデータがインポートされ、索引が作成されます。その後トリガーがインポートされ、整合性制約が新しい表で使用可能になり、ビットマップ索引、ファンクション索引またはドメイン索引(あるいはそれらのすべて)が作成されます。このようにインポートされると、表のインポート順序が原因でデータが拒否されることがなくなります。また、同じデータについて、トリガーが重複して2回(最初の挿入時に1回、インポート中に1回)起動することもなくなります。

インポート・ユーティリティを使用する前に

インポート・ユーティリティを使用する前に、次のことを行う必要があります(詳細は以降の項を参照してください)。

  • データベースを手動で作成した場合は、catexp.sqlまたはcatalog.sqlスクリプトが実行されたことの確認。Database Configuration Assistant(DBCA)を使用してデータベースを作成した場合は、これらのスクリプトを実行する必要はありません。

  • 必要なアクセス権限を所有していることの確認

catexp.sqlまたはcatalog.sqlの実行

インポート・ユーティリティを使用するには、データベースを作成するかまたは新しいバージョンに移行した後で、スクリプトcatexp.sqlまたは(catexp.sqlを実行する)catalog.sqlを実行する必要があります。

データベースに対して、catexp.sqlまたはcatalog.sqlを実行するのは1回のみです。スクリプトを実行すると、次の処理が行われ、データベースはエクスポートおよびインポート操作に備えて調整されます。

  • データ・ディクショナリへの必要なインポート・ビューの作成

  • EXP_FULL_DATABASEロールおよびIMP_FULL_DATABASEロールの作成

  • EXP_FULL_DATABASEおよびIMP_FULL_DATABASEロールへのすべての必要な権限の割当て

  • DBAロールへのEXP_FULL_DATABASEおよびIMP_FULL_DATABASEの割当て

  • インストールされているcatexp.sqlのバージョンの記録

インポート操作のアクセス権の確認

インポート・ユーティリティを使用するには、Oracle Databaseに対するCREATE SESSION権限が必要です。この権限は、データベースの作成時に設定されるCONNECTロールに含まれます。

他のユーザーが作成したエクスポート・ファイルをインポートすることもできます。ただし、EXP_FULL_DATABASEロールを所有するユーザーが作成したエクスポート・ファイルをインポートするには、IMP_FULL_DATABASEロールが必要です。通常、データベース管理者(DBA)にはこれらの両方のロールが割り当てられています。

オブジェクトをスキーマにインポートする方法

表22-1に、自分のスキーマにオブジェクトをインポートするために必要な権限を示します。 これらのすべての権限は、あらかじめRESOURCEロールに含まれています。

表22-1 自分のスキーマにオブジェクトをインポートするために必要な権限

オブジェクト 必要な権限(該当する場合の権限タイプ)

クラスタ

CREATE CLUSTER(システム)またはUNLIMITED TABLESPACE(システム)。ユーザーに表領域割当て制限が割り当てられている必要があります。

データベース・リンク

CREATE DATABASE LINK(システム)およびリモート・データベースの場合はCREATE SESSION(システム)

表のトリガー

CREATE TRIGGER (システム)

スキーマのトリガー

CREATE ANY TRIGGER(システム)

索引

CREATE INDEX(システム)またはUNLIMITED TABLESPACE(システム)。ユーザーに表領域割当て制限が割り当てられている必要があります。

整合性制約

ALTER TABLE (オブジェクト)

ライブラリ

CREATE ANY LIBRARY(システム)

パッケージ

CREATE PROCEDURE (システム)

プライベート・シノニム

CREATE SYNONYM (システム)

順序

CREATE SEQUENCE (システム)

スナップショット

CREATE SNAPSHOT (システム)

ストアド・ファンクション

CREATE PROCEDURE (システム)

ストアド・プロシージャ

CREATE PROCEDURE (システム)

表データ

INSERT TABLE (オブジェクト)

表定義(コメントおよび監査オプションを含む)

CREATE TABLE(システム)またはUNLIMITED TABLESPACE(システム)ユーザーに表領域割当て制限が割り当てられている必要があります。

ビュー

実表の場合はCREATE VIEW (システム)およびSELECT (オブジェクト)、またはSELECT ANY TABLE (システム)

オブジェクト型

CREATE TYPE (システム)

外部関数ライブラリ

CREATE LIBRARY (システム)

ディメンション

CREATE DIMENSION (システム)

演算子

CREATE OPERATOR (システム)

索引タイプ

CREATE INDEXTYPE (システム)


権限のインポート

他のユーザーに付与されている権限をインポートするには、インポートを開始したユーザーがそのオブジェクトの所有者であるか、WITH GRANT OPTION付きのオブジェクト権限を所有している必要があります。表22-2に、権限がターゲット・システムで有効となるために必要な条件を示します。

表22-2 権限のインポートに必要な権限

権限 条件

オブジェクト権限

オブジェクトがユーザーのスキーマに存在しているか、

ユーザーがWith Grant Option付きのオブジェクト権限を所有しているか、または

IMP_FULL_DATABASEロールを使用可能にする必要があります。

システム権限

ユーザーがSYSTEM権限およびWith Admin Optionを所有している必要があります。


他のスキーマへのオブジェクトのインポート

オブジェクトを他のユーザーのスキーマにインポートする場合は、IMP_FULL_DATABASEロールを使用可能にしておく必要があります。

システム・オブジェクトのインポート

システム・オブジェクトを全データベース・エクスポート・ファイルからインポートする場合は、IMP_FULL_DATABASEロールを使用可能にする必要があります。パラメータFULLを指定すると、次のシステム・オブジェクトがインポート対象に含まれます。

  • プロファイル

  • パブリック・データベース・リンク

  • パブリック・シノニム

  • ロール

  • ロールバック・セグメント定義

  • リソース・コスト

  • 外部関数ライブラリ

  • コンテキスト・オブジェクト

  • システム・プロシージャ・オブジェクト

  • システム監査オプション

  • システム権限

  • 表領域定義

  • 表領域割当て制限

  • ユーザー定義

  • ディレクトリ別名

  • システム・イベント・トリガー

処理上の制限事項

インポート・ユーティリティを使用してデータを処理する場合、次の制限が適用されます。

  • 型定義が進化し、その進化した型を参照するデータがエクスポートされた場合、インポート・システムの型定義も同様に進化させる必要があります。

  • エクスポートおよびインポート時には、表およびパーティションの表圧縮属性が保持されます。ただし、インポート処理ではダイレクト・パスAPIが使用されないため、データは、インポート時に圧縮された形式では格納されません。

既存の表へのインポート

この項では、既存の表にデータをインポートする場合に考慮すべき点について説明します。

データのインポート前に手動で表を作成する方法

エクスポート・ファイルから表にデータをインポートする前に手動で表を作成する場合は、以前使用した表定義を使用するか、互換性のある形式を使用して表を作成します。たとえば、列幅の増加および列順序の変更はできますが、次のことはできません。

  • NOT NULL列の追加

  • 互換性がないデータ型への列のデータ型の変更(たとえば、LONG型からNUMBER型への変更)

  • 表で使用されているオブジェクト型定義の変更

  • DEFAULT列値の変更


    注意:

    データをインポートする前に表を手動で作成した場合は、表がすでに存在するため、エクスポート・ダンプ・ファイルでCREATE TABLE文を実行するとエラーが発生します。このエラーを回避して、表へのデータのロードを継続するには、インポート・パラメータをIGNORE=yに設定します。設定しない場合、表作成エラーが発生し、データは表にロードされません。

参照制約を使用禁止にする方法

通常のインポートの順序では、参照制約はすべての表がインポートされた後にインポートされます。この順序でインポートすることによって、まだインポートされていないデータに対する参照整合性制約が存在する場合に発生するエラーを回避できます。

データが既存の表にロードされる場合に、このようなエラーが発生することがあります。たとえば、表empmgr列に参照整合性制約が定義されており、その制約によって表emp内のマネージャ番号が検証される場合、マネージャの行がインポートされていない時点では、従業員の行が基準を満たしていても、参照整合性制約の違反になることがあります。

このようなエラーが発生すると、エラー・メッセージが生成され、失敗した行をバイパスして、引き続き他の行が表にインポートされます。制約を手動で使用禁止にすると、このエラーを回避できます。

複数の表にまたがって参照制約が存在すると、問題になることがあります。たとえば、emp表の順序がエクスポート・ダンプ・ファイル内でdept表より先であるにもかかわらず、emp表からdept表へ参照チェックが行われると、参照制約違反のため、emp表のいくつかの行がインポートされないことがあります。

このようなエラーが発生しないようにするには、データを既存の表にインポートするときに、参照整合性制約を使用禁止にします。

手動によるインポートの順序付け

インポート後に制約が再び使用可能にされると、表全体がチェックされますが、大きな表の場合はチェックに時間がかかることがあります。表のチェックにかかる時間が長すぎる場合、インポートを手動で順序付ける方が効率的なこともあります。

そのためには、エクスポート・ファイルからのインポートを1回ではなく複数回に分けて実行します。まず、参照チェックのターゲットである表をインポートします。次に、これらの表を参照する表をインポートします。表が循環的に相互参照している場合、および表がその表自体を参照している場合を除き、この方法は有効です。

インポート操作上のスキーマおよびデータベース・トリガーの影響

特定のスキーマに対するDDLイベントまたはデータベースに対するDDL関連イベントで実行するように定義されているトリガーは、システム・トリガーです。これらのトリガーは、特定のインポート操作に悪い影響を与える場合があります。たとえば、表などのデータベース・オブジェクトを正常に再作成できない場合があります。これによって、トリガーが原因で問題が発生したということがわからないエラーが返されます。

データベース管理者およびシステム・トリガーを作成するユーザーは、このようなトリガーによって、ユーザーが、権限を持つデータベースの操作を実行できなくなることがないように確認する必要があります。システム・トリガーをテストするには、次の手順に従います。

  1. トリガーを定義します。

  2. データベース・オブジェクトを作成します。

  3. 表モードまたはユーザーモードでオブジェクトをエクスポートします。

  4. オブジェクトを削除します。

  5. オブジェクトをインポートします。

  6. オブジェクトが正常に再作成されていることを確認します。


    注意:

    全体エクスポートでは、スキーマ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=nPARFILE=params.datにあるため、パラメータ・ファイルに指定されているINDEXESパラメータの値は、INDEXES=nによって上書きされます。


参照:


対話方式モード

各パラメータの値をプロンプトで入力するには、コマンドラインでimpを指定するだけです。ユーザー名とパスワードを入力するように要求されます。

その後、一般的に使用されるパラメータが表示されます。デフォルト値を受け入れるか(示された場合)、または異なる値を入力できます。コマンドライン対話方式では、すべての機能に関してプロンプトが表示されるわけではありません。また、コマンドライン対話方式は下位互換用のみに提供されています。

SYSDBAでのインポート・ユーティリティの起動

SYSDBAは内部的に使用され、一般ユーザーとは異なる特別な機能を持ちます。そのため、通常、次の場合以外は、インポート・ユーティリティをSYSDBAで起動する必要はありません。

  • Oracleサポート・サービスから要求された場合

  • トランスポータブル表領域セットをインポートする場合

オンライン・ヘルプの利用

インポート・ユーティリティでは、オンライン・ヘルプが提供されます。インポート・ユーティリティのヘルプを起動するには、imp help=yと入力します。

インポート・ユーティリティのモード

インポート・ユーティリティには、次の4種類の操作モードがあります。

  • 全体インポート: データベース全体をインポートします。IMP_FULL_DATABASEロールを所有するユーザーのみが使用できます。FULLパラメータを使用してこのモードを指定します。

  • 表領域モード: 特権ユーザーが表領域をOracle Database間で移動できます。TRANSPORT_TABLESPACEパラメータを使用してこのモードを指定します。

  • ユーザー・モード: 所有するすべてのオブジェクト(表、権限、索引、プロシージャなど)をインポートできます。特権ユーザーがユーザー・モードでインポートする場合、指定したユーザー・グループのユーザーのスキーマにあるすべてのオブジェクトをインポートできます。このモードを指定するには、FROMUSERパラメータを使用します。

  • 表モード: 特定の表およびパーティションをインポートできます。特権ユーザーは、インポートする表を含むスキーマを指定して、その表を修飾できます。TABLESパラメータを使用してこのモードを指定します。

表22-3に、各モードでインポートされるオブジェクトのリストを示します。


注意:

表モードを使用してANYDATA型の列を含む表をインポートする場合、次のエラーが発生する場合があります。

ORA-22370: メソッドの使用方法が正しくありません。Nonexistent type。

このメッセージは、ANYDATA列が、データベースに存在しない他の型に依存することを示します。表モードを使用してANYDATA型を使用する表をインポートする前に、手動で、ターゲット・データベース内に依存型を作成する必要があります。


IMP_FULL_DATABASEロールを持つユーザーは、これらのモードのいずれかを指定する必要があります。指定しない場合、インポートはエラーになります。IMP_FULL_DATABASEロールを持たないユーザーがこれらのモードをいずれも指定しない場合は、ユーザー・レベルのインポートが実行されます。

表22-3 各モードでインポートされるオブジェクト

オブジェクト 表モード ユーザー・モード 全データベース・モード 表領域モード

分析クラスタ

なし

あり

あり

なし

分析表/統計

あり

あり

あり

あり

アプリケーション・コンテキスト

なし

なし

あり

なし

監査情報

あり

あり

あり

なし

Bツリー索引、ビットマップ索引、ドメイン・ファンクション索引

あり脚注 1 

あり

あり

あり

クラスタ定義

なし

あり

あり

あり

列コメントおよび表コメント

あり

あり

あり

あり

データベース・リンク

なし

あり

あり

なし

デフォルト・ロール

なし

なし

あり

なし

ディメンション

なし

あり

あり

なし

ディレクトリ別名

なし

なし

あり

なし

外部表(データなし)

あり

あり

あり

なし

外部関数ライブラリ

なし

あり

あり

なし

表の所有者以外のユーザーが所有する索引

あり(特権ユーザーのみ)

あり

あり

あり

索引タイプ

なし

あり

あり

なし

JavaリソースおよびJavaクラス

なし

あり

あり

なし

ジョブ・キュー

なし

あり

あり

なし

ネストした表のデータ

あり

あり

あり

あり

オブジェクト権限

あり(表および索引のみ)

あり

あり

あり

表で使用されるオブジェクト型定義

あり

あり

あり

あり

オブジェクト型

なし

あり

あり

なし

演算子

なし

あり

あり

なし

パスワード履歴

なし

なし

あり

なし

インスタンスの事後処理およびオブジェクト

なし

なし

あり

なし

スキーマの事後プロシージャ処理およびオブジェクト

なし

あり

あり

なし

表の事後処理

あり

あり

あり

あり

表の事後プロシージャ処理およびオブジェクト

あり

あり

あり

あり

スキーマの事前プロシージャ・オブジェクトおよび処理

なし

あり

あり

なし

表の事前処理

あり

あり

あり

あり

表の事前プロシージャ処理

あり

あり

あり

あり

プライベート・シノニム

なし

あり

あり

なし

プロシージャ・オブジェクト

なし

あり

あり

なし

プロファイル

なし

なし

あり

なし

パブリック・シノニム

なし

なし

あり

なし

参照整合性制約

あり

あり

あり

なし

リフレッシュ・グループ

なし

あり

あり

なし

リソース・コスト

なし

なし

あり

なし

ロール権限

なし

なし

あり

なし

ロール

なし

なし

あり

なし

ロールバック・セグメント定義

なし

なし

あり

なし

表のセキュリティ・ポリシー

あり

あり

あり

あり

順序番号

なし

あり

あり

なし

スナップショット・ログ

なし

あり

あり

なし

スナップショットおよびマテリアライズド・ビュー

なし

あり

あり

なし

システム権限

なし

なし

あり

なし

表制約(主キー制約、一意制約、CHECK制約)

あり

あり

あり

あり

表データ

あり

あり

あり

あり

表定義

あり

あり

あり

あり

表領域定義

なし

なし

あり

なし

表領域割当て制限

なし

なし

あり

なし

トリガー

あり

あり脚注 2 

あり脚注 3 

あり

他のユーザーが所有するトリガー

あり(特権ユーザーのみ)

なし

なし

なし

ユーザー定義

なし

なし

あり

なし

ユーザー・プロキシ

なし

なし

あり

なし

ユーザー・ビュー

なし

あり

あり

なし

ユーザー・ストアド・プロシージャ、ユーザー・ストアド・パッケージおよびユーザー・ストアド・ファンクション

なし

あり

あり

なし


脚注 1  非特権ユーザーがエクスポートおよびインポートできるのは、そのユーザー自身が所有する表に関する索引のみです。他のユーザーが所有する表に関する索引や、ユーザー自身が所有する表に関して他のユーザーが作成した索引はエクスポートできません。特権ユーザーは、エクスポートおよびインポート対象に指定したユーザーの表に関する索引が、表の所有者以外のユーザーが作成したものであっても、その索引をエクスポートおよびインポートできます。指定したユーザーが他のユーザーの表に関する索引を所有しているときは、エクスポートするユーザーのリストに表の所有者であるユーザーを指定しないかぎり、その索引はエクスポートされません。

脚注 2  特権ユーザーも非特権ユーザーも、そのユーザー自身が所有するすべてのトリガーを(他のユーザーが所有する表に関するトリガーの場合でも)、エクスポートおよびインポートできます。

脚注 3  全体エクスポートでは、スキーマSYSが所有するトリガーはエクスポートされません。SYSトリガーは、全体インポートの前後のいずれかに手動で再作成する必要があります。このトリガーによってインポートの進行を妨げるような処理が定義されないように、インポートの後に再作成することをお薦めします。

インポート・パラメータ

この項では、インポート・コマンドライン・パラメータについて説明します。

BUFFER

デフォルト: オペレーティング・システムによって異なります。

BUFFERに指定された整数は、転送したデータ行を格納するバッファのバイト数です。

BUFFERによって、インポートで挿入される配列の行数が決定します。所定の行配列の挿入に必要なバッファ・サイズは、次のように計算できます。

buffer_size = rows_in_array * maximum_row_size

LOB、LONGBFILEREFROWIDUROWIDまたはTIMESTAMPの各列が含まれている表には、1回に1行ずつ挿入されます。バッファ・サイズは(LOBおよびLONG列の場合以外は)、行全体を格納できるだけの容量が必要です。バッファ・サイズが足りずに表の最長の行を格納できない場合、インポート・ユーティリティはさらに大きいサイズのバッファを割り当てようとします。

DATE列の場合は、バッファの大きさが十分であれば一度に複数の行が挿入されます。


注意:

このパラメータのデフォルト値については、ご使用のオペレーティング・システム固有のOracleマニュアルを参照してください。

COMMIT

デフォルト: n

配列を挿入するたびにコミットするかどうかを指定します。デフォルトでは、各表はロードされた後にのみコミットされ、エラーが発生した場合はロールバックを実行してから次のオブジェクトに進みます。

表にネストした表の列または属性が含まれている場合、ネストした表の内容は、それぞれ別の表としてインポートされます。したがって、ネストした表の内容は、常に、外部表をコミットしたトランザクションとは別のトランザクションとしてコミットされます。

パーティション表の場合にCOMMIT=nを指定すると、エクスポート・ファイルのそれぞれのパーティションおよびサブパーティションは、別のトランザクションとしてインポートされます。

LOB、LONGBFILEREFROWIDUROWIDまたはTIMESTAMPの各列が含まれている表では、配列の挿入は行われません。COMMIT=yが指定されていると、各行の挿入後に表がコミットされます。

COMPILE

デフォルト: y

パッケージ、プロシージャおよびファンクションを、作成時にインポート・ユーティリティでコンパイルするかどうかを指定します。

COMPILE=nの場合、これらのユニットは最初の使用時にコンパイルされます。たとえば、ドメイン索引作成に使用されるパッケージは、ドメイン索引作成時にコンパイルされます。

CONSTRAINTS

デフォルト: y

表の制約をインポートするかどうかを指定します。デフォルトでは、制約をインポートします。制約をインポートしないようにするには、このパラメータ値をnに設定します。

IOTおよびオブジェクト表の主キー制約は、常にインポートされます。

DATA_ONLY

デフォルト: n

データのみ(メタデータなし)をダンプ・ファイルからインポートする場合は、DATA_ONLY=yを指定します。

DATA_ONLY=yを指定すると、コマンドライン(またはパラメータ・ファイル)で入力されたインポート・パラメータのうち、メタデータと関連のあるパラメータは無効になります。つまり、ダンプ・ファイルからメタデータはインポートされないことになります。

メタデータに関連するパラメータは、COMPILECONSTRAINTSDATAFILESDESTROYGRANTSIGNOREINDEXESINDEXFILEROWS=nSHOWSKIP_UNUSABLE_INDEXESSTATISTICSSTREAMS_CONFIGURATIONSTREAMS_INSTANTIATIONTABLESPACESTOID_NOVALIDATETRANSPORT_TABLESPACETTS_OWNERSです。

DATAFILES

デフォルト: なし

TRANSPORT_TABLESPACEyを指定した場合、データベースに転送するデータ・ファイルを、このパラメータを使用して表示します。

DESTROY

デフォルト: n

データベースを構成する既存のデータ・ファイルを再利用するかどうかを指定します。つまり、DESTROY=yと指定すると、インポートではSQL CREATE TABLESPACE文のデータ・ファイル句にREUSEオプションが含められ、これにより、オリジナル・データベースのデータ・ファイルの内容が削除された後に、データ・ファイルが再利用されます。

エクスポート・ファイルには、各表領域内で使用されるデータ・ファイル名が含まれていることに注意してください。DESTROY=yを指定して、2つ目のデータベースを(テストまたはその他の目的で)同じシステム上に作成しようとすると、インポート・ユーティリティでは、表領域を作成するときに最初のデータベースのデータ・ファイルを上書きします。このような場合には、デフォルトのDESTROY=nを使用して、表領域が作成されるときにデータ・ファイルがすでに存在する場合、エラーが発生するようにする必要があります。また、オリジナル・データベースにインポートする必要がある場合は、既存のデータ・ファイルを置換しないでデータ・ファイルに追加するように、IGNORE=yを指定する必要があります。


注意:

データ・ファイルがRAWデバイスに格納されている場合は、DESTROY=nを指定しても、ファイルは上書きされます

FEEDBACK

デフォルト: 0 (ゼロ)

n行分のインポートを1つのピリオドで示すプログレス・バーの表示を指定します。たとえば、FEEDBACK=10を指定すると、10行分のインポートが終了するたびにピリオドが1つ表示されます。FEEDBACK値は、インポートされるすべての表に適用されるため、各表に対して個別には設定できません。

FILE

デフォルト: expdat.dmp

インポートするエクスポート・ファイル名を指定します。デフォルトの拡張子は、.dmpです。エクスポート・ユーティリティは、複数ファイルのエクスポートをサポートしているため(次のFILESIZEパラメータの説明を参照)、複数のインポート・ファイル名が必要な場合もあります。次に例を示します。

imp scott IGNORE=y FILE = dat1.dmp, dat2.dmp, dat3.dmp FILESIZE=2048
 

ユーザー自身がエクスポートしたファイルでなくても指定できますが、そのファイルに対する読取り権限が必要です。他のユーザーがエクスポートしたエクスポート・ファイルの場合は、IMP_FULL_DATABASEロールが必要です。

FILESIZE

デフォルト: オペレーティング・システムによって異なります。

エクスポート時に指定したサイズと同じ最大ダンプ・ファイル・サイズを指定できます。


注意:

許容最大サイズは、オペレーティング・システムによって異なります。この最大値については、FILESIZEを指定する前に、ご使用のオペレーティング・システム固有のOracleマニュアルで確認してください。

FILESIZEの値は、数字にKB(キロバイト数)を付けて指定できます。たとえば、FILESIZE=2KBは、FILESIZE=2048と同じです。同様に、MBはメガバイト(1024×1024)を、GBはギガバイト(1024の3乗)を表します。Bはバイトの省略です。この場合、最終的なファイル・サイズの算出に乗算は不要です(FILESIZE=2048Bは、FILESIZE=2048と同じです)。

FROMUSER

デフォルト: なし

インポートするスキーマをカンマで区切ったリスト。このパラメータは、IMP_FULL_DATABASEロールを持つユーザーにのみ関係があります。このパラメータで、複数のスキーマを含むエクスポート・ファイル(たとえば、全体エクスポート・ダンプ・ファイルまたは複数スキーマのユーザー、ユーザー・モードのエクスポート・ダンプ・ファイルなど)からスキーマのサブセットをインポートできます。

ファンクション索引、ファンクション、プロシージャ、トリガー、型本体、ビューなどの内部に表示されるスキーマ名は、FROMUSERまたはTOUSERの処理には影響されません。影響を受けるのは、オブジェクト名のみです。インポートの完了後、TOUSERスキーマに含まれる項目が古いスキーマ(FROMUSER)を参照しているかどうかを手動で確認し、必要に応じて修正する必要があります。

通常は、インポート・パラメータTOUSERFROMUSERを組み合せて使用し、インポートのターゲットとなるスキーマの所有者ユーザー名のリストを指定します(「TOUSER」を参照)。インポート操作の前にターゲット・データベース内にTOUSERで指定するユーザーが存在している必要があります。存在していない場合、エラーが返されます。

TOUSERを指定しない場合、インポート操作では次のことが行われます。

  • エクスポート・ファイルが、全データベース・モードのダンプ・ファイル、または複数スキーマ、ユーザー・モードのエクスポート・ダンプ・ファイルの場合、FROMUSERのスキーマへオブジェクトをインポートします。

  • エクスポート・ファイルが単一のスキーマで、ユーザー・モードのエクスポート・ダンプ・ファイルが権限のないユーザーに作成された場合、(インポート時にFROMUSERスキーマが存在するかどうかにかかわらず)インポートするユーザーのスキーマにオブジェクトを作成します。


    注意:

    FROMUSER=SYSTEMを指定しても、システム・オブジェクトはインポートされず、ユーザーSYSTEMが所有するスキーマ・オブジェクトのみがインポートされます。

FULL

デフォルト: y

エクスポート・ダンプ・ファイル全体をインポートするかどうかを指定します。

全データベースのエクスポートおよびインポートについての考慮点

全データベースのエクスポートおよびインポートは、データベースの複製およびクリーンアップに有効です。ただし、問題が発生しないように、次の点に注意する必要があります。

  • 全体エクスポートでは、スキーマSYSが所有するトリガーはエクスポートされません。SYSトリガーは、全体インポートの前後のいずれかに手動で再作成する必要があります。このトリガーによってインポートの進行を妨げるような処理が定義されないように、インポートの後に再作成することをお薦めします。

  • 全体エクスポートでは、デフォルトのプロファイルもエクスポートされません。ソース・データベースでデフォルトのプロファイルを変更した場合(たとえば、スキーマSYSが所有するパスワード確認機能を追加するなど)は、事前に手動でその機能を作成し、インポートの完了後にターゲット・データベースでデフォルトのプロファイルを変更する必要があります。

  • 可能な場合、開始前にエクスポートされたデータベースおよびインポートするデータベースの物理コピーを作成します。これによって、誤った操作をやり直すことができます。

  • エクスポートの開始前に、次の情報を含むレポートを作成することをお薦めします。

    • 表領域およびデータ・ファイルのリスト

    • ロールバック・セグメントのリスト

    • ユーザーごとの各オブジェクト型(表、索引など)の数

    この情報で、表領域がすでに作成され、インポートが正常に完了したことを確認できます。

  • エクスポートから完全に新しいデータベースを作成する場合、SYSTEMに余分なロールバック・セグメントを作成し、初期化パラメータ・ファイル(init.ora)で使用可能にしてからインポートを開始します。

  • インポートの実行時に、正しいインスタンスを指していることを確認します。一部のUNIXシステムでは、サブシェルの入力のみで、インポート操作を行ったデータベースが変更される場合があります。

  • すべての表領域が作成されるまで、複数のデータベースを含むシステムでは全体インポートを行わないでください。全体インポートは、エクスポートされたデータベースと同じデータ・ファイル名を使用して、未定義の表領域を作成します。このため、次のような状況で問題が発生します。

    • データ・ファイルが他のいずれかのデータベースに属する場合、データ・ファイルは破損します。このことは特に、エクスポートされるデータベースが同じシステムに存在する場合に当てはまります(そのデータ・ファイルがインポート先のデータベースによって再利用されるため)。

    • データ・ファイルの名前が既存のオペレーティング・システム・ファイルの名前と同じ場合も問題が発生します。

GRANTS

デフォルト: y

オブジェクト権限をインポートするかどうかを指定します。

デフォルトでは、エクスポートされたオブジェクト権限はすべてインポートされます。ユーザー・モードでエクスポートが実行されている場合は、第1レベルのオブジェクト権限(所有者によって付与されているもの)のみがエクスポート・ファイルにインポートされます。

全データベース・モードでエクスポートが実行されている場合は、下位レベルのオブジェクト権限(WITH GRANT OPTIONで権限が付与されたユーザーによって付与されているもの)を含むすべての権限が、エクスポート・ファイルにインポートされます。GRANTS=nを指定すると、オブジェクト権限はインポートされません(GRANTS=nを指定しても、システム権限はインポートされます)。


注意:

エクスポート・ユーティリティでは、セキュリティ上の理由から、インポートに影響するデータ・ディクショナリ・ビューの権限はエクスポートされません。このような権限がエクスポートされると、インポートしたユーザーが気付かないうちに、アクセス権が変更される場合があります。

HELP

デフォルト: なし

インポート・パラメータの説明を表示します。ヘルプを起動するには、コマンドラインでimp HELP=yを入力します。

IGNORE

デフォルト: n

オブジェクト作成エラーの処理方法を指定します。デフォルトのIGNORE=nが指定されている場合は、オブジェクト作成エラーがログに記録または表示されて、インポートが続行されます。

IGNORE=yを指定すると、データベース・オブジェクトの作成時に作成エラーが発生しても、このエラーは無視され、エラーはレポートされずに継続します。

無視されるのはオブジェクト作成エラーのみです。オペレーティング・システム、データベース、SQLなどのエラーは無視されず、場合によっては処理が停止します。

IGNORE=yが指定され、1つのエクスポート・ファイルから何回もリフレッシュが行われる場合、オブジェクトが何回も作成される場合があります(ただし、各オブジェクトには一意のシステム定義名が付けられます)。特定のオブジェクト(たとえば、制約など)に対しては、CONSTRAINTS=nを指定してインポートを実行すると、この問題を回避できます。CONSTRAINTS=nを指定して全インポートを実行すると、表の制約はインポートされません。

表がすでに存在する場合、IGNORE=yを指定すると、行は既存の表にインポートされ、エラーやメッセージは出力されません。新しい記憶域パラメータを使用するため、またはクラスタにすでに表を作成済であるため、すでに存在する表にデータをインポートする場合があります。

表がすでに存在する場合、IGNORE=nを指定すると、エラーがレポートされ、表は、行が挿入されないままスキップされます。また、表に依存するオブジェクト(索引、権限、制約など)は作成されません。


注意:

既存の表へのインポート時に、表の列の索引が一意でない場合、行データが重複することがあります。

INDEXES

デフォルト: y

索引をインポートするかどうかを指定します。LOB索引、OID索引、一意制約索引など、システムによって作成される索引は、このパラメータの指定に関係なく、インポート・ユーティリティによって自動的に再作成されます。

INDEXES=nを指定すると、すべてのユーザー作成索引をインポートの終了後に作成できます。

インポート時、ターゲット表にすでに索引が存在する場合は、データ挿入時にターゲット表の索引のメンテナンスを実行します。

INDEXFILE

デフォルト: なし

索引作成文を受け取るファイルを指定します。

このパラメータを指定すると、指定したモードでの索引作成文は、データベース中に索引を作成するために使用されるのではなく、抽出されて指定のファイルに書き込まれます。データベース・オブジェクトはインポートされません。

インポート・パラメータCONSTRAINTSyを設定している場合、索引ファイルに表制約も書き込まれます。

その後、このファイルを編集して(記憶域パラメータの変更など)、索引を作成するためのSQLスクリプトとして使用できます。

ファイル内で定義されている索引をさらに簡単に識別するために、エクスポート・ファイルのCREATE TABLE文およびCREATE CLUSTER文がコメントとして含まれます。

この機能を使用するには、次の手順を実行します。

  1. INDEXFILEパラメータを使用してインポートを行い、索引作成文のファイルを作成します。

  2. ファイルを編集して、有効なパスワードをconnect文字列に追加します。

  3. INDEXES=nを指定してインポートを再実行します。

    (この手順でデータベース・オブジェクトがインポートされますが、エクスポート・ファイルに格納されている索引定義は使用されません。)

  4. 索引作成文のファイルをSQLスクリプトとして実行し、索引を作成します。

    INDEXFILEパラメータを指定できるのは、FULL=yFROMUSERTOUSERまたはTABLESパラメータを指定した場合のみです。

LOG

デフォルト: なし

情報メッセージおよびエラー・メッセージを受け取るファイル(import.logなど)を指定します。ログ・ファイルを指定すると、端末画面およびログ・ファイルの両方にインポートに関する情報が書き込まれます。

PARFILE

デフォルト: なし

インポート・パラメータのリストを格納するファイルのファイル名を指定します。パラメータ・ファイルの使用方法の詳細は、「パラメータ・ファイル」を参照してください。

RECORDLENGTH

デフォルト: オペレーティング・システムによって異なります。

ファイル・レコードの長さをバイト単位で指定します。RECORDLENGTHパラメータは、異なるデフォルト値を使用する別のオペレーティング・システムにエクスポート・ファイルを転送する場合に指定する必要があります。

このパラメータを指定しない場合、ご使用のプラットフォーム固有のBUFSIZの値がデフォルトになります。

RECORDLENGTHは、ご使用のシステムのBUFSIZの値以上の任意の値に設定できます。(最大値は64KBです。)RECORDLENGTHパラメータの変更により影響を受けるのは、データベースに書き出す前に累積されるデータのサイズのみです。オペレーティング・システム・ファイルのブロック・サイズには影響しません。

このパラメータは、インポート・ユーティリティのI/Oバッファのサイズ指定にも使用できます。

RESUMABLE

デフォルト: n

RESUMABLEパラメータを使用して、再開可能な領域割当てを有効または無効にします。このパラメータはデフォルトでは無効なため、関連するRESUMABLE_NAMEおよびRESUMABLE_TIMEOUTを使用するには、RESUMABLE=yを設定する必要があります。


参照:

  • 『Oracle Database概要』

  • 再開可能な領域割当ての詳細は、『Oracle Database管理者ガイド』を参照してください。


RESUMABLE_NAME

デフォルト: 'User USERNAME (USERID), Session SESSIONID, Instance INSTANCEID'

再開可能な文を指定します。この値はユーザー定義のテキスト文字列で、USER_RESUMABLEまたはDBA_RESUMABLEビューに挿入して、一時停止されている特定の再開可能な文を識別できます。

RESUMABLEパラメータをyに設定して、再開可能な領域割当てを有効にしないかぎり、このパラメータは無視されます。

RESUMABLE_TIMEOUT

デフォルト: 7200秒(2時間)

エラー修正に必要な時間を指定します。タイムアウト時間内にエラーを修正できない場合は、文の実行が途中で終了します。

RESUMABLEパラメータをyに設定して、再開可能な領域割当てを有効にしないかぎり、このパラメータは無視されます。

ROWS

デフォルト: y

表のデータ行をインポートするかどうかを指定します。

ROWS=nを指定すると、インポート操作の終了後、インポートされたすべての表の統計がロックされます。

SHOW

デフォルト: n

SHOW=yを指定すると、エクスポート・ダンプ・ファイルの内容が画面に表示されますが、インポートは実行されません。エクスポート・ファイルに含まれるSQL文は、インポート・ユーティリティでその文が実行される順序で表示されます。

SHOWパラメータを指定できるのは、FULL=yFROMUSERTOUSERまたはTABLESパラメータを指定した場合のみです。

SKIP_UNUSABLE_INDEXES

デフォルト: 初期化パラメータ・ファイルで指定した、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文についての説明を参照してください。

STATISTICS

デフォルト: ALWAYS

インポート時のデータベース・オプティマイザ統計の処理方法を指定します。

メニュー項目は次のとおりです。

  • ALWAYS

    データベース・オプティマイザ統計に問題があるかどうかにかかわらず、常にインポートします。

  • NONE

    データベース・オプティマイザ統計をインポートまたは再計算しません。

  • SAFE

    データベース・オプティマイザ統計に問題がない場合のみにインポートします。問題がある場合は、オプティマイザ統計を再計算します。

  • RECALCULATE

    データベース・オプティマイザ統計をインポートしません。かわりに、インポート時に再計算します。この場合、ダンプ・ファイルを作成した元のエクスポート操作で、必要なANALYZE文を生成している(STATISTICS=NONEを指定してエクスポートを実行していない)必要があります。ANALYZE文は、ダンプ・ファイルに含まれ、インポート操作で表統計の再計算に使用されます。


    参照:

    • オプティマイザおよびオプティマイザが使用する統計の詳細は、『Oracle Database概要』を参照してください。

    • 「統計情報のインポート」


STREAMS_CONFIGURATION

デフォルト: y

エクスポート・ダンプ・ファイル内に存在する一般的なStreamsメタデータをインポートするかどうかを指定します。


参照:

『Oracle Streamsレプリケーション管理者ガイド』

STREAMS_INSTANTIATION

デフォルト: n

エクスポート・ダンプ・ファイル内に存在するStreamsインスタンス化メタデータをインポートするかどうかを指定します。ストリーム環境でインスタンス化の一部としてインポートする場合は、yを指定します。


参照:

『Oracle Streamsレプリケーション管理者ガイド』

TABLES

デフォルト: なし

表モード・インポートでインポートすることを指定します。インポートの対象となる表名、パーティション名およびサブパーティション名をリストとして指定します。表レベル・インポートでは、パーティション表または非パーティション表全体をインポートできます。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)

詳細は、「パターン一致を使用して様々な表をインポートする例」を参照してください。


注意:

UNIXなど一部のオペレーティング・システムで、カッコなどの特殊文字を使用する場合は、特殊文字として扱われないように、その文字の前にエスケープ文字を使用する必要があります。UNIXでは、次の例に示すように、エスケープ文字としてバックスラッシュ(\)を使用します。
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シェルではドル記号($)やシャープ(#)(またはその他の特殊文字)には特別な意味があります。これらの文字をシェルを介してインポートするには、エスケープ文字を使用する必要があります。


TABLESPACES

デフォルト: なし

TRANSPORT_TABLESPACEyを指定した場合、データベースに転送する表領域を、このパラメータを使用して表示します。エクスポート・ファイルに複数の表領域がある場合は、そのすべての表領域をインポート操作の一部として指定する必要があります。

詳細は、「TRANSPORT_TABLESPACE」を参照してください。

TOID_NOVALIDATE

デフォルト: なし

型を参照している表のインポート時に、その名前の型がすでにデータベースに存在している場合は、その既存の型が、実際にその表で使用されているかどうか(実際は異なる型で、単に同じ名前であるだけではないか)を確認します。

この検証のために、型の一意の識別子(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)

その型にスキーマ名を指定しない場合、インポートするユーザーのスキーマがデフォルトになります。たとえば、前述の最初の例では、型typ1scott.typ1がデフォルトになり、2番目の例では、型typ3scott.typ3がデフォルトになります。

TOID_NOVALIDATEは、表の列型のみを処理します。表型には影響しません。

通常のインポートでは、削除される型が含まれていると、次のように出力されます。

[...]
. importing IMP3's objects into IMP3
. . skipping TOID validation on type IMP2.TOIDTYP0
. . importing table                  "TOIDTAB3"          
[...]

注意:

型の識別子を比較しないように指定する場合は、ユーザーの責任において、インポートされる型の属性リストを既存の型の属性リストと一致させるようにしてください。これらの属性リストが一致しない場合、インポート結果は保証されません。

TOUSER

デフォルト: なし

インポートの対象となるスキーマを所有するユーザー名のリストを指定します。インポート操作の前にユーザー名が存在している必要があります。存在していない場合は、エラーが返されます。このパラメータを使用するには、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回指定されています。


参照:

FROMUSERおよびTOUSERを使用する場合の制限の詳細は、「FROMUSER」を参照してください

TRANSPORT_TABLESPACE

デフォルト: n

yを指定した場合、エクスポート・ファイルからトランスポータブルの表領域メタデータがインポートされます。

暗号化された列は、トランスポータブル表領域モードではサポートされていません。


注意:

トランスポータブル表領域をエクスポートした後、それよりも古いリリース・レベルのデータベースにインポートすることはできません。ターゲット・データベースのリリース・レベルは、ソース・データベース以上である必要があります。

TTS_OWNERS

デフォルト: なし

TRANSPORT_TABLESPACEyを指定した場合、このパラメータを使用して、一連のトランスポータブル表領域のデータの所有者ユーザーを表示できます。

詳細は、「TRANSPORT_TABLESPACE」を参照してください。

USERID(ユーザー名/パスワード)

デフォルト: なし

インポートを実行するユーザーのユーザー名、パスワードおよびオプションの接続文字列を指定します。

ユーザーSYSとして接続する場合は、接続文字列にAS SYSDBAも指定する必要があります。オペレーティング・システムによっては、AS SYSDBAを特殊文字列とみなし、その文字列全体を引用符で囲む必要があります。


参照:

  • 『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』

  • Oracle Netに接続文字列を指定する方法の詳細は、ご使用のOracle Netプロトコルのユーザーズ・ガイドを参照してください。


VOLSIZE

デフォルト: なし

各テープ・ボリュームのダンプ・ファイルに最大バイト数を指定します。

VOLSIZEパラメータの最大値は、ご使用のプラットフォーム上に64ビットで格納できる最大値と同じです。

VOLSIZEの値は、数字にKB(キロバイト数)を付けて指定できます。たとえば、VOLSIZE=2KBは、VOLSIZE=2048と同じです。同様に、MBはメガバイト(1024×1024)を、GBはギガバイト(1024の3乗)を表します。Bはバイトの省略です。この場合、最終的なファイル・サイズの算出に乗算は不要です(VOLSIZE=2048Bは、VOLSIZE=2048と同じです)。

インポート・セッションの例

この項では、インポート・セッションの例をいくつか取り上げ、パラメータ・ファイル方式およびコマンドライン方式の使用方法を示します。ここでは、次のシナリオを示します。

特定のユーザーの表を選択してインポートする例

この例では、管理者が全データベース・エクスポート・ファイルを使用して、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.

パーティション・レベル・インポートでのインポート・セッションの例

この項では、複数のパーティションがある表、パーティションとサブパーティションがある表、および異なる列で再パーティション化した表のインポートについて説明します。

例1: パーティション・レベル・インポート

この例では、empは、P1P2および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のリリース情報が表示されます。また、状態メッセージも表示されます。

例2: コンポジット・パーティション表のパーティション・レベル・インポート

この例では、コンポジット・パーティション表のパーティションおよびサブパーティションがインポートされます。empは、2つのコンポジット・パーティションP1およびP2のパーティション表です。パーティションP1には、3つのサブパーティションP1_SP1P1_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.

例3: 別の列での表の再パーティション化

この例では、emp表に、empno列に基づく2つのパーティションがあります。emp表をdeptno列で再パーティション化します。

別の列で表を再パーティション化するには、次の手順を実行してください。

  1. エクスポートを実行して、データを保存します。

  2. データベースから表を削除します。

  3. 表を新しいパーティションに分割して再作成します。

  4. 表データをインポートします。

次に、これらの手順の例を示します。

> 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 インポート・ユーティリティの終了コード

結果 終了コード

インポートは警告なしで正常終了しました。

EX_SUCC

インポートは正常に終了しましたが、警告が発生しました。

EX_OKWARN

エラーが発生したためインポートを終了します。

EX_FAIL


UNIXの場合、終了コードは次のようになります。

EX_SUCC   0
EX_OKWARN 0
EX_FAIL   1

インポート中のエラー処理

この項では、データベース・オブジェクトのインポート時に発生する可能性のあるエラーについて説明します。

行エラー

整合性制約違反またはデータが無効なために行のインポートが拒否されると、警告メッセージが表示されますが、その表の残りの行は引き続き処理されます。「tablespace full」というエラーなど、後続のすべての行に影響するエラーもあります。このようなエラーの場合には、現行の表の処理は停止され、次の表にスキップします。

RESUMABLE=yパラメータが指定されている場合、「tablespace full」エラーによって、インポートが一時停止することもあります。

整合性制約違反

次の整合性制約に違反している行があると行エラーが発生します。

  • NOT NULL制約

  • 一意制約

  • 主キー(NOT NULLおよび一意)制約

  • 参照整合性制約

  • CHECK制約


    参照:

    • Oracle Database拡張アプリケーション開発者ガイド

    • 『Oracle Database概要』


無効なデータ

データベース内の表の列定義が、エクスポート・ファイル内の列定義と異なるときにも行エラーが発生します。無効データ・エラーは、新しい表の列より長いデータの挿入、無効なデータ型またはその他のINSERTエラーによって発生します。

データベース・オブジェクトのインポートでのエラー

データベース・オブジェクトをインポートするときにエラーが発生する理由にはいろいろありますが、この項ではその理由について説明します。これらのエラーが発生すると、現行のデータベース・オブジェクトのインポートは中断されます。その後、インポート・ユーティリティでは、エクスポート・ファイルの次のデータベース・オブジェクトが継続して処理されます。

既存オブジェクト

インポートするオブジェクトがデータベース中にすでに存在していると、オブジェクト作成エラーが発生します。これ以降の処理は、IGNOREパラメータに指定されている値によって異なります。

IGNORE=n(デフォルト)が指定されている場合、エラーが報告され、次のデータベース・オブジェクトが継続して処理されます。現行のデータベース・オブジェクトは置き換えられません。オブジェクトが表の場合、エクスポート・ファイル内の行はインポートされません。

IGNORE=yが指定されている場合、オブジェクト作成エラーは報告されません。データベース・オブジェクトは置き換えられません。オブジェクトが表の場合、行がインポートされます。無視できるエラーはオブジェクト作成エラーのみです。他のすべてのエラー(オペレーティング・システムのエラー、データベースのエラー、SQLのエラーなど)は報告されます。また、処理が停止することもあります


注意:

IGNORE=yを指定した場合、表の1つ以上の列に対してUNIQUE整合性制約を指定しないかぎり、その表に対して重複した行が挿入されます。たとえば、誤って2回インポートを実行した場合などがこれに該当します。

順序

インポート処理で、順序番号をエクスポート・ファイルの値に設定しなおす必要がある場合は、順序を削除してください。インポートでは、既存の順序の削除と再作成は行われません。そのため、順序は、インポートの前に削除されない場合、エクスポート・ファイルに保存されている値には設定されません。順序がすでに存在している場合、エクスポート・ファイルのCREATE SEQUENCE文は失敗し、その順序はインポートされません。

リソース・エラー

リソースの制限によって、オブジェクトがインポートされないことがあります。たとえば、表のインポート中に、内部的な問題またはメモリーなどのリソース不足によって、リソース・エラーが発生する場合があります。

行のインポート中にリソース・エラーが発生すると、現行の表の処理が中止され、次の表にスキップします。COMMIT=yを指定している場合、現行の表のインポート済の部分がコミットされます。指定していない場合は、現行の表の処理がロールバックされた後で、インポートが続行されます。「COMMIT」を参照してください。

ドメイン索引メタデータ

ドメイン索引は、無名PL/SQLブロックでインポートされる、アプリケーション固有のメタデータと関連付けることができます。これらのPL/SQLブロックは、インポート時にCREATE INDEX文より優先して実行されます。PL/SQLブロックにエラーが発生した場合、メタデータが索引の一部分とみなされるため、関連付けられた索引は作成されません。

表レベル・インポートおよびパーティション・レベル・インポート

表、パーティションおよびサブパーティションのインポートは、次のように実行できます。

  • 表レベル・インポート: エクスポート・ファイルのすべてのデータをインポートします。

  • パーティション・レベル・インポート: 指定されたソース・パーティションまたはサブパーティションのデータのみインポートします。

表レベル・インポートの使用に関するガイドライン

表レベル・インポートでは、指定した各表に関して表のすべての行がインポートされます。表レベル・インポートの特長は次のとおりです。

  • (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については、インポート中のローカル索引のメンテナンスを延期できます。延期するには、次の手順を実行します。

  1. インポート前に、次のSQL文を発行します。

    ALTER TABLE t MODIFY PARTITION p2 UNUSABLE LOCAL INDEXES;
    
  2. 次のインポート・コマンドを発行します。

    imp scott FILE=expdat.dmp TABLES = (t:p1, t:p2) IGNORE=y
    SKIP_UNUSABLE_INDEXES=y
    

    この例では、インポートの実行前にALTER SESSION SET SKIP_UNUSABLE_INDEXES=y文を実行します。

  3. インポート後に次の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プロトコルのユーザーズ・ガイドを参照してください。


参照:

  • 『Oracle Database Net Services管理者ガイド』

  • 『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』


キャラクタ・セットおよびグローバリゼーション・サポートに関する考慮点

この項では、ユーザー・データおよびデータ定義言語(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キャラクタ・セットでは、zZの前にあるため、part_midパーティションのすべての行が、part_lowパーティションに移行します。希望する結果を得るには、partlist表の所有者は、インポート後に表を再パーティション化する必要があります。


参照:

Oracle Databaseグローバリゼーション・サポート・ガイド

DDL

エクスポートおよびインポート操作時に、データ定義言語(DDL)に対して最大3回のキャラクタ・セット変換が必要です。

  1. エクスポート・ファイルは、環境変数NLS_LANGでユーザー・セッション用に指定されたキャラクタ・セットで書き出されます。NLS_LANGの値が、データベースのキャラクタ・セットと異なる場合は、キャラクタ・セット変換が実行されます。

  2. エクスポート・ファイルのキャラクタ・セットが、インポート先ユーザー・セッション用のキャラクタ・セットと異なる場合、ユーザー・セッションのキャラクタ・セットに変換されます。シングルバイト・キャラクタ・セットの場合のみにこの変換が実行されます。マルチバイト・キャラクタ・セットの場合は、インポート・ファイルのキャラクタ・セットがエクスポート・ファイルのキャラクタ・セットと同じである必要があります。

  3. ターゲット・データベースのキャラクタ・セットが、インポート・ユーザー・セッション用のキャラクタ・セットと異なる場合、最後のキャラクタ・セット変換が実行される場合があります。

キャラクタ・セット変換によるデータの損失を最小限にするには、エクスポート・データベース、エクスポート・ユーザー・セッション、インポート・ユーザー・セッションおよびインポート・データベースのすべてにおいて、同一のキャラクタ・セットを使用するようにしてください。

シングルバイト・キャラクタ・セット

8ビット・キャラクタ・セットのエクスポート・ファイルをインポートすると、8ビット文字の一部が消去されることがあります(同等の7ビットに変換されます)。これが発生するのは、インポートを実行するシステムに、システム固有の7ビット・キャラクタ・セットが存在するか、オペレーティング・システム環境変数NLS_LANGが7ビット・キャラクタ・セットに設定されている場合です。アクセント記号が付いている文字からアクセントが消去されるのが最もよく見られる例です。

このような状況を回避するために、オペレーティング・システム環境変数NLS_LANGにエクスポート・ファイルのキャラクタ・セットを設定できます。

マルチバイト・キャラクタ・セット

ターゲット・キャラクタ・セットに同等の文字がないエクスポート・ファイル中の文字は、変換時にデフォルトの文字に置換されます(デフォルトの文字は、ターゲット・キャラクタ・セットによって定義されます)。(デフォルトの文字は、ターゲット・キャラクタ・セットによって定義されます)。100%完全に変換されるためには、ターゲット・キャラクタ・セットはソース・キャラクタ・セットのスーパーセットであるか、ソース・キャラクタ・セットと同等である必要があります。


参照:

Oracle Databaseグローバリゼーション・サポート・ガイド


注意:

エクスポート・サーバーとインポート・サーバーとの間でキャラクタ・セットの幅が異なるとき、変換が原因でデータの拡張が発生する場合にデータの切捨てが発生することがあります。切捨てが発生する場合、インポート・ユーティリティに警告メッセージが表示されます。

インスタンス親和性の使用方法

インスタンス親和性を使用して、インポートおよびエクスポートするデータベース内のインスタンスにジョブを関連付けることができます。複数のリリースを組み合せて使用している場合は、互換性の問題に注意してください。


参照:

  • 『Oracle Database管理者ガイド』

  • 『Oracle Databaseリファレンス』

  • 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データのインポート

REF列および属性には、参照されている型のインスタンスを示すROWIDが隠されていることがあります。インポート・ユーティリティでは、ターゲット・データベースに対するROWIDは、自動的には再設定されません。ROWIDを適切な値に再設定するには、次の文を実行します。

ANALYZE TABLE [schema.]table VALIDATE REF UPDATE;

参照:

ANALYZE TABLE文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

BFILE列およびディレクトリ別名のインポート

BFILE列および属性で参照されているデータは、ソース・データベースからターゲット・データベースへはコピーされません。BFILE列で参照されているファイルの名前とディレクトリ別名が伝達されるのみです。BFILE列および属性で参照されている実際のファイルは、DBAまたはユーザーが移動してください。

BFILE列を含む表データをインポートする場合、BFILEロケータは、ディレクトリ別名およびエクスポート時のファイル名でインポートされます。インポート・ユーティリティでは、そのディレクトリ別名またはファイルが存在するかどうかの確認は行われません。ディレクトリ別名またはファイルが存在しない場合、ユーザーがBFILEデータにアクセスするとエラーが発生します。

ディレクトリ別名に関しては、エクスポート・システムで使用しているオペレーティング・システムのディレクトリ構文がインポート・システムで有効でない場合でも、インポート時にエラーは通知されません。ユーザーがインポート後に、そのファイルのデータにアクセスするとエラーが返されます。ディレクトリ別名がインポート・システムで有効かどうかは、DBAまたはユーザーが確認してください。

外部関数ライブラリのインポート

インポート・ユーティリティでは、外部関数ライブラリの参照先が正しいかどうかの確認は行われません。エクスポート・ファイル上のライブラリの指定で使用されているディレクトリやファイル名の形式がインポート・システムで無効であっても、インポート時にエラーは通知されません。この場合、インポート後にそのファンクションを呼び出そうとすると、エラーが返されます。

DBAまたはユーザーが手動でライブラリを移動し、ライブラリの指定がインポート・システムで有効になるようにしてください。

ストアド・プロシージャ、ファンクションおよびパッケージのインポート

ローカルのストアド・プロシージャ、ストアド・ファンクションまたはパッケージがインポートされるときのインポート・ユーティリティの動作は、COMPILEパラメータがyまたはnに設定されているかどうかによって異なります。

ローカルのストアド・プロシージャ、ストアド・ファンクションまたはパッケージがインポートされ、COMPILE=yが指定されている場合は、プロシージャ、ファンクション、パッケージはインポート時に再コンパイルされ、元のタイムスタンプ仕様が保持されます。コンパイルが成功すると、リモート・プロシージャによってアクセスしてもエラーは発生しません。

COMPILE=nが指定されている場合も、プロシージャ、ストアド・ファンクションまたはパッケージはインポートされます。ただし、元のタイムスタンプは失われます。次に、プロシージャ、ファンクションまたはパッケージを使用するときに、コンパイルが実行されます。


参照:

「COMPILE」

Javaオブジェクトのインポート

Javaオブジェクトを任意のスキーマにインポートしても、リゾルバはインポート・ユーティリティによって変更されません(リゾルバとは、Javaのフルネームの解決に使用されるスキーマのリストです)。(リゾルバとは、Javaのフルネームの解決に使用されるスキーマのリストです)。インポートの終了後、明示的または暗黙的に再検証しないかぎり、すべてのユーザー・クラスが無効な状態のままになります。暗黙的な再検証は、クラスが最初に参照されるときに実行されます。明示的な再検証は、SQLのALTER JAVA CLASS...RESOLVE文を使用すると実行されます。いずれの方法でもクラスは正常に解決され、有効になります。

外部表のインポート

インポート・ユーティリティでは、外部表によって参照される場所が正しいかどうかを検証しません。エクスポート・ファイルの表の指定で使用されるディレクトリ名およびファイル名の書式がインポート・システムで無効な場合、エラーはインポート時に報告されません。後でコールアウト関数を使用するときにエラーを受け取ります。

DBAまたはユーザーが手動で表を移動し、表の指定がインポート・システムで有効になるようにしてください。

AQ表のインポート

キュー表をインポートすると、基礎となっているキューや関連するディクショナリ情報もインポートされます。キューのインポートは、キュー表単位のレベルでのみ実行できます。キュー表のインポートでは、エクスポートの表処理プロシージャの前後に、キュー・ディクショナリがメンテナンスされます。


参照:

Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド

LONG列のインポート

LONG列の長さは、最大2GBです。インポートおよびエクスポート時には、LONG列は各行の残りのデータとともにメモリーに収まるサイズである必要があります。ただし、LONGデータはセクション単位でロードされるため、LONG列を格納するメモリーが連続している必要はありません。

インポート・ユーティリティを使用して、LONG列をCLOB列に変換できます。このためには、まず、新しいCLOB列を指定する表を作成します。インポートを実行すると、LONGデータはCLOB形式に変換されます。同じ方法で、LONG RAW列をBLOB列に変換できます。


注意:

既存のLONG列をLOB列に変換することをお薦めします。LOB列は、LONG列に比べ、より少ない制限事項が適用されます。また、LOB機能はすべてのリリースで拡張されていますが、LONG機能は、いくつかのリリースでは拡張されていません。

トリガーが存在する場合のLOB列のインポート

Oracle Database 10gでは、トリガーが正常に動作し、LOBのロード中に高いパフォーマンスが保たれるようにLOB処理が改善されています。インポート・ユーティリティでは、エクスポート時に空であるすべてのLOBがインポート後に自動的にNULLに変更されるように改善されています。

LOBがNULLではなく、空である必要があるアプリケーションを使用している場合は、インポート後に、各LOB列に対してSQL UPDATE文を発行できます。LOB列型がBLOBCLOBかによって、構文は次のいずれかになります。

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が使用されている場合、エクスポート・ユーティリティでは、ビューviewaviewcの正しい順序付けはできません。viewaviewcより先にエクスポートされ、procbがインポート・システムにすでに存在する場合は、viewaのインポート時にコンパイル上の警告が出されます。

ビューに関する権限は、ビューにコンパイル・エラーがあってもインポートされます。ビューの作成時に、そのビューの基礎になっているオブジェクト(たとえば、表、プロシージャ、他のビューなど)が存在していない場合、ビューにコンパイル・エラーが発生する場合があります。実表が存在しない場合、実表に対する権限を付与したユーザー自身が、その実表に対してGRANT OPTION付きの適正な権限を持っているかどうかを、サーバーでは検証できません。権限を付与したユーザーが適正な権限を持っていない場合、インポートされなかった表の作成後にその表にアクセスしようとすると、エラーが発生します。

他のスキーマの表を参照しているビューをインポートする場合は、インポートを実行するユーザーに、SELECT ANY TABLE権限が必要です。この権限がない場合、ビューは、コンパイルされていない状態でインポートされます。ロールに権限を付与するのみでは不十分です。ビューのコンパイルには、インポートするユーザーに直接権限を付与する必要があります。

パーティション表のインポート

エクスポートしたパーティション表と同じパーティション名またはサブパーティション名を使用してパーティション表を作成するために、SYS_Pnnn形式の名前もインポートされます。同じ名前のパーティション表がすでに存在している場合、これ以降の処理はIGNOREパラメータに指定されている値によって異なります。

SKIP_UNUSABLE_INDEXES=yが指定されていないかぎり、インポート時に非パーティション索引またはパーティション索引が(索引使用禁止に設定されているか、またはその他の不適合が理由で)メンテナンスできない場合は、エクスポート・データはターゲット表にインポートできません。

ファイングレイン・アクセス・コントロールに対するサポート

ファイングレイン・アクセス・コントロール・ポリシーをリストアするには、ファイングレイン・アクセス・コントロール・ポリシーが使用可能な表を含むエクスポート・ファイルからインポートするユーザーが、表のセキュリティ・ポリシーを回復するためのDBMS_RLSパッケージに対するEXECUTE権限が必要です。

ファイングレイン・アクセス・コントロール・ポリシーが使用可能な表を含むエクスポートファイルからインポートを行うための正しい権限が付与されていない場合は、警告メッセージが発行されます。

スナップショットおよびスナップショット・ログ


注意:

特定の状況、特にデータ・ウェアハウスに関連する場合、スナップショットは、マテリアライズド・ビューと呼ばれます。この項では、そのような場合でもスナップショットという用語を使用します。

スナップショット・ログ

インポート先のデータベースにマスター表がすでに存在し、そのマスター表にスナップショット・ログがある場合は、ダンプ・ファイルのスナップショット・ログがインポートされます。

ROWIDスナップショット・ログのエクスポートでは、スナップショット・ログに記録されているROWIDはインポートした後には意味を持ちません。このため、各ROWIDのスナップショットによる最初の高速リフレッシュは失敗し、完全リフレッシュが必要であることを示すエラーが発生します。

リフレッシュのエラーを回避するには、ROWIDのスナップショット・ログをインポートしてから完全リフレッシュを実行してください。完全リフレッシュを実行すると、後続の高速リフレッシュが適切に行われます。これに対し、主キー・スナップショット・ログをエクスポートした場合は、インポートした後でも主キーの値は意味を持ちます。したがって、インポートした後でも、主キーのスナップショットにより、高速リフレッシュを実行できます。


参照:

インポート固有の移行と互換性、およびスナップショットとスナップショット・ログの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

スナップショット

エクスポート・ファイルからリストアされたスナップショットは、前の状態に戻ってしまいます。インポートでは、最後のリフレッシュが実行された時刻が、スナップショット表定義の一部としてインポートされます。次のリフレッシュ時刻を計算する機能もインポートされます。

各リフレッシュによって、署名が付けられます。高速リフレッシュでは、スナップショットを最新に保つため、その署名の時刻から日付を決定するログ・エントリが使用されます。高速リフレッシュが完了した時点で署名は削除され、新しい署名が付けられます。他のスナップショットのリフレッシュに必要でないログ・エントリ(残っている最も古い署名よりも前の時刻を持つすべてのログ・エントリ)も削除されます。

スナップショットのインポート

エクスポート・ファイルからスナップショットをリストアすると、問題が発生する場合があります。

スナップショットが時刻Aにリフレッシュされ、時刻Bにエクスポートされ、時刻Cに再びリフレッシュされたとします。破損などの問題が発生したため、スナップショットを削除してインポートしなおすことによってリストアする必要があります。新規にインポートされたバージョンは、時刻Aとして記録された最終リフレッシュ時刻を保持しています。高速リフレッシュに必要となるログ・エントリが存在しなくなっている可能性があります。ログ・エントリが存在する場合は(たとえば、リフレッシュする必要のある別のスナップショットに必要なため)、このエントリが使用され、高速リフレッシュは正常に完了します。ログ・エントリが存在しない場合、高速リフレッシュは失敗し、完全リフレッシュが必要であることを示すエラーが発生します。

異なるスキーマへのスナップショットのインポート

スナップショットおよび関連項目は、DDL文で明示的に指定されたスキーマ名でエクスポートされます。異なるスキーマにインポートする場合は、FROMUSERパラメータおよびTOUSERパラメータを使用します。これは、異なるスキーマにインポートできないスナップショット・ログには適用されません。

トランスポータブル表領域

トランスポータブル表領域機能は、一連の表領域を、あるOracle Databaseから他のOracle Databaseに移動できる機能です。


注意:

トランスポータブル表領域をエクスポートした後、それよりも古いリリース・レベルのデータベースにインポートすることはできません。ターゲット・データベースのリリース・レベルは、ソース・データベース以上である必要があります。

一連の表領域を移動またはコピーするには、表領域を読取り専用にし、表領域のデータ・ファイルをターゲット・データベースに手動でコピーしてから、エクスポートおよびインポートを使用して、データ・ディクショナリに格納されているデータベース情報(メタデータ)をターゲット・データベースに移動します。データ・ファイルの転送は、オペレーティング・システムのコピー機能、バイナリ・モードFTP、CD-ROMへの出力などのような、フラット・バイナリ・ファイルのコピー機能を使用して行われます。

データ・ファイルのコピーおよびメタデータのエクスポートの後、表領域を任意に読み書き両用モードにできます。

次のパラメータで、トランスポータブル表領域のメタデータを移動できます。

  • TABLESPACES

  • TRANSPORT_TABLESPACE

インポート操作時のこれらのパラメータの使用方法の詳細は、「TABLESPACES」および「TRANSPORT_TABLESPACE」を参照してください。


参照:

  • トランスポータブル表領域の管理の詳細は、『Oracle Database管理者ガイド』を参照してください。

  • トランスポータブル表領域の詳細は、『Oracle Database概要』を参照してください。


記憶域パラメータ

デフォルトでは、表は、元の表領域にインポートされます。

その表領域が存在しない場合、またはユーザーがその表領域に十分な割当て制限を持っていない場合、次の表の場合を除いて、そのユーザーにはデフォルトの表領域が割り当てられます。

  • パーティション表

  • 特定の型の表

  • LOB型列、VARRAY型列またはOPAQUE型列を含む表

  • オーバーフロー・セグメントがあるIOTを含む表

ユーザーがデフォルトの表領域に対する十分な割当て制限を持っていない場合、そのユーザーの表はインポートされません。この制限の利用方法の詳細は、「表領域を再編成する方法」を参照してください。

OPTIMALパラメータ

ロールバック・セグメントのための記憶域パラメータOPTIMALは、エクスポートおよびインポート時には保持されません。

OID索引とLOB列の記憶域パラメータ

表は、その表の現行の記憶域パラメータを使用してエクスポートされます。オブジェクト表に関しては、OIDINDEXの作成時に、OIDINDEXの現行の記憶域パラメータおよび名前が設定されている場合は、それらを使用して作成されます。LOB型列、VARRAY型列またはOPAQUE型列が含まれている表に関しては、LOB型データ、VARRAY型データまたはOPAQUE型データは、それらの現行の記憶域パラメータを使用して作成されます。

エクスポートの前に、ユーザーが既存の表の記憶域パラメータを変更する場合もありますが、このような場合、表は変更された記憶域パラメータを使用してエクスポートされます。ただし、LOBデータの記憶域パラメータは、エクスポートの前には変更できません(たとえば、LOB列のチャンク・サイズ、LOB列がCACHEまたはNOCACHEか、など)。

LOBデータは、含んでいる表と同じ表領域に存在しない場合があることに、注意してください。このデータの表領域は、インポート時に読取り/書込みが可能である必要があります。そうでない場合、表はインポートされません。

LOBデータまたはLOB索引がインポート時に存在しない表領域にある場合、またはユーザーがその表領域に対して必要な割当て制限を持っていない場合、表はインポートされません。表領域の句は、表に関する句も含めて複数の句を同時に指定できるため、インポート時にエラーが発生しても、インポート・ユーティリティではどの表領域句が原因のエラーかを特定できません。

記憶域パラメータの上書き

インポート・ユーティリティを使用してデータをインポートする前に、別の記憶域パラメータで、事前に大きな表を作成した方がよい場合があります。その場合は、コマンドラインまたはパラメータ・ファイルにIGNORE=yを指定します。

読取り専用表領域

読取り専用表領域はエクスポート可能です。インポートでは、表領域がターゲット・データベース内に存在しない場合、読取り/書込み表領域として表領域が作成されます。読取り専用機能が必要な場合は、インポート後にその表領域を手動で読取り専用にする必要があります。

ターゲット・データベース内に表領域がすでに存在し、読取り専用である場合は、インポート前にこの表領域を読取り/書込み可能にする必要があります。

表領域を削除する方法

インポート前に、オブジェクトに別の表領域を使用するように再定義すると、表領域を削除できます。impコマンドの発行時には、IGNORE=yを指定します。

表領域を削除するには、通常、全データベース・エクスポートを実行し、(ログオフの前に)削除する表領域と同名の表領域をブロック数0(ゼロ)で作成します。IGNORE=yが指定されていると、インポート時にその表領域に関するCREATE TABLESPACE文はエラーとなります。これにより、削除対象である不要な表領域は作成されません。

その表領域のすべてのオブジェクト(ただし、パーティション表、特定の型の表、LOB列またはVARRAY列を含む表またはオーバーフロー・セグメントのあるIOTを除く)が、そのオブジェクトの所有者のデフォルトの表領域にインポートされます。インポート・ユーティリティでは、エラーの原因となった表領域を特定できません。かわりに、ユーザー自身が表の作成後、IGNORE=yを指定して表のインポートを実行する必要があります。

その表領域が存在しない場合、またはデフォルトの表領域に対するユーザーの割当て制限が十分でない場合は、オブジェクトはデフォルトの表領域にインポートされません。

表領域を再編成する方法

ユーザーの割当て制限が十分な場合、そのユーザーの表はエクスポート元と同じ表領域にインポートされます。その表領域がもう存在しないか、またはユーザーの割当て制限が十分でない場合は、そのユーザーに対するデフォルトの表領域が適用されます。ただし、パーティション表、LOB列またはVARRAY列が含まれている表、特定の型の表およびオーバーフロー・セグメントのある索引構成表には適用されません。この条件を利用して、表領域間でユーザーの表を移動できます。

たとえば、全データベース・エクスポートを実行した後、joeの表を表領域Aから表領域Bに移動する必要があるとします。この場合には、次の手順を実行します。

  1. joeUNLIMITED TABLESPACE権限を持っている場合、その権限を取り消します。表領域Aに対するjoeの割当て制限を0(ゼロ)に設定します。さらに、このような権限または割当て制限を含む可能性のあるすべてのロールを取り消します。

    ロールの取消しでは、カスケード効果はありません。したがって、joeによって他のロールを付与されたユーザーは影響を受けません。

  2. joeの表をエクスポートします。

  3. 表領域Aからjoeの表を削除します。

  4. joeに表領域Bの割当て制限を付与し、joeのデフォルトの表領域とします。

  5. joeの表をインポートします(デフォルトでは、joeの表は表領域Bにインポートされます)。

統計情報のインポート

統計情報がエクスポート時に必要で、表にアナライザ統計が利用できる場合、表の統計情報の再計算に使用されるANALYZE文が、エクスポートによってダンプ・ファイルに含まれます。ほとんどの場合、表、索引および列に対する計算済オプティマイザ統計情報も、ダンプ・ファイルにエクスポートされます。インポート・パラメータの詳細は、「STATISTICS」を参照してください。

ANALYZE文の実行には時間がかかるため、通常のインポートでは、エクスポートによって保存されるANALYZE文を計算するのではなく、表(およびその索引や列)の計算済オプティマイザ統計情報を使用してください。デフォルトでは、エクスポート・ダンプ・ファイルにある計算済統計情報が使用されます。

エクスポート・ユーティリティによって、計算済統計情報に問題ありというフラグが付けられる場合もあります。次の状況では、計算済統計情報ではなく、問題のない統計情報のみをインポートする必要がある場合があります。

  • ダンプ・ファイル、インポート・クライアント、インポート・データベース間のキャラクタ・セット変換(計算済統計情報で暗黙的に照合順番が変更されている可能性が高いため)。

  • 表のインポート時に行エラーが発生した場合。

  • パーティション・レベル・インポートが実行された場合(列統計情報が、すでに正確ではないため)。


    注意:

    ROWS=nを指定しても、計算済統計情報は使用できます。この機能により、本番データベースからの統計情報を使用して、非本番データベース上で問合せの実行計画のチューニングを行うことができます。このような場合は、STATISTICS=SAFEを指定する必要があります。

場合によっては、インポート時に、計算済統計情報ではなく、常にANALYZE文を使用する必要があります。たとえば、分散データベースから収集した統計情報は、そのデータが圧縮形式でインポートされると、適切でなくなる場合があります。このような場合は、インポート時にSTATISTICS=RECALCULATEを指定して、統計情報を再計算する必要があります。

インポート時に統計情報を確定しない場合は、STATISTICS=NONEを指定する必要があります。

エクスポート・ユーティリティおよびインポート・ユーティリティを使用したデータベース移行のパーティション化

エクスポート・ユーティリティおよびインポート・ユーティリティを使用して大規模データベースを移行する場合、移行を複数のエクスポート・ジョブおよびインポート・ジョブにパーティション化するとより効率的です。移行をパーティション化する場合は、次のメリットおよびデメリットに注意してください。

移行をパーティション化する場合のメリット

移行をパーティション化すると、次のメリットがあります。

  • 多くのサブジョブをパラレルに実行できるため、移行に必要な時間を削減できます。

  • 最初のエクスポート・ジョブが完了するとすぐにインポート・ユーティリティを起動できます。

移行をパーティション化する場合のデメリット

移行をパーティション化すると、次のデメリットがあります。

  • エクスポートおよびインポートのプロセスがより複雑になります。

  • 特定の型のオブジェクトに対する相互スキーマ参照のサポートが損なわれます。たとえば、異なるスキーマの表に対する外部キー制約を持つ表がスキーマに含まれている場合、その表を依存スキーマにインポートしたときに、必要な親レコードが存在しない場合があります。

エクスポート・ユーティリティおよびインポート・ユーティリティを使用したデータベース移行のパーティション化方法

データベースの移行をパーティション化方法で実行するには、次の手順に従います。

  1. データベースのすべての最上位メタデータに、次のコマンドを発行します。

    1. exp FILE=full FULL=y CONSTRAINTS=n TRIGGERS=n ROWS=n INDEXES=n

    2. imp FILE=full FULL=y

  2. データベースの各スキーマnに、次のコマンドを発行します。

    1. exp OWNER=scheman FILE=scheman

    2. imp FILE=scheman FROMUSER=scheman TOUSER=scheman 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ロケータには、インポート時に明示的に削除または無視できない主キーが存在するため、LOBデータのインポート時には特別な注意が必要です。

データのロードを完了するために使用できる十分な領域が、大きな連続したチャンクで存在することを確認してください。

大量のLONGデータの処理

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アップグレード・ガイド』を参照してください。