Oracle expコマンド:詳細解説、必須オプション、サンプルスクリプト
Oracleデータベースのexpコマンド(エクスポート)は、データベースオブジェクトやデータを外部ファイルにエクスポートするためのユーティリティです。この外部ファイルは通常、ダンプファイルと呼ばれ、データベース全体のバックアップ、特定のスキーマやテーブルの移行、データのアーカイブなどに使用されます。本記事では、expコマンドの詳細な説明、必須オプション、そして実際の利用シーンを想定したサンプルスクリプトを提供します。
1. expコマンドの概要
expコマンドは、Oracleデータベースのデータをバイナリ形式のダンプファイルにエクスポートします。このダンプファイルは、impコマンド(インポート)を使用して、別のOracleデータベースにデータをリストアするために使用できます。expコマンドは、データの論理バックアップを作成するための重要なツールであり、データベースのメンテナンス、アップグレード、災害復旧計画において不可欠な役割を果たします。
2. expコマンドの構文
expコマンドの基本的な構文は以下の通りです。
bash
exp [username/password@connect_string] [オプション=値]
- username/password@connect_string: データベースに接続するためのユーザー名、パスワード、および接続文字列を指定します。
- オプション=値: エクスポート処理を制御するための様々なオプションを指定します。
3. expコマンドの必須オプション
expコマンドを使用する際に、いくつかのオプションは必須ではありませんが、通常は指定する必要があります。これらのオプションは、エクスポートするデータの範囲、出力ファイルの名前、およびその他の重要なパラメータを制御します。
3.1. FILEオプション
FILEオプションは、エクスポートされたデータが書き込まれるダンプファイルの名前を指定します。このオプションはほぼ必須であり、指定しない場合、expコマンドは正常に動作しません。
bash
FILE=export.dmp
この例では、エクスポートされたデータが export.dmp
という名前のファイルに書き込まれます。
3.2. OWNERオプション
OWNERオプションは、エクスポートするスキーマ(ユーザー)を指定します。このオプションを指定すると、指定されたスキーマ内のオブジェクト(テーブル、ビュー、プロシージャなど)のみがエクスポートされます。
bash
OWNER=scott
この例では、scott
スキーマ内のオブジェクトのみがエクスポートされます。複数のスキーマをエクスポートする場合は、カンマ区切りで指定できます。
bash
OWNER=scott,tiger
3.3. TABLESオプション
TABLESオプションは、エクスポートするテーブルを指定します。このオプションを指定すると、指定されたテーブルのみがエクスポートされます。
bash
TABLES=emp
この例では、emp
テーブルのみがエクスポートされます。複数のテーブルをエクスポートする場合は、カンマ区切りで指定できます。
bash
TABLES=emp,dept
3.4. FULLオプション
FULLオプションは、データベース全体をエクスポートするかどうかを指定します。このオプションを Y
に設定すると、データベース全体がエクスポートされます。
bash
FULL=Y
FULLオプションを使用する場合、通常はSYSDBA権限を持つユーザーで接続する必要があります。
4. expコマンドのその他の重要なオプション
上記以外にも、expコマンドには多くのオプションがあり、エクスポート処理を細かく制御できます。
4.1. BUFFERオプション
BUFFERオプションは、データベースからデータを読み取る際に使用するバッファのサイズを指定します。大きな値を設定すると、パフォーマンスが向上する場合があります。
bash
BUFFER=4096
4.2. CONSISTENTオプション
CONSISTENTオプションは、エクスポート処理中にデータの整合性を維持するかどうかを指定します。このオプションを Y
に設定すると、エクスポート処理中に他のユーザーがデータを変更しても、エクスポートされるデータは一貫性を保ちます。
bash
CONSISTENT=Y
4.3. COMPRESSオプション
COMPRESSオプションは、エクスポートされたデータを圧縮するかどうかを指定します。このオプションを Y
に設定すると、ダンプファイルのサイズを小さくすることができます。
bash
COMPRESS=Y
4.4. GRANTSオプション
GRANTSオプションは、オブジェクトに対する権限をエクスポートするかどうかを指定します。このオプションを Y
に設定すると、オブジェクトに対する権限情報もダンプファイルに保存されます。
bash
GRANTS=Y
4.5. INDEXESオプション
INDEXESオプションは、インデックスをエクスポートするかどうかを指定します。このオプションを Y
に設定すると、テーブルのインデックス情報もダンプファイルに保存されます。
bash
INDEXES=Y
4.6. ROWSオプション
ROWSオプションは、テーブルのデータをエクスポートするかどうかを指定します。このオプションを Y
に設定すると、テーブルのデータもダンプファイルに保存されます。N
に設定すると、テーブルの構造(定義)のみがエクスポートされます。
bash
ROWS=Y
4.7. LOGオプション
LOGオプションは、エクスポート処理のログを保存するファイルの名前を指定します。
bash
LOG=export.log
4.8. DIRECTオプション
DIRECTオプションは、ダイレクトパスエクスポートを使用するかどうかを指定します。ダイレクトパスエクスポートは、より高速なエクスポート方法であり、通常は大規模なテーブルのエクスポートに適しています。ただし、いくつかの制約があります。
bash
DIRECT=Y
4.9. QUERYオプション
QUERYオプションは、特定の条件を満たすデータのみをエクスポートするために使用できます。WHERE句を指定することで、特定の条件に基づいてデータをフィルタリングできます。
bash
TABLES=emp
QUERY="WHERE deptno = 10"
この例では、emp
テーブルから deptno
が 10 のレコードのみがエクスポートされます。
4.10. RECORDLENGTHオプション
RECORDLENGTHオプションは、エクスポートファイルのレコード長を指定します。通常はデフォルト値で問題ありませんが、特定の環境では調整が必要になる場合があります。
bash
RECORDLENGTH=65535
5. サンプルスクリプト
以下に、expコマンドの使用例をいくつか示します。
5.1. スキーマ全体のエクスポート
bash
exp scott/tiger@orcl FILE=scott.dmp OWNER=scott LOG=scott_export.log FULL=N
このスクリプトは、scott
スキーマのすべてのオブジェクトを scott.dmp
ファイルにエクスポートし、ログファイルを scott_export.log
に保存します。FULL=N
は、データベース全体ではなく、指定されたスキーマのみをエクスポートすることを意味します。
5.2. 特定のテーブルのエクスポート
bash
exp system/manager@orcl FILE=emp_dept.dmp TABLES=emp,dept LOG=emp_dept_export.log FULL=N
このスクリプトは、system
ユーザーでデータベースに接続し、emp
および dept
テーブルを emp_dept.dmp
ファイルにエクスポートし、ログファイルを emp_dept_export.log
に保存します。
5.3. データとメタデータのエクスポート
bash
exp system/manager@orcl FILE=hr_data.dmp OWNER=hr GRANTS=Y INDEXES=Y ROWS=Y CONSISTENT=Y LOG=hr_export.log FULL=N
このスクリプトは、hr
スキーマのデータ、権限、インデックスを hr_data.dmp
ファイルにエクスポートし、ログファイルを hr_export.log
に保存します。CONSISTENT=Y
は、エクスポート処理中にデータの整合性を維持することを保証します。
5.4. WHERE句を使用したテーブルのエクスポート
bash
exp scott/tiger@orcl FILE=emp_dept10.dmp TABLES=emp QUERY="WHERE deptno = 10" LOG=emp_dept10_export.log FULL=N
このスクリプトは、scott
スキーマの emp
テーブルから deptno
が 10 のレコードのみを emp_dept10.dmp
ファイルにエクスポートし、ログファイルを emp_dept10_export.log
に保存します。
5.5. ダイレクトパスエクスポート
bash
exp system/manager@orcl FILE=large_table.dmp TABLES=large_table DIRECT=Y LOG=large_table_export.log FULL=N
このスクリプトは、large_table
テーブルをダイレクトパスエクスポートを使用して large_table.dmp
ファイルにエクスポートし、ログファイルを large_table_export.log
に保存します。ダイレクトパスエクスポートは、大規模なテーブルのエクスポートに適していますが、いくつかの制約があります。たとえば、テーブルにファンクションベースのインデックスがある場合や、クラスター化されたテーブルの場合には使用できません。
6. expコマンドの注意事項
- 権限: expコマンドを実行するには、適切な権限が必要です。データベース全体をエクスポートする場合は、SYSDBA権限を持つユーザーで接続する必要があります。特定のスキーマやテーブルのみをエクスポートする場合は、そのオブジェクトに対するSELECT権限が必要です。
- 文字セット: エクスポート元とエクスポート先のデータベースの文字セットが異なる場合、データの変換が必要になる場合があります。文字セットの問題を避けるために、可能な限り同じ文字セットを使用することをお勧めします。
- バージョン互換性: expコマンドで作成されたダンプファイルは、通常、同じバージョンまたはそれ以降のバージョンのOracleデータベースでのみインポートできます。異なるバージョンのOracleデータベース間でデータを移行する場合は、バージョン互換性に注意する必要があります。
- パフォーマンス: expコマンドのパフォーマンスは、データベースのサイズ、ネットワーク速度、および指定されたオプションによって異なります。大規模なデータベースのエクスポートには時間がかかる場合があるため、適切な計画とテストが必要です。
- セキュリティ: expコマンドを実行する際には、パスワードをコマンドラインに直接記述することは避けてください。パスワードを環境変数に設定したり、プロンプトで入力したりするなど、より安全な方法を使用することをお勧めします。
7. expdpコマンドへの移行
Oracle 10g以降では、expコマンドの代わりにexpdpコマンド(Data Pump Export)を使用することが推奨されています。expdpコマンドは、より高度な機能を提供し、パフォーマンスが向上しています。
expdpコマンドの主な利点は以下の通りです。
- 並列処理: expdpコマンドは、複数のプロセスを使用してデータを並行してエクスポートできます。
- 再起動: エクスポート処理が中断された場合、expdpコマンドは中断された場所から再開できます。
- ネットワーク: expdpコマンドは、ネットワーク経由で直接データをエクスポートできます。
- フィルタリング: expdpコマンドは、より高度なフィルタリングオプションを提供します。
expdpコマンドの使用方法は、expコマンドとは異なりますが、基本的な概念は同じです。expdpコマンドの詳細については、Oracleの公式ドキュメントを参照してください。
8. まとめ
expコマンドは、Oracleデータベースのデータをエクスポートするための強力なツールです。本記事では、expコマンドの基本的な構文、必須オプション、およびその他の重要なオプションについて説明しました。また、実際の利用シーンを想定したサンプルスクリプトを提供しました。expコマンドを使用する際には、権限、文字セット、バージョン互換性、パフォーマンス、およびセキュリティに関する注意事項を考慮する必要があります。Oracle 10g以降では、expdpコマンドへの移行が推奨されています。
この記事が、Oracleデータベースのエクスポートに関する理解を深め、より効果的にexpコマンドを活用するのに役立つことを願っています。