7 x 24 在线支持!
Oracle 初めてのエクスポート/インポート・ユーティリティ
ORACLEデータベース によくあるエラ の解決策
プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:[email protected]
[概要]
本文書は、エクスポートおよびインポート・ユーティリティを利用したことが
ない人が、簡単なエクスポート/インポートを実行できるようになることを目的と
して作成されています。
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

沪公网安备 31010802001377号