首页 百科 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秒钟以避免错误,因为这是由后台进程异步处理,没有任何用户控制.

关于作者: dawei

【声明】:乐山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

热门文章