咨询微信: dbservice1234 7 x 24 在线支持!

Oracle 初めてのエクスポート/インポート・ユーティリティ

Oracle 初めてのエクスポート/インポート・ユーティリティ

ORACLEデータベース によくあるエラ の解決策

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com

 
[概要]
本文書は、エクスポートおよびインポート・ユーティリティを利用したことが
ない人が、簡単なエクスポート/インポートを実行できるようになることを目的と
して作成されています。

 1. エクスポート/インポートとは
 2. エクスポート/インポートの使用目的
 3. エクスポート/インポートにおける各モードについて
 4. エクスポート/インポート実行時に作成されるファイルについて
 5. エクスポート/インポートを使用する前に
 6. エクスポート/インポートをやってみよう
 7. エクスポート/インポート実行時にエラーが発生したら
 8. 8i、R9.0.1のマニュアルの記載ミスについて
 9. TABLESPACES パラメータについて


[対象リリース]
すべてのリリース


[対象プラットフォーム]
すべてのプラットフォーム


[詳細]

1. エクスポート/インポートとは

 エクスポートおよびインポート・ユーティリティは、Oracleユーティリティ製品の1つ
 として、OracleデータベースのデータをOSファイルに書き込み、このファイルを使用
 して、データを再びOracleデータベースに読み込ませることができるユーティリティ・
 ツールです。

 エクスポートおよびインポートを使用すると、Oracleデータベース同士(バージョンや
 プラットフォームが異なる場合にも)や、Oracleデータベース内の別の表領域やユーザ
 ーに、データを移動することができます。
 また、効果的に格納したり、パフォーマンスを改善するために、データを再編成するこ
 とも可能です。

 エクスポートおよびインポートは、対で使用するようになっている製品です。抽出した
 データをOSファイルとして作成するのが、エクスポートで、この作成されたファイル
 からデータを読み込んで、Oracleデータベースに格納するのがインポートとなって
 います。

2. エクスポート/インポートの使用目的

 エクスポートおよびインポートは、次のような場合に使用します。

 2-1 表データを再編する
    - ある表領域のデータを別の表領域に移動すると、競合が減ったり、空き領域の断
      片化が低減したり、バックアップの取得が効果的になる時
    - 表に行移行が多数存在する時
    - 表にデータが僅かしか入っていないのに、そのデータが多数のブロックに分散し
      て入っている時

 2-2 あるユーザーが所有するデータを別のユーザーに移動する
      オブジェクトの所有ユーザーをデータベースから削除したり、オブジェクトの所
      有者を別のユーザーに変更する時に利用できます。あるユーザーがエクスポート
    したデータを別のユーザーにインポートできます。

 2-3 データベース間でデータを移動する
      定義のみを抽出して、データを無視することによって、オブジェクト定義を開発
      環境から本番環境へ移動できます。

 2-4 別のプラットフォームまたは別のOracleリリースへ移行する
      あるマシンでエクスポートされたデータは、異なるキャラクタ・セットを使用す
      る可能性があっても、別のマシンのデータベースにインポートできます。
      また、Oracleの新しいリリースにアップグレードする時は、古いリリースから
      データをエクスポートして、新しいリリースにインポートできます。

      異なるリリース間でのエクスポート/インポートは、Document 1715793.1(KROWN:45271) を参照して
      下さい。

 2-5 論理バックアップを取得する
      データベースの全てまたは一部のオブジェクトをエクスポートして、エクスポー
      トファイルを論理バックアップとして使用できます。

