Oracle DBA1 ---- 資料庫恢復

tieshuai發表於2008-03-21

                 

  Oracle  DBA ---- 資料庫恢復

資料庫備份很重要,使用rman基本上說,備份的使用有歸屬,有家了。

既然備份有,那恢復,就顯得重要了。

 

1:完全介質恢復

ORA-01110: data file 1: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF'

 

資料檔案丟失時:

 

丟失的是系統檔案,所以必須在mount的狀態下,把備份檔案複製過來,然後

Recover datafile 1

 

system 表空間資料檔案情況下:

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>@find_error;

 

     FILE# NAME                                     ERROR

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

         4 D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\US FILE NOT FOUND

           ERS01.DBF

 

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>alter database datafile 4 offline;

 

Database altered.

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>alter database open;

 

Database altered.

1: 首先,將資料檔案offline,再開啟資料庫。

Alter database datafile ‘全檔名稱 offline;

2: 然後,恢復資料檔案

Recover datafile ‘全檔名稱’;

3: 將資料檔案恢復後,再修改online即可。

Alter database datafile ‘全檔名稱  online;

 

如下:

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>alter database datafile 'D:\oracle\product\10.1.0\oradata\o

rcl\users01.dbf' online;

alter database datafile 'D:\oracle\product\10.1.0\oradata\orcl\users01.dbf' online

*

ERROR at line 1:

ORA-01113: file 4 needs media recovery

ORA-01110: data file 4: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USERS01.DBF'

 

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>recover datafile users01.dbf;

ORA-02236: invalid file name

 

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>recover datafile 'D:\oracle\product\10.1.0\oradata\orcl\use

rs01.dbf';

Media recovery complete.

SYS AS SYSDBA on 20-MAR-08 at ORCL>alter database datafile 'D:\oracle\product\10.1.0\oradata\o

rcl\users01.dbf' online;

 

Database altered.

 

控制檔案介質失敗的恢復:

控制檔案的丟失,會導致資料庫啟動失敗,控制檔案記錄了資料庫的結構資訊, 如資料檔案和重做日誌檔案的位置。

 

如果單個控制檔案介質失敗,而其他控制檔案完好,這種情況下,如果介質失敗的磁碟沒有損壞,可以將其它完好的控制檔案映象複製過來,並更名為介質失敗的控制檔名稱。

如:control02.ctl 去掉了,可以把control01.ctl,或者control03.ctl 複製,把名稱修改成control02.ctl 就可以了。

 

如果是磁碟損壞,則應該修改spfile 初始化引數檔案,使用alter system 命令

首先,檢視所處於的狀態:

SYS AS SYSDBA on 20-MAR-08 at ORCL>select instance_name,status from v$instance;

 

INSTANCE_NAME    STATUS

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

orcl             STARTED

 

started: 表示處於未裝載的nomount狀態,mounted表示處於已裝載的狀態,open 表示已開啟的狀態。

 

最好的方法是,在pfile 中配置好,然後:

Create spfile from pfile

 

重做日誌檔案的恢復

首先檢視失敗的日誌詳細資訊如:

SYS AS SYSDBA on 2008-03-20 15:38:11 at ORCL>select group#,sequence#,archived,status from v$lo

g;

 

    GROUP#  SEQUENCE# ARC STATUS

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

         1          4 YES INACTIVE

         2          5 NO  CURRENT

         3          3 YES INACTIVE

 

日誌組2是當前日誌,,沒有歸檔,而日誌1已經歸檔,可以直接清除。

 

使用如下命令,重建該日誌檔案組:

SYS AS SYSDBA on 2008-03-20 15:38:30 at ORCL>alter database clear logfile group 1;

 

Database altered.

 

SYS AS SYSDBA on 2008-03-20 15:41:25 at ORCL>select group#,sequence#,archived,status from v$lo

g;

 

    GROUP#  SEQUENCE# ARC STATUS

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

         1          0 YES UNUSED

         2          5 NO  CURRENT

         3          3 YES INACTIVE

 

如果還沒有歸檔,可以使用如下命令:

SYS AS SYSDBA on 2008-03-20 15:42:42 at ORCL>alter database clear unarchived logfile group 1;

 

Database altered.

 

如果是當前正在使用的日誌檔案組2,則在資料庫不能啟動的情況下,

採用基於scn,或者基於取消的方法恢復資料庫。

Database mounted.

ORA-00313: open failed for members of log group 2 of thread 1

ORA-00312: online log 2 thread 1:

'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) ???????????

 

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>select group#,sequence#,archived,status from v$log;

 

    GROUP#  SEQUENCE# ARC STATUS

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

         1          0 YES UNUSED

         2          5 NO  CURRENT

         3          0 YES UNUSED

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>alter database clear unarchived logfile group 2;

alter database clear unarchived logfile group 2

*

ERROR at line 1:

ORA-01624: log 2 needed for crash recovery of instance orcl (thread 1)

ORA-00312: online log 2 thread 1:

'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG'

 

可以發現,重建日誌組,使用clear 命令也不行。

Recover database until cancel;

2次使用基於取消的方法恢復資料庫。

第一次使用auto

第二次使用cancel;

盡量恢復可以利用的歸檔日誌。

我在恢復時,發生如下情況:

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>alter database open resetlogs;

alter database open resetlogs

*

ERROR at line 1:

ORA-01194: file 1 needs more recovery to be consistent

ORA-01110: data file 1: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF'

 

使用該命令後,又發生如下情況:

SYS AS SYSDBA on 20-MAR-08 at ORCL>recover datafile 'D:\oracle\product\10.1.0\oradata\orcl\sys

tem01.dbf';

ORA-00283: recovery session canceled due to errors

ORA-00264: no recovery required

 

 

於是:

SYS AS SYSDBA on 20-MAR-08 at ORCL>alter database datafile 1 offline;

Database altered.

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>recover datafile 2;

Media recovery complete.

SYS AS SYSDBA on 20-MAR-08 at ORCL>alter database  datafile 1 online;

 

SYS AS SYSDBA on 20-MAR-08 at ORCL>alter database  datafile 1 online;

 

Database altered.

 

就可以開啟資料庫了。

 

恢復臨時檔案:

儅臨時檔案出錯,不能開啟資料庫,恢復比較簡單

Offline

Open

Online

即可,同時臨時文具檔案是非重要檔案,不儲存資料,可以隨時刪除重建,不影響資料庫的資料安全。

 

資料庫的不完全恢復:

基於時間(time)的恢復

基於取消(cancel)的恢復

基於SCNchange)的恢復

基於備份控制檔案(Using backup controlfile)的恢復

 

Until time(‘yyyy-mm-dd hh24:mi:ss’)

Until until cancel

Until change  13079858

 

Impdp and imp區別:

Imp 可以在伺服器端和客戶端使用

Impdp 只可以在伺服器端使用

 

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

相關文章