Oracle impコマンド チートシート:オプション早見表とサンプルコード

はい、承知いたしました。Oracle impコマンドのチートシートと詳細な説明を含む記事を作成します。


Oracle impコマンド チートシート:オプション早見表とサンプルコード

Oracleのimpコマンド(Importユーティリティ)は、Oracleデータベースからエクスポートされたダンプファイルを、別のOracleデータベースにインポートするために使用されます。このユーティリティは、データベースの移行、バックアップからの復元、開発環境へのデータ投入など、さまざまなシナリオで非常に役立ちます。この記事では、impコマンドの主要なオプションを網羅したチートシートと、具体的なサンプルコード、詳細な説明を提供します。

はじめに

impコマンドは、Oracle Database Clientに含まれており、コマンドラインから実行します。impコマンドを使用するには、ターゲットデータベースへの接続情報、インポートするダンプファイルの場所、そしてインポートの動作を制御するためのさまざまなオプションを指定する必要があります。

impコマンドの構文

基本的な構文は以下の通りです。

bash
imp username/password@database_name file=dump_file.dmp [options]

  • username/password@database_name: ターゲットデータベースへの接続情報。
    • username: データベースユーザー名
    • password: データベースパスワード
    • database_name: Oracle Net Servicesを使用して構成されたデータベース接続文字列(TNS名)
  • file=dump_file.dmp: インポートするダンプファイルのパス。
  • [options]: インポートの動作を制御するためのオプション。

チートシート:主要なimpコマンドオプション早見表