3. エクスポート/インポートにおける各モードについて

 エクスポート/インポート・ユーティリティは、次の4つのモードのエクスポート/
 インポートを提供します。
  
 3-1 表モード
      全てのユーザーは、表モードを使用して自分が所有する表をエクスポート/インポ
      ートできます。権限を持つユーザー(※)は、他のユーザーが所有する表をエクス
      ート/インポートできます。表モードを使用すると、次のものをエクスポート/イ
      ンポートできます。
       - 表定義
       - 表内のデータ(必要な場合)
       - 権限を持つユーザーがエクスポート/インポートを実行する場合は、その表に
         定義された全ての索引(そうでない場合は、エクスポートを行うユーザーが所
         有する表の索引のみ)
       - 権限を持つユーザーがエクスポート/インポートを実行する場合は、その表に 
         定義された全てのトリガーがエクスポート/インポートされる(そうでない場合
         は、エクスポート/インポートを行うユーザーが所有する表のトリガーのみ)
       - その表に対する制約
       - その表に対して行われた全ての権限付与
       - インポート時に使用する分析方法の定義
      TABLESパラメータを使用して、このモードを指定します。

      例: ユーザーscottのemp表とユーザーblakeのdept表のエクスポートを行います。

       > exp system/manager FILE=expdat.dmp TABLES=(scott.emp,blake.dept) GRANTS=y INDEXES=y

      注意>
      UNIXプラットフォームでは、カッコなどの特殊文字を使用する場合には、
      その文字の前にエスケープ文字を使用する必要があります。
      例:
        TABLES=\(scott.emp,blake.dept\) 


 3-2 ユーザー・モード
      ユーザー・モードのエクスポートは、エクスポート/インポートを実行するユーザ
      ーが持っている権限によって動作が異なります。
      ・権限を持つユーザーは、全てのユーザーが所有するオブジェクトをエクスポー
        ト/インポートできます。この場合、エクスポート/インポートされるオブジェク
        トは次の通りです。
       - ユーザーが所有する全てのオブジェクト(そのユーザーが所有している索引と
         トリガーで、他のユーザーが所有する表に対するものは除く)
       - そのユーザーの表に対して他のユーザーが作成したトリガーと索引
      ・権限を持たないユーザーは、自分が所有するオブジェクトしかエクスポート/
        インポートできません。このモードは、このユーザーが所有する表に対して他の
        ユーザーが作成した索引やトリガーは含みません。
      エクスポート時にOWNERパラメータを、インポート時にFROMUSER、TOUSERパラメータ
      を使用してこのモードを指定します。

      例1: ユーザーtest1の所有するオブジェクトをエクスポートします。

       > exp test1/test1 OWNER=test1 FILE=test1.dmp LOG=test1.log

      例2: 例1 でエクスポートしたユーザーtest1のオブジェクトをユーザーtest2に
           インポートします。

       > imp test1/test1 FROMUSER=test1 TOUSER=test2 FILE=test1.dmp LOG=test1.log

 3-3 全データベース・モード
      このモードを使用すると、全てのオブジェクトがエクスポート/インポート
      されます。但し、ユーザーSYSなど、一部のスキーマが所有するオブジェク
      トを除きます。この点は、Document 1705440.1(KROWN:19270)を参照して下さい。
      このモードは特別な権限を必要とし、全てのユーザーが使用できるわけで
      はありません。
      FULLパラメータを使用してこのモードを指定します。

      例1: ユーザーsystemにて全データベース・モードでのエクスポートを行います。

       > exp system/manager FILE=expfull.dmp FULL=y LOG=expfull.log

      例2: ユーザーsystemにて全データベース・モードでインポートを行います。

       > imp system/manager FILE=expfull.dmp FULL=y LOG=imp.log

 3-4 トランスポータブル表領域・モード(Oracle8i以降で使用可能)
      このモードを使用すると、権限を持つユーザーが、一連の表領域を、あるデータ
      ベースから他のデータベースに移動できます。
      TRANSPORT_TABLESPACEパラメータを使用してこのモードを指定します。

      例1: 表領域 sales_1 および sales_2 をエクスポートします。

       > exp system/manager TRANSPORT_TABLESPACE=y TABLESPACES=
         (sales_1,sales_2) TRIGGER=y CONSTRAINT=n GRANTS=n FILE=expdat.dmp LOG=exp.log

      例2: 

       > imp system/manager TRANSPORT_TABLESPACE=y FILE=expdat.dmp 
         DATAFILES=('/export/oracle/sales01_1.dbf','/export/oracle/sales02_1.dbf')
         TABLESPACES=(sales_1,sales_2) TTS_OWNER=(scott,smith) FROMUSER=(scott,smith) 
         TOUSER=(allen,ward) LOG=imp.log

      
      注意>
      UNIXプラットフォームでは、カッコなどの特殊文字を使用する場合には、
      その文字の前にエスケープ文字を使用する必要があります。


 ※ 上記の4つのモードにおいて、権限を持つユーザーとは、エクスポートであれば
    EXP_FULL_DATABASEロールを、インポートであればIMP_FULL_DATABASEロールを持つ
    ユーザーを指します。

