Oracle Recover-IMP/EXP

エクスポート/インポートとは

異なるハードウェア構成およびソフトウェア構成のプラットフォーム上にあるOracle データベース間で、データオブジェクトの転送を行うためのオラクル標準ツール。

「エクスポート」にてDB情報(オブジェクト定義や表データなど)をダンプファイルに抽出し、
「インポート」にてダンプファイルの情報を利用してDB情報を出力する。

実行方法

各ユーティリティはOSコマンド「exp」「imp」とパラメータオプションを指定して実行する。

エクスポート実行方法には以下の3種類がある(インポートの場合はexp部分がimpに変わるだけ)。
■コマンドライン
$ exp [パラメータ]...
コマンドの後ろにパラメータを列記して実行する。

■対話方式
$ exp
プロンプトにパラメータが表示されるので、随時入力して実行する(基本的なパラメータしか指定できない)。

■パラメータファイル
$ exp parfile={ファイル名}
ファイルにパラメータを記述しておき、parfileにて指定して実行する。
基本的にこの方法を採用すべき。記録が残るし流用も簡単だから。

(どの実行方法でも)利用するためには以下のオラクル権限が必要。
CREATE SESSION
EXP_FULL_DATABASE ←別のユーザ所有の表をエキスポートしたい時。
IMP_FULL_DATABASE ←別のユーザ所有の表をインポートしたい時。

実行モード

移行対象のレベルに応じて以下の3モードが用意されている。
・データベース全体
・スキーマ単位
・テーブル単位
※詳しくは後述パラメータ一覧参照

利用方法

パラメータファイル起動時の基本的な実行方法は以下のとおり。
エクスポート:exp parfile=パラメータファイル名
インポート :imp parfile=パラメータファイル名

処理実行時のオプションはパラメータファイルに記述して処理を行う。

パラメータ一覧表

基本的なパラメータを以下に示す。

パラメータEXPIMPデフォルト値説明
FULLデータベース全体エキスポート/インポートを行う場合は「Y」。
OWNER なしスキーマ単位モードエキスポート/インポートを行う場合は「Y」。
TABLESなしテーブル単位モードエクスポート/インポートを行う場合、対象テーブル名を指定する。
<指定方法>
TABLES=AAA ←基本
TABLES=('AAA','BBB') ←複数テーブル
TABLES=('AAA%') ←正規表現もできちゃう!
TABLES=('AAA:200012') ←パーティションテーブルの一部を指定
USERIDなし処理実行ユーザを指定する。
PARFILEなしパラメータファイルモード時にパラメータ記述ファイルを指定する。。
FILEexpdat.dmp処理対象ダンプファイルを指定。複数指定も可能。
LOGなしログファイル出力先。指定すべき。
DIRECT ダイレクトパスを利用(「Y」)した方が、従来型パスより早くなる可能性が高い。
ROWS表データ移行フラグ。
表定義のみエキスポートしたいなら「N」。
INDEXES索引移行フラグ。
GRANTSオブジェクト権限移行フラグ。
CONSTRAINTS表制約移行フラグ。
TRIGGERS トリガー移行フラグ。
STATISTICSEXP:ESTIMATE 
IMP:ALWAYS
統計情報の移行方法を指定。統計情報をコピーしたくない場合は「NONE」。
COMPRESS エクステント圧縮フラグ。
Y:データを1つの初期エクステントに統合しようとする。
N:セグメントの記憶パラメータ設定に従う。
CONSISTENT データの一貫性を保障したいなら「Y」。
ただし、エクスポート実行時に更新量が多いとロールバックセグメント消費量が大きくなる。
更新の発生しない時間帯に利用するなら「Y」でOK。
COMPILE パッケージ/プロシージャなどをインポート時にコンパイルするかどうかを指定。
IGNORE オブジェクト作成エラーの処理方法。
「Y」を指定するとエラーは無視される。
表の定義情報を変更したい場合、あらかじめ作成しておいてインポートというテクニックが有効。
FROMUSER エキスポート元ユーザを指定。
TOUSER インポート先ユーザを指定。
FEEDBACK指定した行数の処理完了ごとにピリオドを表示できる。
大量データを対象に処理する時に、進捗把握のために利用すると便利。
BUFFEROS固有1回あたりの行フェッチバッファサイズ。
対象データ量が多い場合に大きくすると早くなる場合あり。
基本的にでかいほどパフォーマンス効果高いが、SGA圧迫しない程度にね。ex.10485760(=10M)
RECORDLENGTHOS固有1回あたりの行フェッチバッファサイズ。
BUFFERと同義。ダイレクトパスエクスポート時は、このパラメータでの指定が必要。
インポートに関しては常にBUFFER指定でいいみたい。インポートで使う機会なし?
COMMIT 「Y」を指定すると各行の挿入後にコミット処理。「N」の場合は表単位にコミット処理。
RBSが極端に大きくなることをふせぎ、大容量インポート時のパフォーマンスが向上する。
なんで、デフォルト「Y」とちゃうのやろ?
FILESIZEOS依存ダンプファイルの最大サイズ制限(ex.2G)がOSによってはある。
このパラメータにてサイズをしてしておくことで、FILEにて指定した複数ファイルへ分割出力できる。
VOLSIZEOS依存FILESIZEのテープ使用時バージョン。
INDEXFILE なし指定したファイルに索引作成用SQL文が生成される。
CONSTRAINTS にy を設定しておくと表制約も同時に生成。
SHOW エクスポートファイルの内容が画面に表示される。インポートは実行されない。


