DB/Oracle/コマンド/バックアップとリカバリ

Top / DB / Oracle / コマンド / バックアップとリカバリ

目次

大事な大事なバックアップ。


ユーザ管理のバックアップ(SHUTDOWN 状態)

データベースがシャットダウンした状態でのバックアップ。といってもコピーするだけ。

方法

  1. データベースを停止させる
    shutdown immediate
    
  2. 必要なファイルをコピーする
    • データファイル($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 もコピーするのもよい
    • その他
  3. データベースを開始させる
    startup open
    

ユーザ管理の表領域のバックアップ(OPEN 状態)

データベースがオープンした状態で表領域をバックアップする方法。いわゆるオンラインバックアップ。

方法

  1. SYSDBA 権限で接続する
    conn / as sysdba
    
  2. バックアップの開始
    alter tablespace <tablespace-name> begin backup;
    
  3. OS の機能で表領域に属するデータファイルをコピーする
    • cp コマンドで *.dbf をコピーしておく
  4. バックアップの終了
    alter tablespace <tablespace-name> end backup;
    

補足

  • オンラインバックアップの場合、コピー中もデータの更新が走る。整合性確保のためには REDO ログによるリカバリが必要。でもその辺は Oracle さんがリカバリ時に勝手にやってくれる
  • begin database した時点で、データファイルへの SCN 情報の更新書き込みが止まる。これによってリカバリ時のスタート地点の SCN が確実に固定されて整合性がとりやすくなる。end backup で SCN の更新書き込みが再開する

制御ファイルのバックアップ

非クリティカルなデータファイルのリカバリ

たとえば USERS 表領域のデータファイルを誤って消してしまったとき。バックアップからデータファイルをコピーして持ってきて(リストア)、REDO ログファイルを使ってリカバリする必要がある。

オンライン状態でのリカバリが可能。停止させてからでもいいけど、可用性を考慮すると極力オンラインのままやりたい。

方法

  1. 表領域をオフラインにする
    -- temporary で怒られたら immediate にする
    alter tablespace <tablespace-name> offline { temporary | immediate };
    
  2. バックアップファイルからリストアする
    • OS のコマンドでバックアップからデータファイルを元の場所にコピーする
  3. リカバリを実行する
    recover tablespace <tablespace-name> [ auto ]
    
    • auto を指定すると勝手に全部実行。指定しないとログファイル名を一個ずつ確認してくる(Enter キィの連打が必要)

クリティカルなデータファイルのリカバリ

クリティカルなデータファイル、つまるところの SYSTEM 表領域や UNDO 表領域のデータファイルが消失したときのリカバリ。

無くなった時点で止まるので、要シャットダウン。しかたない。

方法

  1. データベースを停止させる
    shutdown abort
    
    • abort 以外では停止できない。ファイルがなくてチェックポイントが実行できないため。
  2. バックアップファイルからリストアする
    • OS のコマンドでバックアップからデータファイルを元の場所にコピーする
  3. データベースをマウントする
    startup mount
    
  4. バックアップしたファイルをオンラインにする
    alter database datafile '/path/to/datafile.dbf' online;
    
  5. リカバリを実行する
    recover datafile '/path/to/datafile.dbf' [ auto ]
    
    • auto を指定すると勝手に全部実行。指定しないとログファイル名を一個ずつ確認してくる(Enter キィの連打が必要)
  6. データベースをオープンする
    alter database open;
    

Last-modified: 2011-11-02 (水) 15:01:12 (2270d)