4. エクスポート/インポート実行時に作成されるファイルについて

 エクスポートおよびインポート実行時に作成されるファイルについて説明します。

 ・エクスポート時に作成されるファイル
    - エクスポート・ファイル
       エクスポート・ファイルは、通常、ディスクまたはテープにあるバイナリ形式の
       ファイルです。このファイルが読み込めるのは、インポート・ユーティリティを
       使用した場合のみです。
       エクスポート・ファイルは、FILEパラメータで指定し、デフォルトの拡張子は、
       .dmpです。
       また、FILESIZEパラメータを使用することで、エクスポート実行時に複数の
       ファイルへエクスポート可能です。
       FILESIZEパラメータに指定された最大値までエクスポートが実行されると、
       カレント・ファイルへの書き込みは中止され、FILEパラメータで次のファイル名
       として指定した名前のエクスポート・ファイルがオープンされます。エクスポー
       トが完了するまで、またはFILESIZEの最大値に再度到達するまでエクスポートが
       続行されます。

    - ログ・ファイル
       エクスポート実行時に、LOGパラメータを指定すると、情報メッセージおよび
       エラー・メッセージを受け取るファイルを指定することができます。
       このパラメータを指定すると、メッセージはログ・ファイルに記録されると
       ともに端末画面に表示されます。

 ・インポート時に作成されるファイル
    - ログ・ファイル
       インポート時にLOGパラメータを指定すると、情報メッセージおよびエラー・
       メッセージを受け取るファイル名を指定することができます。ログ・ファイル
       を指定すると、端末画面とログ・ファイルの両方にインポートに関する情報が
       書き込まれます。

5. エクスポート/インポートを使用する前に

 ・エクスポート・ユーティリティを使用する前に
    エクスポート・ユーティリティを使用する前に、次のことを事前に行っておく必要が
    あります。
     - catexp.sql または catalog.sql スクリプトの実行
        データベースに対して、catexp.sqlまたはcatalog.sqlを1回実行しておく
        必要があります。
        これらのスクリプトを実行することで、ロールの割り当てや必要なディクショナリ
        やビューの作成が行われます。通常はデータベースの作成時にcatalog.sqlが
        実行されていますので、改めて実行する必要はありません。

     - 十分なディスク領域の確認
        エクスポート・ファイルの書き込み先のディスク上またはテープ上に、十分な
        記憶領域があることを確認してください。十分な領域がない場合は、書き込み
        失敗というエラーでエクスポートの処理が中止されます。

     - アクセス権限の確認
        エクスポートを実行するには、データベースに対する CREATE SESSION 権限が
        必要です。別のユーザーが所有する表をエクスポートする場合は、EXP_FULL_
        DATABASEロールを使用可能にしておく必要があります。このロールは、全ての
        DBAに付与されます。
        EXP_FULL_DATABASEロールに含まれるシステム権限がない場合、別のユーザーの
        スキーマに格納されているオブジェクトをエクスポートすることはできません。

 ・インポート・ユーティリティを使用する前に
     インポート・ユーティリティを使用する前に、次のことを事前に行っておく必要が
     あります。
      - catexp.sql または catalog.sql の実行
        データベースに対して、catexp.sqlまたはcatalog.sqlを1回実行しておく
        必要があります。
        これらのスクリプトを実行することで、ロールの割り当てや必要なディクショナリ
        やビューの作成が行われます。通常はデータベースの作成時にcatalog.sqlが
        実行されていますので、改めて実行する必要はありません。

      - アクセス権限の確認
         インポートを実行するには、データベースにログインするための CREATE 
         SESSION 権限が必要です。この権限は、データベースの作成時に設定される
         CONNECT ロールに含まれます。
         他のユーザーが作成したエクスポート・ファイルをインポートすることも
         できます。ただし、EXP_FULL_DATABASEを所有する他のユーザーが作成した
         エクスポート・ファイルをインポートする場合は、IMP_FULL_DATABASE 
         ロールが必要です。

6. エクスポート/インポートをやってみよう

ここでは、Oracle 9.2.0.3を使用して、あるユーザーの表データを別のユーザーに
インポートする手順を紹介します。

