天天看點

Performing User-Managed Database-18.7、Performing Complete User-Managed Media Recovery

18.7、Performing Complete User-Managed Media Recovery

完成一緻性備份,把資料庫恢複到目前的scn是最好的結果。可以恢複整個資料庫,恢複單個表空間,或恢複資料檔案。一緻性恢複不需要resetlogs打開資料庫,非一緻性恢複需要resetlogs打開資料庫。Backup and Recovery Basics提供了關于媒體恢複的資訊。

18.7.1、Performing Closed Database Recovery

可以在一個操作中恢複所有損壞的資料檔案,也可以分開操作恢複每個損壞的資料檔案。

18.7.1.1、Preparing for Closed Database Recovery

(1)關閉資料庫,檢查出現問題的媒體裝置

(2)如果引起媒體失敗的問題是臨時的,如果資料沒有損壞(比如,磁盤或控制器掉電),不需要媒體恢複:隻需啟動資料庫,重新開始操作。如果不能修複,就進行以下步驟

18.7.1.2、Restoring Backups of the Damaged or Missing Files

(1)判斷哪些資料檔案需要恢複

(2)找到損壞的資料檔案的最近備份。僅僅還原損壞的資料檔案:不要還原沒有損壞的資料檔案或任何重做日志檔案;如果沒有任何備份,隻能建立一個資料檔案(有歸檔)

alter database create datafile ‘xxx‘ as ‘xxx‘ size xxx reuse

(3)使用作業系統指令把資料檔案還原到預設位置或新的位置。

alter database rename file ‘xxx‘ to ‘xxx‘;

18.7.1.3、Recovering the Database

(1)使用系統管理者權限連接配接資料庫,啟動資料庫到mount

(2)查詢v$datafile獲得資料檔案名和狀态

(3)需要恢複的資料檔案必須是線上的,除了offline normal的表空間或read-only表空間

select ‘alter dabase datafile ‘ || name || ‘ online;‘ from  v$datafile;

(4)執行recover database,recover tablespace xxx,recover datafile ‘xxx‘等語句

(5)沒有自動地恢複,必須接受或拒絕每個指出的日志。如果自動地恢複,資料庫自動地應用日志。

(6)媒體恢複完成,資料庫傳回:Media recovery complete。

(7)alter database open

18.7.2、Performing Datafile Recovery in an Open Database

當資料庫處于打開狀态時,出現媒體失敗,不能被寫時傳回錯誤,一般表空間的隻是損壞的資料檔案離線,不能查詢時傳回錯誤,一般表空間的隻是損壞的資料檔案不會離線。

當資料庫處于打開狀态時,該恢複過程不能用做system表空間的完全媒體恢複。如果system表空間的資料檔案損壞,資料庫自動關閉。

18.7.2.1、Preparing for Open Database Recovery

(1)資料庫處于打開,發現需要恢複,把包含損壞的資料檔案的表空間離線。

18.7.2.2、Restoring Backups of the Inaccessible Datafiles

SQL> alter database create datafile ‘/oracle/oradata/boss/testtbs04_01.dbf‘ as ‘/oracle/oradata/boss/testtbs04_01.dbf‘ size 10m reuse;

18.7.2.3、Recovering Offline Tablespaces in an Open Database

(1)執行recover database,recover tablespace xxx,recover datafile ‘xxx‘等語句

(2)沒有自動地恢複,必須接受或拒絕每個指出的日志。如果自動地恢複,資料庫自動地應用日志。

(3)媒體恢複完成,資料庫傳回:Media recovery complete。

SQL> recover automatic tablespace testtbs04; 

(4)alter database open

模拟1、建立表空間testtbs04,建立一個表,删除對應的資料檔案,做關閉資料庫的恢複

(1)

SQL> create tablespace testtbs04

  2    datafile ‘/oracle/oradata/boss/testtbs04_01.dbf‘ size 10m

  3    autoextend on next 1m maxsize unlimited

  4    logging

  5    extent management local autoallocate

  6    blocksize 8k

  7    segment space management auto

  8    flashback on;

(2)

SQL> create table test04(id number, name varchar2(30)) tablespace testtbs04;

SQL> insert into test04 values(1, ‘xxxxx‘);

SQL> insert into test04 values(2, ‘yyyyy‘);

SQL> commit;

(3)

SQL> select group#,members,sequence#,archived,status,first_change# from v$log;

    GROUP#    MEMBERS  SEQUENCE# ARC STATUS           FIRST_CHANGE#

---------- ---------- ---------- --- ---------------- -------------

         1          1          0 YES UNUSED                       0

         2          1          0 YES UNUSED                       0

         3          1          1 NO  CURRENT                 697986

SQL> alter system switch logfile;

         1          1          2 YES INACTIVE                707835

         2          1          3 YES INACTIVE                707837

         3          1          4 NO  CURRENT                 707840

(4)

$ rm -rf testtbs04_01.dbf

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup open;

SQL> col "檔案名" for a40;

SQL> col "表空間名" for a10

SQL> set linesize 150

SQL>

select

  ts.name "表空間名"

  , df.file# "檔案号"

  , df.checkpoint_change# "檢查點"

  , df.name "檔案名"

  , df.status "線上狀态"

  , rf.error "恢複原因"

  , rf.change# "系統變更号"

  , rf.time

  from v$tablespace ts,v$datafile df,v$recover_file rf

where ts.ts#=df.ts# and df.file#=rf.file#

order by df.file#;

SQL> select

  2    ts.name "表空間名"

  3    , df.file# "檔案号"

  4    , df.checkpoint_change# "檢查點"

  5    , df.name "檔案名"

  6    , df.status "線上狀态"

  7    , rf.error "恢複原因"

  8    , rf.change# "系統變更号"

  9    , rf.time

 10    from v$tablespace ts,v$datafile df,v$recover_file rf

 11  where ts.ts#=df.ts# and df.file#=rf.file#

 12  order by df.file#;

表空間名       檔案号     檢查點 檔案名                                   線上狀  恢複原因           系統變更号 TIME

---------- ---------- ---------- ---------------------------------------- ------- ------------------ ---------- ------------

TESTTBS02           8     652783 /oracle/oradata/boss/testtbs02_01.dbf    OFFLINE OFFLINE NORMAL              0

TESTTBS04          10     707840 /oracle/oradata/boss/testtbs04_01.dbf    ONLINE  FILE NOT FOUND              0

(5)

SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header where file#=10;

     FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC

---------- ---------------------------------------- ------- ------------------ ---

        10 /oracle/oradata/boss/testtbs04_01.dbf    ONLINE              707602 YES

(6)

Media recovery complete.

SQL> alter database open;

SQL> select * from test04;

        ID NAME

---------- ----------------------------------------

         1 xxxxx

         2 yyyyy

繼續閱讀