オプション 説明 デフォルト値
USERID データベースへの接続に使用するユーザー名とパスワード(例: scott/tiger@mydb 必要
FILE インポートするダンプファイルの名前 必要
FULL ダンプファイル全体をインポートするかどうか(y または n n
OWNER 特定のスキーマのオブジェクトのみをインポートする場合に指定するスキーマ名。カンマ区切りで複数指定可能。 現在のユーザー
TABLES 特定のテーブルのみをインポートする場合に指定するテーブル名。カンマ区切りで複数指定可能。 なし
INDEXES インデックスをインポートするかどうか(y または n y
ROWS テーブルのデータをインポートするかどうか(y または n y
CONSTRAINTS 制約をインポートするかどうか(y または n y
GRANTS 権限をインポートするかどうか(y または n y
IGNORE テーブルがすでに存在する場合のエラーを無視するかどうか(y または n n
COMMIT 各テーブルのインポート後にコミットするかどうか(y または n)。y を指定すると、ロールバックセグメントの使用量を減らすことができる。 n
BUFFER データバッファのサイズ(バイト単位)。大きいほどパフォーマンスが向上する可能性がある。 実装依存
SHOW インポートの実行前にSQL文を表示するかどうか(y または n n
RECORDLENGTH ダンプファイルで使用されているレコード長。通常は自動検出される。 自動検出
INCTYPE 増分インポートのタイプ(COMPLETE, SYSTEM, CUMULATIVE)。 COMPLETE
PARFILE オプションを記述したパラメータファイルを指定する場合に使用する。 なし
LOG インポート処理のログを記録するファイル名。 標準出力
FEEDBACK 処理中の行数を定期的に表示する間隔。 0 (表示しない)
FROMUSER エクスポート元のスキーマを指定する。FULL=Nの場合に有効。 なし
TOUSER インポート先のスキーマを指定する。FULL=Nの場合に有効。 なし
REMAP_SCHEMA エクスポート元のスキーマをインポート先のスキーマにマッピングする。FULL=Nの場合に有効。 なし
REMAP_TABLESPACE テーブルスペースのマッピングを行う。 なし
STREAMS_CONFIGURATION Oracle Streams構成情報をインポートするかどうか(y または n)。 y

オプションの詳細な説明とサンプルコード

以下に、上記のオプションについて、さらに詳細な説明とサンプルコードを示します。

1. USERID:

データベースに接続するためのユーザー名、パスワード、および接続文字列を指定します。

bash
imp scott/tiger@mydb file=emp.dmp

この例では、scottというユーザー名、tigerというパスワード、mydbというデータベース接続文字列を使用してデータベースに接続し、emp.dmpというダンプファイルをインポートします。

2. FILE:

インポートするダンプファイルのパスを指定します。

bash
imp scott/tiger@mydb file=/backup/emp.dmp

この例では、/backup/emp.dmpというパスにあるダンプファイルをインポートします。

3. FULL:

ダンプファイル全体をインポートするかどうかを指定します。yを指定すると、ダンプファイルに含まれるすべてのオブジェクト(テーブル、ビュー、プロシージャなど)がインポートされます。nを指定すると、OWNERまたはTABLESオプションを使用して、インポートするオブジェクトを絞り込む必要があります。

“`bash

ダンプファイル全体をインポート

imp system/manager@mydb file=full_backup.dmp full=y

ダンプファイルの一部をインポートするには、FULL=n と OWNER または TABLES を組み合わせて使用

“`

4. OWNER:

特定のスキーマのオブジェクトのみをインポートする場合に指定します。カンマ区切りで複数のスキーマを指定できます。FULL=nの場合に有効です。

bash
imp system/manager@mydb file=partial_backup.dmp full=n owner=scott,hr

この例では、scotthrというスキーマのオブジェクトのみをインポートします。

5. TABLES:

特定のテーブルのみをインポートする場合に指定します。カンマ区切りで複数のテーブルを指定できます。FULL=nの場合に有効です。

bash
imp scott/tiger@mydb file=emp_dept.dmp full=n tables=emp,dept

この例では、empdeptというテーブルのみをインポートします。

6. INDEXES, ROWS, CONSTRAINTS, GRANTS:

これらのオプションは、それぞれインデックス、データ行、制約、権限をインポートするかどうかを指定します。yまたはnを指定できます。

“`bash

インデックスをインポートしない

imp scott/tiger@mydb file=emp.dmp indexes=n

データ行をインポートしない(テーブル構造のみインポートする場合に便利)

imp scott/tiger@mydb file=emp.dmp rows=n

制約をインポートしない

imp scott/tiger@mydb file=emp.dmp constraints=n

権限をインポートしない

imp scott/tiger@mydb file=emp.dmp grants=n
“`

7. IGNORE:

テーブルがすでに存在する場合のエラーを無視するかどうかを指定します。yを指定すると、テーブルがすでに存在する場合でもインポートを続行します。nを指定すると、テーブルがすでに存在する場合はエラーが発生してインポートが停止します。

bash
imp scott/tiger@mydb file=emp.dmp ignore=y

この例では、empテーブルがすでに存在する場合でもインポートを続行します。

8. COMMIT:

各テーブルのインポート後にコミットするかどうかを指定します。yを指定すると、各テーブルのインポート後にコミットされるため、ロールバックセグメントの使用量を減らすことができます。大規模なテーブルをインポートする場合に有効です。

bash
imp scott/tiger@mydb file=emp.dmp commit=y

9. BUFFER:

データバッファのサイズをバイト単位で指定します。大きいほどパフォーマンスが向上する可能性がありますが、メモリ消費量も増加します。

bash
imp scott/tiger@mydb file=emp.dmp buffer=65536

10. SHOW:

インポートの実行前にSQL文を表示するかどうかを指定します。yを指定すると、インポートされるSQL文が画面に表示されます。デバッグや確認に役立ちます。

bash
imp scott/tiger@mydb file=emp.dmp show=y

11. RECORDLENGTH:

ダンプファイルで使用されているレコード長を指定します。通常は自動検出されるため、指定する必要はありません。

12. INCTYPE:

増分インポートのタイプを指定します。増分インポートは、前回のインポート以降に変更されたデータのみをインポートするために使用されます。

  • COMPLETE: 完全なインポート。
  • SYSTEM: システムレベルの増分インポート。
  • CUMULATIVE: 累積的な増分インポート。

“`bash

累積的な増分インポート

imp system/manager@mydb file=incr.dmp inctype=cumulative
“`

13. PARFILE:

オプションを記述したパラメータファイルを指定する場合に使用します。パラメータファイルを使用すると、コマンドラインが長くなるのを避け、オプションを整理することができます。

パラメータファイル(例:import.par)の内容:

userid=scott/tiger@mydb
file=emp.dmp
full=n
tables=emp,dept
ignore=y

コマンド:

bash
imp parfile=import.par

14. LOG:

インポート処理のログを記録するファイル名を指定します。

bash
imp scott/tiger@mydb file=emp.dmp log=import.log

この例では、インポート処理のログがimport.logというファイルに記録されます。

15. FEEDBACK:

処理中の行数を定期的に表示する間隔を指定します。

bash
imp scott/tiger@mydb file=emp.dmp feedback=1000

この例では、1000行ごとに処理中の行数が画面に表示されます。

16. FROMUSER, TOUSER:

FULL=Nの場合に、エクスポート元のスキーマとインポート先のスキーマを指定します。スキーマ名を変更する場合に便利です。

bash
imp system/manager@mydb file=scott.dmp full=n fromuser=scott touser=hr

この例では、scottスキーマのオブジェクトをhrスキーマにインポートします。

17. REMAP_SCHEMA:

エクスポート元のスキーマをインポート先のスキーマにマッピングします。FULL=Nの場合に有効です。FROMUSERTOUSERの組み合わせと同じ効果があります。

bash
imp system/manager@mydb file=scott.dmp full=n remap_schema=scott:hr

18. REMAP_TABLESPACE:

テーブルスペースのマッピングを行います。

bash
imp system/manager@mydb file=scott.dmp remap_tablespace=USERS:DATA

この例では、元のダンプファイルでテーブルスペースがUSERSだった場合、インポート時にDATAテーブルスペースに割り当てられます。

19. STREAMS_CONFIGURATION:

Oracle Streams構成情報をインポートするかどうかを指定します。

bash
imp system/manager@mydb file=streams.dmp streams_configuration=n

より複雑なシナリオとサンプルコード

シナリオ1: 既存のテーブルを削除してからインポートする

インポート前にテーブルを確実に空にする必要がある場合、またはスキーマ全体をクリーンアップしてからインポートしたい場合があります。impコマンド自体には直接的なテーブル削除機能はありませんが、スクリプトを作成して実現できます。

sql
-- delete_tables.sql
DECLARE
table_exists EXCEPTION;
PRAGMA EXCEPTION_INIT(table_exists, -00942);
CURSOR c_tables IS
SELECT table_name
FROM user_tables;
BEGIN
FOR r_tables IN c_tables LOOP
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE ' || r_tables.table_name || ' CASCADE CONSTRAINTS';
DBMS_OUTPUT.PUT_LINE('Dropped table: ' || r_tables.table_name);
EXCEPTION
WHEN table_exists THEN
DBMS_OUTPUT.PUT_LINE('Table does not exist: ' || r_tables.table_name);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error dropping table ' || r_tables.table_name || ': ' || SQLERRM);
END;
END LOOP;
END;
/

このスクリプトを実行してから、インポートを実行します。

bash
sqlplus scott/tiger@mydb @delete_tables.sql
imp scott/tiger@mydb file=emp.dmp ignore=y

シナリオ2: 特定の期間のデータのみをインポートする

ダンプファイル全体ではなく、特定の期間のデータのみをインポートしたい場合があります。これには、インポート後にデータをフィルタリングするSQLスクリプトを使用します。

“`bash
imp scott/tiger@mydb file=emp.dmp full=n tables=emp

データのフィルタリング

sqlplus scott/tiger@mydb @filter_data.sql
“`

filter_data.sqlの内容:

sql
DELETE FROM emp WHERE hiredate < TO_DATE('2023-01-01', 'YYYY-MM-DD');
COMMIT;

シナリオ3: 大規模なデータベースのインポートにおけるパフォーマンスチューニング

大規模なデータベースのインポートでは、パフォーマンスが重要な要素となります。以下の点に注意してチューニングを行うことが重要です。

  • BUFFERサイズの調整: 大きなBUFFERサイズを設定することで、I/O処理を削減し、パフォーマンスを向上させることができます。ただし、メモリ消費量が増加するため、システムのメモリリソースと相談して適切な値を設定する必要があります。
  • COMMITの頻度: COMMIT=yを設定することで、各テーブルのインポート後にコミットされるため、ロールバックセグメントの使用量を減らすことができます。大規模なテーブルをインポートする場合には特に有効です。
  • 並列処理: Oracle Data Pumpを使用すると、並列処理を活用してインポートを高速化することができます。Data Pumpはimpコマンドよりも高度な機能を提供します。
  • ディスクI/Oの最適化: ダンプファイルとデータベースを異なる物理ディスクに配置することで、I/O競合を軽減し、パフォーマンスを向上させることができます。

シナリオ4: エラー発生時の対応

インポート処理中にエラーが発生した場合、以下の点を確認してください。

  • ログファイルの確認: LOGオプションで指定したログファイルを確認し、エラーの原因を特定します。
  • 権限の確認: インポートユーザーに必要な権限が付与されているか確認します。
  • テーブルスペースの空き容量: インポート先のテーブルスペースに十分な空き容量があるか確認します。
  • パラメータの誤り: impコマンドのオプションに誤りがないか確認します。

まとめ

impコマンドは、Oracleデータベースのインポートにおいて非常に強力なツールです。この記事では、主要なオプションの詳細な説明とサンプルコードを提供しました。これらの知識を活用することで、様々なシナリオに対応し、効率的なデータベースインポートを実現することができます。impコマンドを使いこなして、Oracleデータベースの運用管理をよりスムーズに進めてください。

注意点

  • impコマンドは旧来のツールであり、Oracle Data Pump(expdpおよびimpdp)が推奨されるインポート・エクスポートツールです。Data Pumpは、より高速で柔軟性があり、多くの機能を提供します。
  • 本記事の内容は一般的な情報であり、特定の環境やバージョンによっては異なる場合があります。Oracleの公式ドキュメントを参照することを推奨します。
  • セキュリティ上の理由から、パスワードをコマンドラインに直接記述することは避けるべきです。パラメータファイルを使用するか、環境変数を利用するなど、より安全な方法を検討してください。

上記は、Oracle impコマンドのチートシートと詳細な説明を含む記事です。この内容が、あなたの要件を満たしていれば幸いです。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール