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

时间:2015-12-02 15:56:05

标签: oracle

在表更改后立即创建该还原点时,

$ awk 'BEGIN{pre="computer0-"; p[1]=pre"1 "; p[2]=pre"10"; p[3]=pre"7"} {for(i=1;i<4;i++) if($0~p[i]) {print p[i], $0; next} }' file | column -t 到还原点失败。以下代码仅在某些步骤之间有睡眠时才有效。

FLASHBACK TABLE

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

1 个答案:

答案 0 :(得分:7)

这种奇怪可能是由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 "<schema>."TEST_TABLE" as of SCN :4 S(注意在同一模式中创建表SYS_TEMP_FBT),该命令使用此映射。

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

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