Coolfensi推广网站头像

Coolfensi推广网站

Coolfensi推广网站专注数据驱动的互联网营销和运营,客服VX:coolfensi,客服QQ:2451468936(QQ/微信客服只做引导和站点通知,不闲聊。有站点内业务疑问以及订单问题的话,请点击【CL-在线售后客服窗口】进行会话)

  • 文章114569
  • 阅读16324935

人生倒计时

  • 今日已经过去小时
  • 这周已经过去
  • 本月已经过去
  • 今年已经过去个月
首页 最新知识 正文内容

oracle恢复数据快照过旧(恢复oracle数据库数据)

客服VX(coolfensi) 最新知识 2023-03-19 00:03:15 109

数据恢复时,“ORA-01555快照过旧”

这个是由于你的数据库的这个表的对应undo已经覆盖,无法通过该方法恢复delete数据

联系方式:微信:coolfensi
(使用浏览器扫码进入在线客服窗口)
复制联系方式

如果数据重要,无法自行解决,可以联系我们,通过另外的方法恢复oracle 被delete数据

网页链接

高手,ORACLE快照过旧,怎么解决

这种问题一般是undo表空间太小或者undo_retention的值设置过短导致。当然也可能是数据量过大,那需要优化下sql。

oracle查询值过旧怎么办

重新建立。oracle查询值过旧要把大表索引重新建立,只对经常用到的字段建立单个B树索引。OracleDatabase,又名OracleRDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。

oracle恢复数据快照过旧(恢复oracle数据库数据) 第1张

Oracle数据库 ORA-01555快照过旧是怎么回事?怎么解决

用户user1对表进行了更新操作,用户user2在user1还没有进行提交前读表中数据,而且是大批量的读取(打个比方:耗时3分钟)而在这3分钟内user1进行了提交操作,那又会产生什么影响呢?这个时候怎么保证读写一致性呢?这个时候DBMS就要保证有足够大的undo表空间来存放修改前的数值,,以保证user2读取的数据是修改前的一致数据.然后下次再读取时候就是更新后的数据了.

ora-01555快照过旧就是因为undo空间不够大,其中一部分undo数据被覆盖了,用户无法获得修改前的数据。

undo数据分为三种:

活动的undo:未提交事务的undo数据,这些undo数据永远不能覆盖,用于回滚rollback事务。

过期的undo:已提交事务的undo数据,这些undo数据可以覆盖。

未过期的undo:事务已提交,但事务提交前,有些查询正在进行,它要读取的是提交前的数据,这部分数据就是未过期数据。如果这部分undo数据被覆盖了,就会发生ora-01555错误。

一个解决方法是,指定undo表空间参数UNDO_TABLESPACE,并将undo空间管理方法设置成自动扩展:UNDO_MANAGEMENT=AUTO。

这种方法可能产生的结果是:

因为undo表空间装了太多未过期(unexpired)的undo数据,新的transaction无法向其中写入undo数据,这时transaction就会发生ORA-30036错误。

[SQL]Oracle ORA-01555快照过旧的错误

关于Oracle ORA-01555快照过旧的错误

首先了解Oracle在什么情况下会产生ORA-01555错误:

假设有一张6000万行数据的testdb表,预计testdb全表扫描1次需要2个小时,参考过程如下:

1、在1点钟,用户A发出了select * from testdb;此时不管将来testdb怎么变化,正确的结果应该是用户A会看到在1点钟这个时刻的内容。

2、在1点30分,用户B执行了update命令,更新了testdb表中的第4100万行的这条记录,这时,用户A的全表扫描还没有到达第4100万条。毫无疑问,这个时候,第4100万行的这条记录是被写入了回滚段,假设是回滚段UNDOTS1,如果用户A的全表扫描到达了第4100万行,是应该会正确的从回滚段UNDOTS1中读取出1点钟时刻的内容的。

3、这时,用户B将他刚才做的操作提交了,但是这时,系统仍然可以给用户A提供正确的数据, 因 为那第4100万行记录的内容仍然还在回滚段UNDOTS1里,系统可以根据SCN到回滚段里找到正确的数据,但要注意到,这时记录在UNDOTS1里的第4100万行记录已经发生了重大的改变:就是第4100万行在回滚段UNDOTS1里的数据有可能随时被覆盖掉, 因 为这条记录已经被提交了!

4、由于用户A的查询时间漫长,而业务在一直不断的进行,UNDOTS1回滚段在被多个不同的transaction使用着,这个回滚段里的extent循环到了第4100万行数据所在的extent,由于这条记录已经被标记提交了,所以这个extent是可以被其他transaction覆盖掉的!

5、到了1点45分,用户A的查询终于到了第4100万行,而这时已经出现了第4条说的情况,需要到回滚段UNDOTS1去找数据,但是已经被覆盖掉了,这时就出现了ORA-01555错误。

原因分析:"报表"程序执行时间漫长,在程序查询的过程中其他用户对"报表"进行了更新,被更新的数据写入了回滚段,当程序到回滚段找数据时,发现数据已经被覆盖掉,于是就出现了ORA-01555错误。另外"报表"程序执行效率不高也会造成ORA-01555错误。

解决办法:

1、扩大回滚段, 因 为回滚段是循环使用的,如果回滚段足够大,那么那些被提交的数据就能保存足够长的时间,使那些大事务完成一致性读取。之前EBS系统UNDO 表空间 为9GB,目前为10GB。

2,强制走索引,如果sql语句用了索引字段,在执行过程中没有走上索引,需要强制走索引,merge 语句强制走索引,如 merge 和selec 的语句

MERGE/ +INDEX(F,IDX_S01_T_EXW_BASIC_DOCUMENTNO) /

INTO BI_DM.S01_T_INFOR F

USING (SELECT/ +INDEX(IDX_OMS_WH_OUTB_ORD_REBATE_02) / T12.ORDER_NO, T12.IS_REBATE, T12.CREATED, T12.UPDATED

FROM BI_ODS.OW_ORD_REBATE T12

WHERE T12.UPDATED = DATA_DATE_3D

AND T12.IS_ACTIVE = 'Y'

AND T12.IS_DELETE = 'N') S

ON (F.OVERSEAS_WAREHOUSE_ID = VI_WAREHOUSE_ID AND F.DOCUMENTNO = S.ORDER_NO AND F.DATA_SOURCE = 'OW')

WHEN MATCHED THEN

UPDATE SET F.REBATE_STATUS = S.IS_REBATE;

Oracle 使用Flashback方式数据恢复,但是表中有CLOB字段,提示:快照旧了

使用闪回数据库,闪回后以read only模式打开,导出该表,然后重启数据库,做recover,打开,再导入;

使用基于时间点的恢复,和1差不多;

如果是11g版本以上,考虑以后用闪回数据归档。

文章目录
    搜索