加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 百科 > 正文

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

发布时间:2021-05-22 15:42:23 所属栏目:百科 来源:网络整理
导读:当表更改后立即创建恢复点时,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

当表更改后立即创建恢复点时,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秒钟以避免错误,因为这是由后台进程异步处理,没有任何用户控制.

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读