Oracle 数据恢复从恢复类型来说,抛开具体的文件,总共可分为两大类型的恢复,一是完全恢复,一个是不完全恢复。其实,熟悉了Oracle
体系结构之后,对于Oracle恢复就会有一个总体的概念。因为Oracle组成的外围部分,主要由不同的文件来组成,每种不同类型的文件有不同的
作用,因此只要了解了其作用,更利于了解与掌握Oralce数据库的备份与恢复。言归正传,完全恢复即是把数据库恢复到最新的SCN,出故障前
的那一刻,是无损恢复。而不完全恢复即是有损恢复,多用于恢复用户误操作,归档日志丢失等情形。本文主要描述基于用户管理的不完全恢复。
一、不完全恢复特性
1、不完全恢复
不完全恢复仅仅是将数据恢复到某一个特定的时间点或特定的SCN,而不是当前时间点。不完全恢复会影响整个数据库,需要在MOUNT状
态下进行。在不完全恢复成功之后,通常需要使用 resetlogs 选项来打开数据库。当使用resetlogs后,SCN 计数器不会被重置,原来的日
志序号 log sequence 会结束,从新开始新的日志序列号。在Oracle里称之为产生一个新的incarnation。同时Oracle还会重置联机重做日
志内容,因此resetlogs之后建议重新全备数据库。
2、不完全恢复的情形
介质故障(media failure)导致部分或全部联机重做日志(online redo log)损坏
用户操作失误(user error)导致数据丢失,例如,用户由于疏忽而移除了表,提交了无效的数据到表
由于归档重做日志(archived redo log)丢失而无法进行完全恢复(complete recovery)
当前控制文件(control file)丢失,必须使用备份的控制文件打开(open)数据库
3、不完全恢复的步骤
关闭数据库并备份数据库(以防止恢复失败)
启动数据库到mount 状态
还原所有数据文件,同时可以选择还原控制文件(注意需要还原所有数据文件,而不仅仅是受损文件)
将数据库恢复至某个时间点、序列、或系统改变号
使用RESETLOGS关键字打开数据库
4、注意
不完全恢复的前提条件是Oracl数据库够到mount状态,即参数文件,控制文件存在并且可用
在做不完全恢复前建议在恢复前后做一次备份,避免恢复失败导致不必要的损失
不完全恢复完成后,需要使用OPEN RESETLOGS 方式打开(open)数据库,并产生一个新的incarnation
检查数据库是否恢复到正确的时间点,也就是能否找到所需的数据,如果恢复的时间点有误,需要重置数据库incarnation进行再次恢复
本文中的示例为便于演示,没有在恢复前备份故障数据,也没有在resetlog之后进行备份
注:Oracle 10g中已经可以在 resetlogs 之后不备份数据库,恢复的时候能够穿越resetlogs
5、不完全介质恢复的几种类型
基于时间的恢复(Time-based recovery) 将数据恢复到指定的时间点
用户控制的恢复(Cancel-based recovery) 当用户提交CANCEL后停止恢复(此选项在使用RMAN时无效)
基于SCN 的恢复(Change-based recovery) 将数据恢复到指定的SCN
按重做日志序号恢复(Log sequence recovery)将数据恢复到指定的重做日志序号(仅使用RMAN时有效)
二、演示基于用户管理的不完全恢复
-
-
-
sys@SYBO2SZ> conn / as sysdba
-
Connected.
-
sys@SYBO2SZ> archive log list;
-
Database log mode Archive Mode
-
Automatic archival Enabled
-
Archive destination /u02/database/SYBO2SZ/archive/
-
Oldest online log sequence 0
-
Next log sequence to archive 1
-
Current log sequence 1
-
-
sys@SYBO2SZ> @db_hot_bak
-
ho cp /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak
-
ho cp /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak
-
ho cp /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak
-
ho cp /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ2.dbf /u02/database/SYBO2SZ/backup/hotbak
-
ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_system_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak
-
ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak
-
ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak
-
ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_l_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak
-
-
sys@SYBO2SZ> set time on;
-
12:40:07 sys@SYBO2SZ> create table dept as select * from scott.dept;
-
-
12:40:31 sys@SYBO2SZ> create table emp as select * from scott.emp;
-
-
12:40:41 sys@SYBO2SZ>
-
12:40:55 sys@SYBO2SZ> truncate table emp;
-
-
Table truncated.
-
-
12:41:02 sys@SYBO2SZ> insert into dept select 50,'DEV','SZ' from dual;
-
-
12:41:14 sys@SYBO2SZ> insert into dept select 60,'HR','GZ' from dual;
-
-
12:41:19 sys@SYBO2SZ> commit;
-
-
Commit complete.
-
-
12:41:22 sys@SYBO2SZ> alter system checkpoint;
-
-
System altered.
-
-
12:41:31 sys@SYBO2SZ> shutdown immediate;
-
-
12:42:25 sys@SYBO2SZ> startup mount;
-
ORACLE instance started.
-
-
Total System Global Area 599785472 bytes
-
Fixed Size 2074568 bytes
-
Variable Size 213911608 bytes
-
Database Buffers 377487360 bytes
-
Redo Buffers 6311936 bytes
-
Database mounted.
-
12:42:36 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/.
-
-
12:42:57 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.
-
-
12:43:24 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.
-
-
12:43:50 sys@SYBO2SZ> recover database until time '2012-08-22:12:40:55';
-
Media recovery complete.
-
12:44:07 sys@SYBO2SZ> alter database open resetlogs;
-
-
Database altered.
-
-
12:44:20 sys@SYBO2SZ> select count(*) from emp;
-
-
COUNT(*)
-
-
14
-
-
12:44:28 sys@SYBO2SZ> select * from dept;
-
-
DEPTNO DNAME LOC
-
-
10 ACCOUNTING NEW YORK
-
20 RESEARCH DALLAS
-
30 SALES CHICAGO
-
40 OPERATIONS BOSTON
-
-
4 rows selected.
-
-
-
-
sys@SYBO2SZ> @db_hot_bak
-
-
sys@SYBO2SZ> select * from dept;
-
-
DEPTNO DNAME LOC
-
-
10 ACCOUNTING NEW YORK
-
20 RESEARCH DALLAS
-
30 SALES CHICAGO
-
40 OPERATIONS BOSTON
-
-
4 rows selected.
-
-
sys@SYBO2SZ> insert into dept select 50,'DEV','SZ' from dual;
-
-
1 row created.
-
-
sys@SYBO2SZ> commit;
-
-
Commit complete.
-
-
sys@SYBO2SZ> select current_scn from v$database;
-
-
CURRENT_SCN
-
-
471613
-
-
sys@SYBO2SZ> insert into dept select 60,'HR','GZ' from dual;
-
-
sys@SYBO2SZ> commit;
-
-
Commit complete.
-
-
sys@SYBO2SZ> delete from emp where deptno=10;
-
-
3 rows deleted.
-
-
sys@SYBO2SZ> commit;
-
-
Commit complete.
-
-
sys@SYBO2SZ> alter system checkpoint;
-
-
System altered.
-
-
sys@SYBO2SZ> shutdown immediate;
-
-
sys@SYBO2SZ> startup mount;
-
ORACLE instance started.
-
-
Total System Global Area 599785472 bytes
-
Fixed Size 2074568 bytes
-
Variable Size 218105912 bytes
-
Database Buffers 373293056 bytes
-
Redo Buffers 6311936 bytes
-
Database mounted.
-
-
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/.
-
-
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.
-
-
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.
-
-
sys@SYBO2SZ> recover database until change 471613
-
Media recovery complete.
-
sys@SYBO2SZ> alter database open resetlogs;
-
-
Database altered.
-
-
sys@SYBO2SZ> select * from dept;
-
-
DEPTNO DNAME LOC
-
-
10 ACCOUNTING NEW YORK
-
20 RESEARCH DALLAS
-
30 SALES CHICAGO
-
40 OPERATIONS BOSTON
-
50 DEV SZ
-
-
5 rows selected.
-
-
-
-
-
sys@SYBO2SZ> @db_hot_bak
-
sys@SYBO2SZ> select * from dept;
-
-
DEPTNO DNAME LOC
-
-
10 ACCOUNTING NEW YORK
-
20 RESEARCH DALLAS
-
30 SALES CHICAGO
-
40 OPERATIONS BOSTON
-
50 DEV SZ
-
-
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
-
total 348K
-
-rw-r
-
-rw-r
-
-rw-r
-
-
sys@SYBO2SZ> alter system switch logfile;
-
-
System altered.
-
-
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
-
total 416K
-
-rw-r
-
-rw-r
-
-rw-r
-
-rw-r
-
-
sys@SYBO2SZ> insert into dept select 60,'HR','SHANGHAI' from dual;
-
-
sys@SYBO2SZ> insert into dept select 70,'INFRA','HONGKONG' from dual;
-
-
sys@SYBO2SZ> commit;
-
-
Commit complete.
-
-
sys@SYBO2SZ> alter system checkpoint;
-
-
System altered.
-
-
sys@SYBO2SZ> alter system archive log current;
-
-
System altered.
-
-
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
-
total 420K
-
-rw-r
-
-rw-r
-
-rw-r
-
-rw-r
-
-rw-r
-
-
sys@SYBO2SZ> insert into dept select 80,'MARKET','BEIJING' from dual;
-
-
sys@SYBO2SZ> commit;
-
-
Commit complete.
-
-
sys@SYBO2SZ> alter system archive log current;
-
-
System altered.
-
-
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
-
total 424K
-
-rw-r
-
-rw-r
-
-rw-r
-
-rw-r
-
-rw-r
-
-rw-r
-
-
sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc | grep HONGKONG
-
HONGKONG
-
-
sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_6.arc | grep BEIJING
-
BEIJING
-
-
sys@SYBO2SZ> ho rm /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc
-
-
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
-
total 420K
-
-rw-r
-
-rw-r
-
-rw-r
-
-rw-r
-
-rw-r
-
-
sys@SYBO2SZ> shutdown immediate;
-
-
sys@SYBO2SZ> startup mount;
-
ORACLE instance started.
-
-
Total System Global Area 599785472 bytes
-
Fixed Size 2074568 bytes
-
Variable Size 243271736 bytes
-
Database Buffers 348127232 bytes
-
Redo Buffers 6311936 bytes
-
Database mounted.
-
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/.
-
-
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.
-
-
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.
-
-
sys@SYBO2SZ> recover database until cancel;
-
ORA-00279: change 494124 generated at 08/22/2012 17:02:30 needed for thread 1
-
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc
-
ORA-00280: change 494124 for thread 1 is in sequence #4
-
-
Specify log: {=suggested | filename | AUTO | CANCEL}
-
/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc
-
ORA-00279: change 494189 generated at 08/22/2012 17:04:46 needed for thread 1
-
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc
-
ORA-00280: change 494189 for thread 1 is in sequence #5
-
ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc' no longer needed for this recovery
-
-
Specify log: {=suggested | filename | AUTO | CANCEL}
-
cancel
-
Media recovery cancelled.
-
sys@SYBO2SZ> alter database open resetlogs;
-
-
Database altered.
-
-
sys@SYBO2SZ> select * from dept;
-
-
DEPTNO DNAME LOC
-
-
10 ACCOUNTING NEW YORK
-
20 RESEARCH DALLAS
-
30 SALES CHICAGO
-
40 OPERATIONS BOSTON
-
50 DEV SZ
-
-
5 rows selected.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30192548/viewspace-2126035/
,如需转载,请注明出处,否则将追究法律责任。