非RMAN熱備份資料庫和恢復

zhangsharp20發表於2015-01-28

熱備必須在歸檔模式下進行

logmnr做日誌挖掘需要用到最小補充日誌

1、新增最小補充日誌

idle>alter database add supplemental log data;

 

Database altered.

2、  查詢一下資料檔案及其表空間

 

idle>select file_name,file_id ,tablespace_name from dba_data_files;

 

FILE_NAME                         FILE_ID TABLESPACE_NAME

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

/u01/app/oracle/oradata/prod/u          4 USERS

sers01.dbf

 

/u01/app/oracle/oradata/prod/u          3 UNDOTBS1

ndotbs01.dbf

 

/u01/app/oracle/oradata/prod/s          2 SYSAUX

ysaux01.dbf

 

/u01/app/oracle/oradata/prod/s          1 SYSTEM

ystem01.dbf

 

/u01/app/oracle/oradata/prod/e          5 EXAMPLE

xample01.dbf

2、  熱備份資料檔案

 

alter tablespace system begin backup;

! cp /u01/app/oracle/oradata/prod/system01.dbf /software/hot_backup

alter tablespace system end backup;

alter tablespace sysaux begin backup;

! cp /u01/app/oracle/oradata/prod/sysaux01.dbf /software/hot_backup

alter tablespace sysaux end backup;

alter tablespace UNDOTBS1 begin backup;

! cp /u01/app/oracle/oradata/prod/undotbs01.dbf /software/hot_backup

alter tablespace UNDOTBS1 end backup;

alter tablespace USERS begin backup;

! cp /u01/app/oracle/oradata/prod/users01.dbf /software/hot_backup

alter tablespace USERS end backup;

alter tablespace example begin backup;

! cp /u01/app/oracle/oradata/prod/example01.dbf /software/hot_backup

alter tablespace example end backup;

2、  將控制檔案備份出來

idle>alter database backup controlfile to '/software/hot_backup/control01.ctl'

  2  ;

 

Database altered.

因為是開庫的狀態,檢查點在不斷的寫,所以不能直接複製

檢視是否備份完成

[root@zhang\:/software/hot_backup]#ls

control01.ctl  example01.dbf  sysaux01.dbf   system01.dbf   undotbs01.dbf  users01.dbf

可見,5個資料檔案和一個控制檔案均已備份,至此,備份結束

2、  為安全起見,檢視是否還有表空間處於熱備份鎖定狀態

idle>select * from v$backup;

 

     FILE# STATUS                CHANGE# TIME

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

         1 NOT ACTIVE            1523197 17-APR-14

         2 NOT ACTIVE            1523224 17-APR-14

         3 NOT ACTIVE            1523248 17-APR-14

         4 NOT ACTIVE            1523268 17-APR-14

         5 ACTIVE                1523286 17-APR-14

可以發現,檔案號為5的檔案仍然處於熱備份鎖定狀態,此時無法正常關庫,非正常關庫後也無法正常開啟。

解決方法:將該檔案所在表空間結束熱備份

查詢該檔案號對應的表空間名和檔名

idle>select file_name ,tablespace_name from dba_data_files where file_id = 5;

 

FILE_NAME                      TABLESPACE_NAME

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

/u01/app/oracle/oradata/prod/e EXAMPLE

xample01.dbf

結束該檔案的熱備份鎖定狀態

 

idle>alter tablespace EXAMPLE end backup;

 

Tablespace altered.

檢視是否解除熱備份鎖定

idle>select * from v$backup;

 

     FILE# STATUS                CHANGE# TIME

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

         1 NOT ACTIVE            1523197 17-APR-14

         2 NOT ACTIVE            1523224 17-APR-14

         3 NOT ACTIVE            1523248 17-APR-14

         4 NOT ACTIVE            1523268 17-APR-14

         5 NOT ACTIVE            1523286 17-APR-14

可見均處於Not active狀態,至此熱備份完全結束。

利用上述備份進行恢復

無論例項開啟或關閉均回到mount狀態修復,此為低可用性恢復

第一種情況:庫中的所有資料檔案被誤刪

[root@zhang\:/u01/app/oracle/oradata/prod]#ls

control01.ctl  example01.dbf  redo02.log     sysaux01.dbf   temp01.dbf     users01.dbf

control02.ctl  redo01.log     redo03.log     system01.dbf   undotbs01.dbf

[root@zhang\:/u01/app/oracle/oradata/prod]#rm *.dbf

[root@zhang\:/u01/app/oracle/oradata/prod]#ls

control01.ctl  control02.ctl  redo01.log     redo02.log     redo03.log

資料檔案丟失後開庫報以下錯誤

idle>startup

ORACLE instance started.

 

Total System Global Area  855982080 bytes

Fixed Size                  2230792 bytes

Variable Size             503318008 bytes

Database Buffers          348127232 bytes

Redo Buffers                2306048 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 1 - see DBWR trace file

ORA-01110: data file 1: '/u01/app/oracle/oradata/prod/system01.dbf'

檢視是否有檔案需要恢復

idle>SELECT * FROM V$RECOVER_FILE;     FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME

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

         1 ONLINE  ONLINE  FILE NOT FOUND                                                             0

         2 ONLINE  ONLINE  FILE NOT FOUND                                                             0

         3 ONLINE  ONLINE  FILE NOT FOUND                                                             0

         4 ONLINE  ONLINE  FILE NOT FOUND                                                             0

         5 ONLINE  ONLINE  FILE NOT FOUND                                                             0