ポイント

パラメータ多すぎなのでポイントを整理してみる。

■まずは、実行モード選択
FULL or OWNER or TABLES

■ファイル設定は基本
PARFILE / FILE / LOG

■移行対象とするか?
ROWS / INDEXES / GRANTS / CONSTRAINTS / TRIGGERS / STATISTICS

■移行先への反映方法は?
COMPRESS / CONSISTENT / COMPILE / IGNORE

■パフォーマンスを考慮しとこう
DIRECT / BUFFER / RECORDLENGTH

■別スキーマへのインポートなら
FROMUSER / TOUSER

他のパラメータは微調整レベル(?)

テクニック&注意点

■インポート時間短縮テク
インデックス付きテーブルへデータをインポートする場合、一旦インデックスを削除してからインポート処理を実行した方がパフォーマンスは向上する。
理由:インデックスがある状態でインポートを実行すると、データ挿入単位ごとにインデックスメンテナンス処理が発生してしまうから。
具体的な手順はこんな感じ。
1.移行元環境にて、エクスポート処理を実行(INDEXES=Y)。
2.移行先環境にて、対象テーブルのインデックスを全部削除。
   ex. drop index AAA;
3.移行先環境にて、インポート処理を実行(INDEXES=Y)。
   インデックスは、データ挿入完了後に自動的に作成される。

■ヘルプ表示
exp help=y にて、コマンドパラメータなどヘルプ情報を表示できる。

■バージョン注意
上位バージョンのエクスポートにて生成したダンプファイルを、下位バージョンのインポート処理にて使用することはできない。

■他のツールも検討するべし
データ移行の方法は「エクスポート/インポート」だけではない。
SQL*LoaderやFast Unload for Oracleなどパフォーマンスに優れたツールもある。
OSとオラクルバージョンが同じ環境でのDB移行なら、オフラインバックアップコピーの方がよっぽど確実だし。
状況に応じて柔軟に対応できるようになるといいんだろな。

サンプル

いくつか記載しとこう。

例1)表モードでのエクスポート
$ exp system/***** parfile=params1.dat log=20040601.log
-- params.dat --
file=expdat.dmp
tables=(scott.emp,blake.dept)
grants=y
direct=y
---------------
scottのテーブルempとblakeのテーブルdeptをファイルexpdat.dmpにエクスポートする。
記述しなかったパラメータについては、デフォルト値が採用される。
logの指定のように、コマンドとパラメータを混ぜて記述することも可能。

例2)表モードでのインポート
$ imp system/***** parfile=params2.dat
--- params2.dat ---
file=expdat.dmp
fromuser=scott
touser=blake
tables=(*)
---------------
ファイルexpdat.dmpを利用して、scottのテーブル全て(例1引継ぎならempのみ)をblakeへインポートする。


エクスポート/インポートについて雰囲気は伝わったでしょうか?
あとは、オプションを変更するなどして、いろいろ試してみよう♪
エラーが出た場合、まずはログ確認で!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值