咨询微信: dbservice1234 7 x 24 在线支持!

    你在这里

    • You are here:
    • 首页 > 博客 > PDSERVICE的博客 > oracle闪回查询flashback query恢复误删除delete数据遭遇Ora-08180 Ora-01555 ORA-08180: 未找到基于指定时间的快照

oracle闪回查询flashback query恢复误删除delete数据遭遇Ora-08180 Ora-01555 ORA-08180: 未找到基于指定时间的快照

oracle闪回查询flashback query恢复误删除delete数据遭遇Ora-08180 Ora-01555 ORA-08180: 未找到基于指定时间的快照

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

 

prm-DUL下载地址:http://7xl1jo.com2.z0.glb.qiniucdn.com/DUL3206.zip

 

 
ORA-01555: 快照过旧: 回退段号  (名称为 "") 过小
ORA-08180: 未找到基于指定时间的快照
 
 
ORA-01555 oerr ora 1555
01555, 00000, "snapshot too old: rollback segment number %s with name \"%s\" too small"
// *Cause: rollback records needed by a reader for consistent read are
//         overwritten by other writers
// *Action: If in Automatic Undo Management mode, increase undo_retention
//          setting. Otherwise, use larger rollback segments
ORA-08180 oerr ora 8180
08180, 00000, "no snapshot found based on specified time"
// *Cause: Could not match the time to an SCN from the mapping table.
// *Action: try using a larger time.

 

 

对于Oracle中的数据误删除可以分为以下几类(这里我们一般不考虑闪回数据库flashback database)

1、 误delete 删除表上的行 , 对策: 10g以后可以尝试闪回查询flashback query前提是快照未变得过久。这种情况下常规有RMAN备份的话,可以的话可以基于删除前的一个时间点做TSPTIR基于表空间的时间点恢复已达到恢复目的。 如果备份和闪回查询都不可用,则可以尝试使用PRM-DUL的恢复undelete数据功能,前提是被删除的数据行在数据块级别没有被彻底删除。

 

在这个场景中用户由于误操作了DELETE语句未加上where条件导致误删除了大量应用数据行,没有在第一时间发现。在几天后发现时再使用flashback query闪回查询却失败

 

ERROR
-----------------------
SQL> select count(*) from APPTABLE as of timestamp systimestamp -4; 
COUNT(*)
----------
13355

SQL> select count(*) from APPTABLE as of timestamp systimestamp -5; 
select count(*) from APPTABLE as of timestamp systimestamp -5
*
ERROR at line 1:
ORA-01555: snapshot too old: rollback segment number 3 with name "_SYSSMU3$" too small

SQL> select count(*) from APPTABLE as of timestamp systimestamp -6; 
select count(*) from APPTABLE as of timestamp systimestamp -6
*
ERROR at line 1:
ORA-08180: no snapshot found based on specified time

在oracle 10g中闪回查询是不能查5天前的数据快照的,对于这个5天即便你的undo很足够也没有用,因为这个5天的时间是代码里写死的。

在oracle 11g里则没有这个限制了,对于查询限制的周期可以根据你的undo_management=AUTO自动去调整。

UNDO_RETENTION用来确认所能覆盖的最长的查询过往时间,RETENTION GUARANTEE则对这个时间做保证。以避免所需要的undo被覆盖重写。

这个5天的限制实际上是由于要记录事务scn和事务时间之间的关系而造成的。在10g中只记录5天中transaction scn和transaction time的对应关系。在oracle 11g中得以重新设计。

用户可能会遇到ORA-8180错误,假若发起的查询快照没有在SMON_SCN_TIME中有对应的时间或scn记录了。也可能遇到ORA-01555错误若undo数据真的被覆盖了。

 

对于不管是ORA-8180还是ORA-01555的闪回查询失败,都应当先考虑基于rman的TSPTIR来做恢复,若实在没有rman的有效物理备份,则可以考虑使用PRM-DUL的undelete功能来恢复这部分被误删除的记录。