此時可以發現所有的checkpoint_change#號為0,此為資料檔案被刪所導致查詢不出檔案頭部的檢查點號所致。


開始恢復

1、  關庫並將備份檔案轉儲到原庫檔案路徑中

idle>shutdown immediate

ORA-01109: database not open

 

 

Database dismounted.

ORACLE instance shut down.

idle>!

[oracle@zhang\:/export/home/oracle]$cp /software/hot_backup/*.dbf /u01/app/oracle/oradata/prod

[oracle@zhang\:/export/home/oracle]$cd /u01/app/oracle/oradata/prod/

[oracle@zhang\:/u01/app/oracle/oradata/prod]$ls

control01.ctl  example01.dbf  redo02.log     sysaux01.dbf   undotbs01.dbf

control02.ctl  redo01.log     redo03.log     system01.dbf   users01.dbf

[oracle@zhang\:/u01/app/oracle/oradata/prod]$exit

exit

2、轉儲資料庫,重新開庫,檢視是否有檔案需要轉儲和修復

idle>startup

ORACLE instance started.

 

Total System Global Area  855982080 bytes

Fixed Size                  2230792 bytes

Variable Size             503318008 bytes

Database Buffers          348127232 bytes

Redo Buffers                2306048 bytes

Database mounted.

ORA-01113: file 1 needs media recovery

ORA-01110: data file 1: '/u01/app/oracle/oradata/prod/system01.dbf'

 

 

idle>select status from v$instance;

 

STATUS

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

MOUNTED

 

idle>select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME

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

         1 ONLINE  ONLINE                                                                       1523197 17-APR-14

         2 ONLINE  ONLINE                                                                       1523224 17-APR-14

         3 ONLINE  ONLINE                                                                       1523248 17-APR-14

         4 ONLINE  ONLINE                                                                       1523268 17-APR-14

         5 ONLINE  ONLINE                                                                       1523286 17-APR-14

此時可以發現所有的資料檔案的checkpoint_change#均不一致,此原因為開啟熱備份的時間不一致所導致的備份的一瞬間鎖定的檢查點號不一致所致。

3、恢復資料庫

idle>recover database;

Media recovery complete.

4、查詢恢復後的檔案頭部檢查點號,並開庫

idle>select name ,checkpoint_change# from v$datafile_header;

 

NAME                                               CHECKPOINT_CHANGE#

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

/u01/app/oracle/oradata/prod/system01.dbf                     1556027

/u01/app/oracle/oradata/prod/sysaux01.dbf                     1556027

/u01/app/oracle/oradata/prod/undotbs01.dbf                    1556027

/u01/app/oracle/oradata/prod/users01.dbf                      1556027

/u01/app/oracle/oradata/prod/example01.dbf                    1556027

idle>alter database open;

 

Database altered.


高可用性恢復,system、預設Undo表空間無法用高可用性進行恢復

模擬災難

在庫關閉狀態下刪除一個資料檔案

 

[root@zhang\:/u01/app/oracle/oradata/prod]#ls

control01.ctl  example01.dbf  redo02.log     sysaux01.dbf   temp01.dbf     users01.dbf

control02.ctl  redo01.log     redo03.log     system01.dbf   undotbs01.dbf

[root@zhang\:/u01/app/oracle/oradata/prod]#rm example01.dbf

[root@zhang\:/u01/app/oracle/oradata/prod]#ls

control01.ctl  redo01.log     redo03.log     system01.dbf   undotbs01.dbf

control02.ctl  redo02.log     sysaux01.dbf   temp01.dbf     users01.dbf

啟動資料庫會發現報如下錯誤

idle>startup  

ORACLE instance started.

 

Total System Global Area  855982080 bytes

Fixed Size                  2230792 bytes

Variable Size             503318008 bytes

Database Buffers          348127232 bytes

Redo Buffers                2306048 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 5 - see DBWR trace file

ORA-01110: data file 5: '/u01/app/oracle/oradata/prod/example01.dbf'

檢視是否有資料檔案需要修復

 

idle>select * from v$recover_file;

 

     FILE# ONLINE  ONLINE_ ERROR         CHANGE# TIME

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

         5 ONLINE  ONLINE  FILE NOT            0

                           FOUND

可以發現資料檔案號為5的資料檔案需要被修復

1、  將備份轉儲到庫檔案原所在路徑下

idle>!      

[oracle@zhang\:/export/home/oracle]$cp /software/hot_backup/example01.dbf /u01/app/oracle/oradata/prod/

[oracle@zhang\:/export/home/oracle]$exit

Exit

2、  將上述損壞的檔案離線以開啟資料庫,使為損壞的資料檔案能夠繼續使用

idle>alter database datafile 5 offline;

 

Database altered.

 

idle>select * from v$recover_file;

 

     FILE# ONLINE  ONLINE_ ERROR         CHANGE# TIME

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

         5 OFFLINE OFFLINE               1523286 17-APR-14

idle>alter database open;

 

Database altered.

3、  修復資料庫檔案5

idle>recover datafile 5;

Media recovery complete.

4、  將資料庫檔案5開機

idle>alter database datafile 5 online;

 

Database altered.




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29802484/viewspace-1417815/,如需轉載,請註明出處,否則將追究法律責任。

相關文章