普通資料檔案丟失的恢復方法

snowdba發表於2014-10-07

普通資料檔案是相對重要的資料檔案system和undo來說的。並不是這些資料檔案不重要,而是這些資料檔案丟失可能不會使資料庫例項崩潰。
使用RMAN恢復普通資料檔案比較簡單,通常是先將損壞的資料檔案offline,然後執行restore資料檔案,接下來執行recover資料檔案,最後再將該資料檔案online。

我們來看看下面的試驗:

實驗一,例項關閉狀態下丟失了example01.dbf檔案的恢復方式

1,當前資料庫資料檔案地址
select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/oradata/practice/system01.dbf
/u01/oradata/practice/sysaux01.dbf
/u01/oradata/practice/undotbs01.dbf
/u01/oradata/practice/users01.dbf
/u01/oradata/practice/example01.dbf

2,完全關閉資料庫
shutdown immediate;

3,人為造成資料檔案example01.dbf的丟失。使用mv的方式比rm更加安全些,建議使用。
[oracle@single ~]$ mv /u01/oradata/practice/example01.dbf /u01/oradata/practice/example01.dbf.bak

4,嘗試啟動例項,提示無法找到5號資料檔案
startup;
ORACLE instance started.

Total System Global Area  580395008 bytes
Fixed Size                  2255392 bytes
Variable Size             406848992 bytes
Database Buffers          167772160 bytes
Redo Buffers                3518464 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/u01/oradata/practice/example01.dbf’

5,例項啟動失敗,但是當前處於mount狀態。使用rman執行下列恢復步驟

RMAN> run{
2> sql 'alter database datafile 5 offline';
3> restore datafile 5;
4> recover datafile 5;
5> sql 'alter database datafile 5 online';
6> alter database open;
7> }

6,再一次登入sqlplus驗證恢復是否成功
SYS@practice >col name for a40
SYS@practice >select name,status from v$datafile;

NAME                                     STATUS
---------------------------------------- -------
/u01/oradata/practice/system01.dbf       SYSTEM
/u01/oradata/practice/sysaux01.dbf       ONLINE
/u01/oradata/practice/undotbs01.dbf      ONLINE
/u01/oradata/practice/users01.dbf        ONLINE
/u01/oradata/practice/example01.dbf      ONLINE

實驗二,例項執行狀態下丟失了example01.dbf檔案的恢復方式

1,承接剛才的試驗,現在例項處於執行狀態,手工刪除example01.dbf
$ mv /u01/oradata/practice/example01.dbf /u01/oradata/practice/example01.dbf.bak2

2,查詢屬於example01.dbf資料檔案中的資料,會提示找不到該資料檔案
SYS@practice >select * from hr.employees;
select * from hr.employees
                 *
ERROR at line 1:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/u01/oradata/practice/example01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

3,線上使用RMAN恢復資料檔案

RMAN> run{
2> sql 'alter database datafile 5 offline';
3> restore datafile 5;
4> recover datafile 5;
5> sql 'alter database datafile 5 online';
6> }

4,檢測恢復效果
SYS@practice >select count(*) from hr.employees;

  COUNT(*)
----------
       107

5,如果剛才丟失資料檔案後觸發了檢查點alter system checkpoint就不會這麼幸運了,例項會被abort。我們接著剛才的例子再次刪除資料檔案example01.dbf

mv /u01/oradata/practice/example01.dbf /u01/oradata/practice/example01.dbf.bak2

6,手工發起檢查點事件,end of file on communication channel,直接失聯。系統遭到了一次致命的恐怖襲擊。

SYS@practice >alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 25239
Session ID: 38 Serial number: 3


SYS@practice >select open_mode from v$database;
ERROR:
ORA-03114: not connected to ORACLE


SYS@practice >!ps -ef | grep ora_
oracle   25692 25236  0 12:43 pts/3    00:00:00 /bin/bash -c ps -ef | grep ora_
oracle   25694 25692  0 12:43 pts/3    00:00:00 grep ora_

7,恢復方法很容易,和第一次執行的恢復方法基本相同。需要注意的是先啟動例項到numount狀態,將丟失的資料檔案offline後迅速將例項啟動,保證其它資料可以訪問,然後在還原、恢復丟失的資料檔案,最後將該資料檔案online。與第一次操作的區別是,縮短了資料庫open的時間。

RMAN> run{
2> startup mount;
3> sql 'alter database datafile 5 offline';
4> alter database open;
5> restore datafile 5;
6> recover datafile 5;
7> sql 'alter database datafile 5 online';
8> }

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

相關文章