Email: service@parnassusdata.com 7 x 24 online support!
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