oracle – “表定义已更改”,尽管表创建/更改后创建了恢复点

前端之家收集整理的这篇文章主要介绍了oracle – “表定义已更改”,尽管表创建/更改后创建了恢复点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当表更改后立即创建恢复点时,FLASHBACK TABLE到还原点失败.以下代码仅在某些步骤之间有睡眠时才起作用.
sql> DROP TABLE TEST_TABLE;

Table dropped.

sql> CREATE TABLE TEST_TABLE AS SELECT 1 A FROM DUAL;

Table created.

sql> ALTER TABLE TEST_TABLE ENABLE ROW MOVEMENT;

Table altered.

sql> --Sleep required here to prevent error on flashback.
sql> DROP RESTORE POINT TEST_RESTORE_POINT;

Restore point dropped.

sql> CREATE RESTORE POINT TEST_RESTORE_POINT;

Restore point created.

sql> FLASHBACK TABLE TEST_TABLE TO RESTORE POINT TEST_RESTORE_POINT;
FLASHBACK TABLE TEST_TABLE TO RESTORE POINT TEST_RESTORE_POINT
                *
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed

为什么需要延迟,有没有办法消除它?

这个奇怪性可能是由SMON进程引起的,这个进程负责跟踪SCN和闪回查询依赖的时间戳.有一个映射表SYS.SMON_SCN_TIME,每5分钟一个新记录插入SMON.

内部FLASHBACK TABLE执行一个命令INSERT / * APPEND * /进入SYS_TEMP_FBT SELECT / * FBTSCAN FULL(S)PARALLEL(S,DEFAULT)* /:1,:2,:3,rowid,SYS_FBT_INSDEL FROM“< schema> .从SCN:4 S(注意一个表SYS_TEMP_FBT创建在同一个模式中)的“TEST_TABLE”(使用该映射).

直到Oracle 10.2,您需要等待整整5分钟才能在新的/改变的对象上进行FLASHBACK查询.在11.1中引入了TIM_SCN_MAP列,使映射更细粒度.最多100个映射存储在一个值中,这使得SCN映射的时间戳精度约为3秒.

我尝试了许多事情,但我不认为你可以做任何事情,但等待3秒钟以避免错误,因为这是由后台进程异步处理,没有任何用户控制.

猜你在找的Oracle相关文章