[あるユーザーの表データを別のユーザーにインポートする方法]

 6-1. SYSTEMユーザーでCONNECTし、EXPORT元のユーザーとIMPORT先のユーザーおよび
      表領域を作成します。

  > sqlplus /nolog

  SQL> connect system/manager
  接続されました。

  SQL> create user tst_exp identified by tst_exp
    2  default tablespace user_data
    3  temporary tablespace temporary_data
    4  quota unlimited on user_data
    5  quota unlimited on temporary_data;

  ユーザーが作成されました。

  SQL> create tablespace tst_ts datafile 'D:\ORACLE\oradata\ora920\tst_ts.dbf'
    2  size 5M default storage (initial 20k next 20k);

  表領域が作成されました。

  SQL> create user tst_imp identified by tst_imp
    2  default tablespace tst_ts
    3  temporary tablespace temporary_data
    4  quota unlimited on tst_ts
    5  quota unlimited on temporary_data;

  ユーザーが作成されました。

 6-2. 作成したユーザーに、connect権限、exp_full_database権限、imp_full_database
      権限を与えます。

  SQL> grant connect to tst_exp;

  権限付与が成功しました。

  SQL> grant connect to tst_imp;

  権限付与が成功しました。

  SQL> grant exp_full_database to tst_exp;

  権限付与が成功しました。

  SQL> grant exp_full_database to tst_imp;

  権限付与が成功しました。

  SQL> grant imp_full_database to tst_exp;

  権限付与が成功しました。

  SQL> grant imp_full_database to tst_imp;

  権限付与が成功しました。

 6-3. tst_expユーザーで接続し、エクスポート用データを作成します。

  SQL> connect tst_exp/tst_exp
  接続されました。

  SQL> create table tst_table (id number);

  表が作成されました。

  SQL> insert into tst_table values (1);

  1行が作成されました。

  SQL> commit;

  コミットが完了しました。

 6-4. 作成した表tst_tableにデータが挿入されていることを確認します。

  SQL> select * from tst_table;

          ID
  ----------
           1

 6-5. 表tst_tableが正常に作成されていることを確認します。

  SQL> select table_name, tablespace_name from tabs;

  TABLE_NAME                     TABLESPACE_NAME
  ------------------------------ ------------------------------
  TST_TABLE                      USER_DATA

 6-6. 以下のコマンドでユーザー(tst_exp)のオブジェクトのエクスポートを行います。
      以下のコマンドを発行すると、カレントディレクトリにエクスポート・ファイル
      (exp_imp.dmp)およびログ・ファイル(exp.log)が作成されます。

  > exp tst_exp/tst_exp owner=tst_exp file=exp_imp.dmp log=exp.log

  Export: Release 9.2.0.3.0 - Production on 月 Oct 13 07:24:07 2003

  Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


  接続先: Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
  With the Partitioning, OLAP and Oracle Data Mining options
  JServer Release 9.2.0.3.0 - Production
  JA16SJISキャラクタ・セットおよびAL16UTF16 NCHARキャラクタ・セットでエクスポート
  が終了しました

  指定されたユーザーをエクスポートします...
  . プリスキーマ・プロシージャ型オブジェクトとアクションをエクスポート中
  . ユーザーTST_EXPの外部関数ライブラリ名をエクスポート中
  . PUBLICタイプのシノニムをエクスポート中
  . プライベート・タイプのシノニムをエクスポート中
  . ユーザーTST_EXPのオブジェクト型定義をエクスポート中
  TST_EXPのオブジェクトをエクスポートします...
  . データベース・リンクをエクスポート中
  . 順序番号をエクスポート中
  . クラスタ定義をエクスポート中
  . TST_EXPの表をエクスポートします... 従来型パス経由...
  . 表                      TST_TABLEをエクスポート中          1行エクスポートされ
  ました。
  . シノニムをエクスポート中
  . ビューをエクスポート中
  . ストアド・プロシージャをエクスポート中
  . 演算子をエクスポート中
  . 参照整合性制約をエクスポート中
  . トリガーをエクスポート中
  . 索引タイプをエクスポート中
  . ビットマップ、関数索引および拡張可能索引をエクスポート中
  . ポスト可能なアクションをエクスポート中
  . マテリアライズド・ビューをエクスポート中
  . スナップショット・ログをエクスポート中
  . ジョブ・キューをエクスポート中
  . リフレッシュ・グループと子をエクスポート中
  . ディメンションをエクスポート中
  . ポストスキーマ・プロシージャ型オブジェクトとアクションをエクスポート中
  . 統計をエクスポート中
  エクスポートは警告なしで正常終了しました。

 6-7. 次に以下のコマンドでユーザーtst_impにエクスポート・ファイル(exp_imp.dmp)
      からインポートを行います。以下のコマンドを発行するとカレントディレクトリ
      からエクスポート・ファイルを読み込むと共に、カレントディレクトリにログ・
      ファイル(imp.log)を生成します。

  > imp tst_imp/tst_imp fromuser=tst_exp touser=tst_imp file=exp_imp.dmp log=imp.log

  Import: Release 9.2.0.3.0 - Production on 月 Oct 13 07:24:26 2003

  Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


  接続先: Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
  With the Partitioning, OLAP and Oracle Data Mining options
  JServer Release 9.2.0.3.0 - Production

  エクスポート・ファイルはEXPORT:V09.02.00によって従来型パス経由で作成されました

  警告: オブジェクトは別のユーザー: TST_EXPによってエクスポートされました。

  JA16SJISキャラクタ・セットおよびAL16UTF16 NCHARキャラクタ・セットでインポートが
  完了しました
  . . 表                    "TST_TABLE"をインポートしています          1行インポー
  トされました。
  インポートは警告なしで正常終了しました。

 6-8. ユーザーtst_impの表領域TST_TSにデータがインポートされたことを確認します。

  SQL> connect tst_imp/tst_imp
  接続されました。

  SQL> select table_name, tablespace_name from tabs;

  TABLE_NAME                     TABLESPACE_NAME
  ------------------------------ ------------------------------
  TST_TABLE                      TST_TS

  SQL> select * from tst_table;

          ID
  ----------
           1

