はじめに
DBのテーブル&レコードのバックアップ方法として 「expdp」と「impdp」コマンド使用を推奨されて調査しました。
Windows → linux間で行いました。
Oracle自体のメジャーバージョンが新しい程、コマンドの引数の種類が増えています。
更新履歴
日付 | 内容 |
---|---|
2016.07.18 | 初版 |
2018.11.14 | Oracle18cを調査 |
発端
(1) 古いデータが大量に本番環境に存在しており、データを圧迫している。
けれどもレコードとしては何年間は保存しておかなければならない。
(2) 本番環境からレコードを抽出し、外部サーバーに保存。
何かあった時のためにDBにインポートし、SQLでレコードを検索できるようにする。
(3) バックアップが出来るのであれば本番環境の古いレコードは削除する。
必須環境
Windows → linux間でコマンド叩けるツール : Teraterm
OracleにSQLを発行するブラウザ : ObjectBrowser
LinuxでORACLE_HOMEが環境パスに設定されているかつファイルの書き込み権限のあるユーザー
初めての手順
下準備
(1)エクスポート条件を「.par」ファイルに記述する
(2)外部サーバーへのインポート条件を「.par」ファイルに記述する
(3)本番サーバーへのインポート条件を「.par」ファイルに記述する
(4)ObjectBrowserから「CREATE DIRECTORY」と、「GRANT READ, WRITE ON DIRECTORY」を発行する。
(5)本番環境にエクスポート条件の記述された「.par」ファイルとインポート条件の「.par」ファイルを送信しておく。
エクスポート
(1)本番環境にTeratermで接続する。
(2)「expdp ユーザー名/パスワード parfile=''」
(3)完了メッセージを確認する。
本番環境のレコード削除(TRUNCATE後のインポート)
(1)本番環境にTeratermに接続する。
(2)「impdp ユーザー名/パスワード parfile=''」
(3)完了メッセージを確認する。
(4)ObjectBrowserから「ALTER INDEX REBUILD」を発行し、インデックスの再構築を行う
(5)統計情報の更新を行う
(6)oracle再起動を行う
別サーバーへのインポート
後日追記します。
.parファイル
エクスポート用
オプション | 振る舞い |
---|---|
CONTENT | エクスポート操作でロードする内容をフィルタ処理できる |
LOGFILE | エクスポート時のログ結果を残しておく為に指定しておく |
DUMPFILE | エクスポートしたダンプファイルの名前を指定しておく |
DIRECTORY | ダンプファイルやログファイルの置き場所を指定しておく |
TABLES | 抽出するテーブルの名前を指定しておく |
本番環境のレコード削除用
オプション | 振る舞い |
---|---|
CONTENT | インポート操作でロードする内容をフィルタ処理できる |
LOGFILE | インポート時のログ結果を残しておく為に指定しておく |
DUMPFILE | インポートするダンプファイルの名前を指定しておく |
DIRECTORY | ダンプファイルやログファイルの置き場所を指定しておく |
QUERY | インポート条件を記述する |
TABLE_EXISTS_ACTION | テーブルが存在する時の動作を指定石ます |
コマンド発行時の注意
大量データの処理中はもちろん、結果が返ってくるのに時間がかかる。
引数に「STATUS=integer」を与えると、コマンドラインに処理中の状況が逐一表示される。
コマンドライン上で「Ctrl + z」等で処理を中断しても、実はoracleのjobの中で動作しているらしい。
間違ってコマンドラインを閉じてしまった時は再度「expdp」「impdp」コマンドを叩き、
その引数に実行中のjobを指定し「kill_job」を行う。
jobの名称は「JOB_NAME」として引数に設定できる。
また、データベースに色々登録されるらしい。
2018.11.14 Add
当コマンド群を「Datapump」と呼ぶらしい。
また、Oracle18cからは管理ツールからDatapumpが実行できるようになったので、
めんどくさいコマンド発行等は簡易化されています。