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),取得精确的需要恢复的时间。
发布评论