7. エクスポート/インポート実行時にエラーが発生したら

 エクスポートおよびインポート実行時にエラーが発生した場合には、端末画面やログ・
 ファイルに出力されているエラーから原因を特定する必要があります。
 ログ・ファイルの解析についての詳細は、Document 1723599.1(KROWN:69920)を参照してください。

8.8i、R9.0.1のマニュアルの記載ミスについて

  Oracle8i ユーティリティ・ガイド リリース8.1
  PAGE 2-10 アクセス権限
  --------------------------------------------------------------------
  他のユーザーが作成したエクスポート・ファイルをインポートすることもで
  きます。ただし、他のユーザーが作成したエクスポート・ファイルの場合は
  IMP_FULL_DATABASEロールを持っている場合のみインポートできます。
  --------------------------------------------------------------------

  Oracle9iデータベース・ユーティリティリリース1(9.0.1)
  PAGE 2-6 アクセス権限の確認
  --------------------------------------------------------------------
  他のユーザーが作成したエクスポート・ファイルをインポートすることもで
  きます。ただし、他のユーザーが作成したエクスポート・ファイルをインポ
  ートする場合は、IMP_FULL_DATABASE ロールが必要です。
  --------------------------------------------------------------------

  実際はEXP_FULL_DATABASE権限を所有するユーザーが作成したエクスポート
  ファイルをインポートするときに、IMP_FULL_DATABASE権限が必要です。
  上記のマニュアルの記載ミスはR9.2のマニュアルで修正されております。

  Oracle9i データベース・ユーティリティ リリース2(9.2)
  PAGE 2-6 アクセス権限の確認
  --------------------------------------------------------------------
  他のユーザーが作成したエクスポート・ファイルをインポートすることもで
  きます。ただし、EXP_FULL_DATABASE 権限を所有するユーザーが作成したエ
  クスポート・ファイルをインポートするには、IMP_FULL_DATABASE 権限が必
  要です。通常、DBA には両方の権限が付与されています。
  --------------------------------------------------------------------

9. トランスポータブル表領域モードでは無い場合の TABLESPACES パラメータ

  [エクスポート]
  バージョン9.x 以降では、TRANSPORT_TABLESPACE=n(デフォルト) でも TABLESPACES 
  パラメータを使用したエクスポートが可能です。

    例: exp system/manager tablespaces=users file=exp.dmp 

  この場合、指定した表領域内のすべての表がエクスポートされます。また、索引が
  付いている表に関しては、索引が別の表領域にある場合でも、索引も一緒にエクス
  ポートされます(ただし索引のみの表領域を指定してもエクスポートはされません)。

  [インポート]
  インポートの場合は、TABLESPACES パラメータはトランスポータブル表領域モード
  での使用しか出来ません(TABLESPACES パラメータ単独での使用はできません)。

  上記の例のようにエクスポートしたデータは、FULL モード もしくは USER モード
  でインポートしてください。

    例: imp system/manager full=Y file=exp.dmp
        imp system/manager fromuser=user01 touser=user01 file=exp.dmp