<b>丧失归档日记文件的数据库恢复办法-备份恢复</b>[Oracle防范]
本文“<b>丧失归档日记文件的数据库恢复办法-备份恢复</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
演示内容
从一个不能正常翻开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据.场景:一个磁盘破坏了并且丧失了一个数据库文件.从一周前的热备转储数据文件,不幸的是丧失了几个归档日记文件.但是有问题的数据文件包含了最重要的表,若何可以解救数据呢?
每个DBA都知道这是有问题的,一定会丧失数据,因为某些事件丧失了,问题是会丧失多少数据?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—至今的某些归档日记丧失.
第一步:备份数据库第一步的任务是冷备当前拥有的任何数据文件,在线重做日记,和掌握文件.假如丧失了一个/多个数据文件但是数据库仍旧是open的,那么对每个剩余的数据文件举行热备并确保备份期间/之后的归档被安全保存.
成立备份后,在关闭数据库之前,备份一下掌握文件:ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS;然后翻开备份的掌握文件,删除第一个#之上的全部行,并删除"RECOVER DATABASE…"到文件末尾的全部.
第二步:转储丧失的数据库文件备份并利用日记;这一步应当转储备份,并利用日记到直到无法在前向转动,此时假如尝试正常翻开数据库,将会得到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不答应正常翻开数据库.
第三步:设置未文档化的实例参数并翻开数据库在初始化参数文件中首先需求将job_queue_processes设置为0,然后设置_allow_resetlogs_corruption=TRUE,更改该参数后,切换到保存新掌握文件的目录,第一步成立的位置.然后以SYSDBA衔接并运行新的掌握文件成立脚本.
此时数据库可以翻开了.
SQL> SELECT COUNT(*) FROM OE.orders;
第四步:履行导出并提取数据在这一步可以很简单的看到那些表导出了全部的数据.
第五步:转储备份的数据库这一步,以及下面两步可选.这三步结合在一同答应提取更多的数据,这一步从备份的数据库转储可以高效的撤消任何由于利用_allow_resetlogs_corruption参数造成的破坏.因此,这一步不会恢复任何丧失的数据文件.
第六步:使破坏的数据文件offline ALTER DATABASE DATAFILE '/u07/oradata/PRD/ordtab03.dbf' OFFLINE;这一步得到数据库的完好一致性状况.
第七步:履行导出并提取额外的数据这一步大概可以提取从第四步不能提取的额外数据,如索引中的数据.
第八步 :转储数据库这是最后一次转储数据库,这一步正式回滚数据库到利用隐含参数前那一刻,然后将数据库返回到正常状况,假如从第五步转储以来没有更新任何数据,可以跳过这一步.
第九步:删除有问题的表空间首先需求查看能否有完好性约束限制,利用以下查询:
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;
第十步:重建表空间
第十一步:重建数据履行导入
以上是“<b>丧失归档日记文件的数据库恢复办法-备份恢复</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |