備份&恢復之十一:損壞當前聯機日誌

mengzhaoliang發表於2008-05-08
2008/05/08    
備份&恢復之十一:損壞當前聯機日誌
歸檔模式下當前日誌的損壞有兩種情況,
一、是資料庫是正常關閉,日誌檔案中沒有未決的事務需要例項恢復,當前日誌組的損壞就可以直接用alter database clear unarchived logfile group n來重建。
二、是日誌組中有活動的事務,資料庫需要媒體恢復,日誌組需要用來同步,有兩種補救辦法
A.        最好的辦法就是透過不完全恢復,可以保證資料庫的一致性,但是這種辦法要求在歸檔方式下,並且有可用的備份
B.        透過強制性恢復,但是可能導致資料庫不一致。
下面分別用來說明這兩種恢復方法

測試環境:
1      作業系統:Redhat Linux 5
[oracle@mzl proc]$ cat /proc/version
Linux version 2.6.18-8.el5 (brewbuilder@ls20-bc2-14.build.redhat.com) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Fri Jan 26 14:15:21 EST 2007

2     資料庫版本:Oracle10g
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production


3  設定成歸檔模式.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  268435456 bytes
Fixed Size                  1218868 bytes
Variable Size              88082124 bytes
Database Buffers          171966464 bytes
Redo Buffers                7168000 bytes
Database mounted.
SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     16
Current log sequence           18
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     16
Next log sequence to archive   18
Current log sequence           18
SQL>


4 當前的redo日誌為1
SQL> select group#,sequence#,archived,status from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 NO  CURRENT
         2          1 YES INACTIVE
         3          0 YES UNUSED



5   把日誌1移走,移動到資料夾“Old“中
[oracle@mzl orcl]$ mv redo01.log Old






6  關閉資料庫
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.



7  啟動
SQL> startup
ORACLE instance started.

Total System Global Area  268435456 bytes
Fixed Size                  1218868 bytes
Variable Size              88082124 bytes
Database Buffers          171966464 bytes
Redo Buffers                7168000 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log'

查v$log檢視
SQL> select group#,sequence#,archived,status from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 NO  CURRENT
         3          0 YES UNUSED
         2          1 YES INACTIVE


8  恢復
SQL> recover database until cancel;
Media recovery complete.


9 開啟資料庫
SQL> alter database open resetlogs;  

Database altered.





說明:
  1、這種辦法恢復的資料庫是一致的不完全恢復,會丟失當前聯機日誌中的事務資料
  2、這種方法適合於歸檔資料庫並且有可用的資料庫全備份。
  3、恢復成功之後,記得再做一次資料庫的全備份。
  4、建議聯機日誌檔案一定要實現鏡相在不同的磁碟上,避免這種情況的發生,因為任何資料的丟失對於生產來說都是不容許的。



 
參考itpub上piner的備份與恢復案例:
http://www.itpub.net/viewthread.php?tid=126320&extra=page%3D4%26amp%3Bfilter%3Ddigest
在伺服器測試成功
 

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

相關文章