一、基本情況
OS:RHEL 3
CPU:4個Intel(R) Xeon(TM) MP CPU 2.70GHz
Mem:8G
Swap:16G
Disk:120G
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0
二、備份方式
資料庫以archive模式運行,RMAN多級增量備份。策略如下:
設定控制檔案自動備份。
每三個月做一個資料庫的全備份(包括所有得資料庫和唯讀資料表空間),並備份歸檔日誌。
每一個月做一次零級備份(不包含唯讀資料表空間),並備份歸檔日誌。
每周做一次一級備份,並備份歸檔日誌。
每天做一次二級備份,並備份歸檔日誌。
三、 恢複案例
所有恢複的前提:已經做過資料庫全備份(包括歸檔日誌),控制檔案和spfile自動備份。
1. 損壞一個資料檔案
(1)故障類比
刪除資料檔案:rm /u02/oradata/dbnms/users01.dbf
關閉資料庫:shutdown immediate;
ORA-01116: error in opening database file 4
ORA-01110: data file 4: '/u02/oradata/dbnms/users01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
強行關閉:sutdown abort;
啟動資料庫:startup;
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u02/oradata/dbnms/users01.dbf'
(2)恢複步驟
rman target sys@dbnms catalog rmanuser@cata
run{
allocate channel c1 type disk;
restore datafile 4;
recover datafile 4;
sql 'alter database datafile 4 online';
sql 'alter database open';
release channel c1;
}
sqlplus sys as sysdba
select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
dbnms OPEN
恢複成功
如果:資料空間沒有備份,又要強行啟動資料庫
Sql> shutdown immediate;
Sql>startup mount;
Sql>alter database datafile '/oradata/test.dbf'' offline drop;
Sql>alter database open;
2. 損壞全部資料檔案
(1)故障類比
刪除資料檔案:rm /u02/oradata/dbnms/*.dbf
強行關閉:sutdown abort;
啟動資料庫:startup;
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u02/oradata/dbnms/system01.dbf'
(2)恢複步驟
rman target sys@dbnms catalog rmanuser@cata
run{
allocate channel c1 type disk;
restore database;
recover database;
sql 'alter database open';
release channel c1;
}
sqlplus sys as sysdba
select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
dbnms OPEN
恢複臨時檔案:
alter database tempfile '/u02/oradata/dbnms/temp01.dbf' drop;
alter tablespace temp add tempfile '/u02/oradata/dbnms/temp01.dbf' size 50M autoextend on next 5M maxsize unlimited;
恢複成功
3. 損壞非當前聯機日誌成員
(1)故障類比
刪除記錄檔:rm /u02/oradata/dbnms/redo01.log
關閉資料庫:shutdown immediate;
啟動資料庫:startup;
select * from v$logfile;--可以考慮從v$log視圖中去尋找
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ------------------------------ ---
3 ONLINE /u02/oradata/dbnms/redo03.log NO
2 STALE ONLINE /u02/oradata/dbnms/redo02.log NO
1 INVALID ONLINE /u02/oradata/dbnms/redo01.log NO
1 STALE ONLINE /u02/oradata/dbnms/redo11.log NO
1 STALE ONLINE /u02/oradata/dbnms/redo21.log NO
2 STALE ONLINE /u02/oradata/dbnms/redo12.log NO
3 ONLINE /u02/oradata/dbnms/redo13.log NO
2 STALE ONLINE /u02/oradata/dbnms/redo22.log NO
3 ONLINE /u02/oradata/dbnms/redo23.log NO
4 ONLINE /u02/oradata/dbnms/redo31.log NO
4 ONLINE /u02/oradata/dbnms/redo32.log NO
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ------------------------------ ---
4 ONLINE /u02/oradata/dbnms/redo33.log NO
(2)恢複步驟
alter database drop logfile member '/u02/oradata/dbnms/redo01.log';
alter database add logfile member '/u02/oradata/dbnms/redo01.log' to group 1;
恢複成功