はい、承知いたしました。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
この例では、scott
とhr
というスキーマのオブジェクトのみをインポートします。
5. TABLES:
特定のテーブルのみをインポートする場合に指定します。カンマ区切りで複数のテーブルを指定できます。FULL=n
の場合に有効です。
bash
imp scott/tiger@mydb file=emp_dept.dmp full=n tables=emp,dept
この例では、emp
とdept
というテーブルのみをインポートします。
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
の場合に有効です。FROMUSER
とTOUSER
の組み合わせと同じ効果があります。
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
コマンドのチートシートと詳細な説明を含む記事です。この内容が、あなたの要件を満たしていれば幸いです。