2024年6月5日发(作者:)

ORACLE数据库如何恢复(

邝俊标

)

ORACLE数据库备份与恢复与ORACLE的结构密切相关,大家先弄清ORACLE 物理结构

有哪些?逻辑结构是有哪些?它们的作用是什么?弄明白这些以后,具体怎么备份、怎么恢

复就需要了解下ORACLE本身是怎么管理数据库的有那些相关的ORACLE系统表?

ORACLE的后台进程是怎么管理的?最后就要知道相关的ORACLE命令、语法,根据系统

提示错误灵活处理了。

ORACLE 恢复主要有下面的几种问题:

一、数据文件丢失恢复:

二、 OS备份下的基于时间的恢复

三、损坏联机日志的恢复

四、 损坏当前联机日志恢复

五 损坏控制文件的恢复

六、损坏回滚数据文件的恢复

七、 损坏临时数据文件的恢复

一、数据文件丢失恢复:

1、查看报警文件或动态视图v$recover_file

SQL> select * from v$recover_file;

2、脱机数据文件

SQL> alter database datafile 'file#' offline drop;

3、打开数据库,拷贝备份回来(restore),恢复(recover)该数据文件,并联机

SQL> alter database open;

4、拷贝备份从备份处

copy d:databak d:oracleoradataorcl;

5、恢复该数据文件

SQL> recover datafile 'file#';

SQL> recover database; (多个数据文件丢失,恢复整个数据库)

6、恢复成功,联机该数据文件

SQL> alter database datafile 'file#' online;

说明:

1) 采用热备份,需要运行在归档模式下,可以实现数据库的完全恢复,也就是说,从备份

后到数据库崩溃时的数据都不会丢失。

2) 可以采用全备份数据库的方式备份,对于特殊情况,也可以只备份特定的数据文件,如

只备份用户表空间(一般情况下对于某些写特别频繁的数据文件,可以单独加大备份频率)

3) 如果在恢复过程中,发现损坏的是多个数据文件,即可以采用一个一个数据文件的恢复

方法(第5步中需要对数据文件一一脱机,第6步中需要对数据文件分别恢复),也可以

采用整个数据库的恢复方法。

4) 如果是系统表空间的损坏,不能采用此方法 。

二、 OS备份下的基于时间的恢复

基于时间的恢复可以不完全恢复到现在时间之前的某一个时间,对于某些误操作,如删

除了一个数据表,可以在备用恢复环境上恢复到表的删除时间之前,然后把该表导出到正式

环境,避免一个人为的错误。

1、热备整个数据库

SQL> @

2、准备恢复到时间点T1,找回删除的表,先关闭数据库

SQL> shutdown immediate;

3、拷贝刚才备份的所有数据文件回来

C:>copy D:DATABAK*.DBF D:ORACLEORADATAORCL

4、启动到mount下

SQL> startup mount;

5、开始不完全恢复数据库到T1时间

SQL> recover database until time '15:57 2004-11-18';

6、打开数据库,检查数据

SQL> alter database open resetlogs;

说明:

1) 不完全恢复最好备份所有的数据,冷备份亦可,因为恢复过程是从备份点往后恢复的,

如果因为其中一个数据文件的时间戳(SCN)大于要恢复的时间点,那么恢复都是不可能成功

的。

2) 不完全恢复有三种方式,过程都一样,仅仅是recover命令有所不一样,这里用基于时

间的恢复作为示例。

3) 不完全恢复之后,都必须用resetlogs的方式打开数据库,建议马上再做一次全备份,

因为resetlogs之后再用以前的备份恢复是很难了。

4) 以上是在删除之前获得时间,但是实际应用中,很难知道删除之前的实际时间,但可以

采用大致时间即可,或可以采用分析日志文件(logmnr),取得精确的需要恢复的时间。