当前位置:  开发笔记 > 数据库 > 正文

尽管在表创建/更改后创建了还原点,但"表定义已更改"

如何解决《尽管在表创建/更改后创建了还原点,但"表定义已更改"》经验,为你挑选了1个好方法。

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

为什么需要延迟并且有办法消除它?



1> Husqvik..:

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

FLASHBACK TABLE执行期间内部使用此映射的命令INSERT /*+ APPEND */ into SYS_TEMP_FBT SELECT /*+ FBTSCAN FULL(S) PARALLEL(S, DEFAULT) */ :1, :2, :3, rowid, SYS_FBT_INSDEL FROM "."TEST_TABLE" as of SCN :4 S(注意SYS_TEMP_FBT在同一模式中创建表).

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

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

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有