OS備份歸檔模式下損壞(丟失)多個數據文件,進行整個數據庫的恢復
1、連接數據庫,創建測試表並插入記錄
Connected.
SQL> create table test(a int) tablespace users;
Table created
SQL> insert into test values(1);
1 row inserted
SQL> commit;
Commit complete
2、備份數據庫,備份除臨時數據文件後的所數據文件
SQL> @D:\test\hotbak.sql
3、繼續在測試表中插入記錄
SQL> insert into test values(2);
1 row inserted
SQL> commit;
Commit complete
SQL> select * from test;
A
-----------------------------
1
2
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
4、關閉數據庫,模擬丟失數據文件
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down
C:>del D:\ORACLE\ORADATA\DODO\SYSTEM01.DBF
C:>del D:\ORACLE\ORADATA\DODO\TOOLS01.DBF
C:>del D:\ORACLE\ORADATA\DODO\INDX01.DBF
5、啓動數據庫,檢查錯誤
SQL> startup
ORACLE instance started.
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: 'D:\ORACLE\ORADATA\DODO\SYSTEM01.DBF'
詳細信息可以查看報警文件
Errors in file d:\oracle\admin\dodo\bdump\dodo_dbw0_2256.trc:
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: 'D:\ORACLE\ORADATA\DODO\SYSTEM01.DBF'
ORA-27041: unable to open file
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。
Errors in file d:\oracle\admin\dodo\bdump\dodo_dbw0_2256.trc:
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: 'D:\ORACLE\ORADATA\DODO\INDX01.DBF'
ORA-27041: unable to open file
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。
Errors in file d:\oracle\admin\dodo\bdump\dodo_dbw0_2256.trc:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: 'D:\ORACLE\ORADATA\DODO\TOOLS01.DBF'
ORA-27041: unable to open file
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。
Errors in file d:\oracle\admin\dodo\bdump\dodo_dbw0_2256.trc:
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: 'D:\ORACLE\ORADATA\DODO\USERS01.DBF'
ORA-27041: unable to open file
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。
通過查詢v$recover_file可以看到
SQL> select * from v$recover_file;
---------- ------- ------- -------------------- ---------- ----------
1 ONLINE ONLINE FILE NOT FOUND 0
4 ONLINE ONLINE FILE NOT FOUND 0
5 ONLINE ONLINE FILE NOT FOUND 0
6 ONLINE ONLINE FILE NOT FOUND 0
有四個數據文件需要恢復
6、拷貝備份回到原地點(restore),開始恢復數據庫(recover)
restore過程:
C:>copy D:\DATABASE\BACK\SYSTEM01.DBF D:\ORACLE\ORADATA\DODO
C:>copy D:\DATABASE\BACK\INDX01.DBF D:\ORACLE\ORADATA\DODO
C:>copy D:\DATABASE\BACK\TOOLS01.DBF D:\ORACLE\ORADATA\DODO
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.
SQL> select * from test;
A
---------------------------------
1
2
說明:
1、只要有備份與歸檔存在,就可以實現數據庫的完全恢復(不丟失數據)
2、適合於丟失大量數據文件,或包含系統數據文件在內的數據庫的恢復
3、恢復過程在mount下進行,如果恢復成功,再打開數據庫,down機時間可能比較長一些。
2.RMAN備份方案
RMAN備份歸檔模式下損壞(丟失)多個數據文件,進行整個數據庫的恢復
1、連接數據庫,創建測試表並插入記錄
Connected.
SQL> create table test(a int) tablespace users;
Table created
SQL> insert into test values(1);
1 row inserted
SQL> commit;
Commit complete
2、備份數據庫
C:> rman cmdfile=bakup.rcv msglog=backup.log;
backup.log中記錄的備份信息如下:
Recovery Manager: Release 9.2.0.1.0 - Production
2> # desc:backup all database datafile in archive with rman
3> # connect database
4> # set oracle_sid=dodo;
5> connect target sys/sys;
6> # start backup database
7> run{
8> allocate channel c1 type disk;
9> backup full tag 'dbfull' format 'D:\DATABASE\RMAN\full%u_%s_%p' database
10> include current controlfile;
11> sql 'alter system archive log current';
12> release channel c1;
13> }
14> # end
15>
connected to target database: DODO (DBID=472976704)
allocated channel: c1
channel c1: sid=17 devtype=DISK
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
including current controlfile in backupset
input datafile fno=00008 name=D:\ORACLE\ORADATA\DODO\WXQ_TBS.ORA
input datafile fno=00006 name=D:\ORACLE\ORADATA\DODO\USERS01.DBF
input datafile fno=00001 name=D:\ORACLE\ORADATA\DODO\SYSTEM01.DBF
input datafile fno=00002 name=D:\ORACLE\ORADATA\DODO\UNDOTBS01.DBF
input datafile fno=00007 name=D:\ORACLE\ORADATA\DODO\XDB01.DBF
input datafile fno=00004 name=D:\ORACLE\ORADATA\DODO\INDX01.DBF
input datafile fno=00003 name=D:\ORACLE\ORADATA\DODO\DRSYS01.DBF
input datafile fno=00009 name=D:\ORACLE\ORADATA\DODO\RECOVERY_TBS.ORA
input datafile fno=00005 name=D:\ORACLE\ORADATA\DODO\TOOLS01.DBF
channel c1: starting piece 1 at 2009-01-13
channel c1: finished piece 1 at 2009-01-13
piece handle=D:\DATABASE\RMAN\FULL1QK4NINF_58_1 comment=NONE
channel c1: backup set complete, elapsed time: 00:02:37
Finished backup at 2009-01-13
piece handle=D:\ORACLE\ORADATA\DODO\RMANBACK\CTL_C-472976704-20090113-03 comment=NONE
Finished Control File and SPFILE Autobackup at 2009-01-13
3、繼續在測試表中插入記錄
SQL> insert into test values(2);
1 row inserted
SQL> commit;
Commit complete
SQL> select * from test;
A
---------------------------------------
1
2
SQL> alter system switch logfile;
System altered.
SQL> alter system switch logfile;
System altered.
4、關閉數據庫,模擬丟失數據文件
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down
C:>del D:\ORACLE\ORADATA\DODO\SYSTEM01.DBF
C:>del D:\ORACLE\ORADATA\DODO\TOOLS01.DBF
C:>del D:\ORACLE\ORADATA\DODO\INDX01.DBF
5、啓動數據庫,檢查錯誤
SQL> startup
ORACLE instance started.
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: 'D:\ORACLE\ORADATA\DODO\SYSTEM01.DBF'
查詢v$recover_file
SQL> select * from v$recover_file;
---------- ------- ------- -------------------- ---------- ----------
1 ONLINE ONLINE FILE NOT FOUND 0
4 ONLINE ONLINE FILE NOT FOUND 0
5 ONLINE ONLINE FILE NOT FOUND 0
6 ONLINE ONLINE FILE NOT FOUND 0
可以知道有四個數據文件需要恢復
6、利用RMAN進行恢復
C:>rman
Recovery Manager: Release 9.2.0.1.0 - Production
RMAN> connect rcvcat rman/rman
RMAN> connect target sys/sys
connected to target database: DODO (DBID=472976704)
RMAN> run{
2> allocate channel c1 type disk;
3> restore database;
4> recover database;
5> sql 'alter database open';
6> release channel c1;
7> }
allocated channel: c1
channel c1: sid=12 devtype=DISK
channel c1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to D:\ORACLE\ORADATA\DODO\SYSTEM01.DBF
restoring datafile 00002 to D:\ORACLE\ORADATA\DODO\UNDOTBS01.DBF
restoring datafile 00003 to D:\ORACLE\ORADATA\DODO\DRSYS01.DBF
restoring datafile 00004 to D:\ORACLE\ORADATA\DODO\INDX01.DBF
restoring datafile 00005 to D:\ORACLE\ORADATA\DODO\TOOLS01.DBF
restoring datafile 00006 to D:\ORACLE\ORADATA\DODO\USERS01.DBF
restoring datafile 00007 to D:\ORACLE\ORADATA\DODO\XDB01.DBF
restoring datafile 00008 to D:\ORACLE\ORADATA\DODO\WXQ_TBS.ORA
restoring datafile 00009 to D:\ORACLE\ORADATA\DODO\RECOVERY_TBS.ORA
channel c1: restored backup piece 1
piece handle=D:\DATABASE\RMAN\FULL1QK4NINF_58_1 tag=DBFULL params=NULL
channel c1: restore complete
Finished restore at 2009-01-13
archive log thread 1 sequence 44 is already on disk as file D:\ORACLE\ORADATA\DODO\ARCHIVE\1_44.DBF
archive log thread 1 sequence 45 is already on disk as file D:\ORACLE\ORADATA\DODO\ARCHIVE\1_45.DBF
archive log filename=D:\ORACLE\ORADATA\DODO\ARCHIVE\1_43.DBF thread=1 sequence=43
media recovery complete
Finished recover at 2009-01-13
7、檢查數據庫的數據(完全恢復)
A
--------------------------
1
2
3、目標數據庫在mount下進行,如果恢復成功,再打開數據庫。
4、RMAN的備份與恢復命令相對比較簡單並可靠,建議有條件的話,都採用RMAN進行數據庫的備份。