DB/Oracle/コマンド/バックアップとリカバリ
目次†
大事な大事なバックアップ。
ユーザ管理のバックアップ(SHUTDOWN 状態)†
データベースがシャットダウンした状態でのバックアップ。といってもコピーするだけ。
方法†
- データベースを停止させる
shutdown immediate
- 必要なファイルをコピーする
- データファイル($ORACLE_BASE/oradata/<sid>/*.dbf)
- REDO ログファイル($ORACLE_BASE/oradata/<sid>/*.log)
- 制御ファイル($ORACLE_BASE/oradata/<sid>/*.ctl)
- 初期化パラメータファイル($ORACLE_HOME/dbs/spfile<sid>.ora)
- create pfile from spfile して init<sid>.ora もコピーするのもよい
- その他
- データベースを開始させる
startup open
ユーザ管理の表領域のバックアップ(OPEN 状態)†
データベースがオープンした状態で表領域をバックアップする方法。いわゆるオンラインバックアップ。
方法†
- SYSDBA 権限で接続する
conn / as sysdba
- バックアップの開始
alter tablespace <tablespace-name> begin backup;
- OS の機能で表領域に属するデータファイルをコピーする
- cp コマンドで *.dbf をコピーしておく
- バックアップの終了
alter tablespace <tablespace-name> end backup;
補足†
- オンラインバックアップの場合、コピー中もデータの更新が走る。整合性確保のためには REDO ログによるリカバリが必要。でもその辺は Oracle さんがリカバリ時に勝手にやってくれる
- begin database した時点で、データファイルへの SCN 情報の更新書き込みが止まる。これによってリカバリ時のスタート地点の SCN が確実に固定されて整合性がとりやすくなる。end backup で SCN の更新書き込みが再開する
制御ファイルのバックアップ†
非クリティカルなデータファイルのリカバリ†
たとえば USERS 表領域のデータファイルを誤って消してしまったとき。バックアップからデータファイルをコピーして持ってきて(リストア)、REDO ログファイルを使ってリカバリする必要がある。
オンライン状態でのリカバリが可能。停止させてからでもいいけど、可用性を考慮すると極力オンラインのままやりたい。
方法†
- 表領域をオフラインにする
-- temporary で怒られたら immediate にする alter tablespace <tablespace-name> offline { temporary | immediate }; - バックアップファイルからリストアする
- OS のコマンドでバックアップからデータファイルを元の場所にコピーする
- リカバリを実行する
recover tablespace <tablespace-name> [ auto ]
- auto を指定すると勝手に全部実行。指定しないとログファイル名を一個ずつ確認してくる(Enter キィの連打が必要)
クリティカルなデータファイルのリカバリ†
クリティカルなデータファイル、つまるところの SYSTEM 表領域や UNDO 表領域のデータファイルが消失したときのリカバリ。
無くなった時点で止まるので、要シャットダウン。しかたない。
方法†
- データベースを停止させる
shutdown abort
- abort 以外では停止できない。ファイルがなくてチェックポイントが実行できないため。
- バックアップファイルからリストアする
- OS のコマンドでバックアップからデータファイルを元の場所にコピーする
- データベースをマウントする
startup mount
- バックアップしたファイルをオンラインにする
alter database datafile '/path/to/datafile.dbf' online;
- リカバリを実行する
recover datafile '/path/to/datafile.dbf' [ auto ]
- auto を指定すると勝手に全部実行。指定しないとログファイル名を一個ずつ確認してくる(Enter キィの連打が必要)
- データベースをオープンする
alter database open;
Last-modified: 2011-11-02 (水) 15:01:12