网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  丢失归档日志文件后数据库应当如何恢复 (1)     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:52次  录入:管理员--2008-04-16  
 

【赛迪网-it技术报道】本文主要介绍了如何从一个不能正常打开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据的具体示例,详细内容请大家参考下文。 style="text-indent:2em">

具体案例:

一个磁盘损坏了并丢失了一个数据库文件。从一周前的热备转储数据文件,可是丢失了几个归档日志文件。但是有问题的数据文件包含了最重要的表,采用什么办法才能挽救数据呢?

解决方法:

每个数据库管理员都知道这是有问题的,一定会丢失数据,因为某些事务丢失了,问题是会丢失多少数据?oracle使用硬线路位置并且由于存在完整性约束问题,因此不允许正常打开数据。但是如果使用非常规的方法让oracle删除其硬线路属性,那么应该能够提取尽可能多的数据。而通常这会比损失全部数据要好很多。

通常假如仅仅丢失了堆表的索引,或者某些能够很容易重建的数据,那么最好的方法应该是删除表空间并重建这些对象然后重新输入。但是如果丢失的数据文件包含了重要数据并且很难恢复,而且只有前一次的备份却又丢失了某些归档日志,那么用户可能希望能够尽可能多的从有问题的表空间恢复数据并且删除和重建表空间。

具体步骤如下:

1.对当前拥有的数据进行一个冷备;

2.转储丢失的数据库文件备份并应用可以应用的日志;

3.设置未文档化的初始化参数,其允许你在当前状态打开数据库;

4.执行exp并提取全部可以从有问题的表空间提取的数据;

5.从先前的冷备转储数据库;

6.使毁坏的数据文件offline;

7.执行exp并提取第4步没有提取的额外数据;

8.在一次从冷备转储;

9.删除有问题的表空间;

10.重建有问题的表空间;

11.使用第四步和第七步提取的数据重建数据;

使用案例描述:ordtab表空间的一个数据文件ordtab03.dbf毁坏,其包含很多

orders表的分区,数据文件热备于july 4, 2004,july 4—至今的某些归档日志丢失。

第1步:备份数据库

第1步的任务是冷备当前拥有的任何数据文件,在线重做日志,和控制文件。如果丢失了一个/多个数据文件但是数据库仍然是open的,那么对每个剩余的数据文件进行热备并确保备份期间/之后的归档被安全保存。

创建备份后,在关闭数据库之前,备份一下控制文件:

alter database backup controlfile to trace resetlogs;

然后打开备份的控制文件,删除第一个#之上的所有行,并删除“recover database…”到文件结尾的全部。

第2步:转储丢失的数据库文件备份并应用日志;

这一步应该转储备份,并应用日志到直到无法在前向滚动,此时如果尝试正常打开数据库,将会得到ora-01589: must use resetlogs or noresetlogs option for database open错误。

如果尝试执行alter database open resetlogs,将会得到ora-01195错误:ora-01195: online backup of file %s needs more recovery to be consistent。

这里是oracle使用其硬线路的位置。由于转储的数据文件不能恢复到与其他文件一致的位置,所以可能存在中断的数据并且oracle不允许正常打开数据库。

第3步:设置未文档化的实例参数并打开数据库

在初始化参数文件中首先需要将job_queue_processes设置为0,然后设置_allow_resetlogs_corruption=true,更改该参数后,切换到保存新控制文件的目录,第一步创建的位置。然后以sysdba连接并运行新的控制文件创建脚本。

此时数据库可以打开了。

sql> select count(*) from oe.orders;

第4步:执行导出并提取数据

在这一步可以很容易的看到那些表导出了全部的数据。

第5步:转储备份的数据库

这一步,以及下面两步可选。这三步结合在一起允许提取更多的数据,这一步从备份的数据库转储可以高效的撤销任何由于使用_allow_resetlogs_corruption参数造成的毁坏。因此,这一步不会恢复任何丢失的数据文件。

第6步:使毁坏的数据文件offline

alter database datafile '/u07/oradata/prd/ordtab03.dbf' offline;

这一步得到数据库的完全一致性状态。

第7步:执行导出并提取额外的数据

这一步可能能够提取从第四步不能提取的额外数据,如索引中的数据。

第8步 :转储数据库

这是最后一次转储数据库,这一步正式回滚数据库到使用隐含参数前那一刻,然后将数据库返回到正常状态,如果从第五步转储以来没有更新任何数据,可以跳过这一步。

第9步:删除有问题的表空间

首先需要查看是否有完整性约束限制,使用以下查询:

select cr.constraint_name

from dba_constraints cr, dba_constraints cp, dba_tables tp, dba_tables tr

where cr.r_owner = cp.owner

and cr.r_constraint_name = cp.constraint_name

and cr.constraint_type = 'r'

and cp.constraint_type in ('p', 'u')

and cp.table_name = tp.table_name

and cp.owner = tp.owner

and cr.table_name = tr.table_name

and cr.owner = tr.owner

and tr.tablespace_name <> 'ordtab'

and tp.tablespace_name = 'ordtab';

如果有约束,可能需要创建重建脚本。如果使用export dump重建数据,约束可以从导出文件转储。

drop tablespace ordtab including contents cascade constraints;

第10步:重建表空间

第11步:重建数据

执行导入后,结束。

 
 
上一篇: 多方面讲解pl/sql编程存在的几个缺点 (1)    下一篇: 快速掌握重启oracle数据库的操作步骤
  相关文档
ORACLE常用的SQL语法和数据对象 08-05
详细讲解获得当前"scn"的几种有效方式 03-17
实例讲解如何删除oracle 10g的垃圾表 03-28
脚本示例:查看数据库中有无多余的索引sql 07-01
教你快速理解oracle归档模式的命令及参数 11-15
个人经验总结:oracle数据库scn号详解 08-12
如何在oracle中重编译所有无效的存储过程 03-04
通过分析SQL语句的执行计划优化SQL(一) 08-05
如何确定Oracle数据库表中重复的记录 01-15
深入讲解调整oracle sga大小的解决方法 04-07
temp表空间肆意扩大无法继续扩展的现象 02-20
oracle数据库中如何根据时间来执行job 05-13
深入了解 Oracle 10g 中新型层次查询选项 08-05
如何避免Oracle数据库密码出现@符号 06-17
oracle数据库备份与恢复精华资料集锦 (1) 04-15
循序渐进讲解oracle数据库管理员的职责 (1) 04-29
redo copy latch未命中率并不需要调整 04-16
如何使用oracle提供的字符扫描工具csscan 03-06
Oracle的恢复管理器及DBMS_JOB包分析 04-11
如何获取指定表中指定字段内的可用编号 04-23
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息