交换分区后延迟删除表

时间:2017-05-25 08:50:14

标签: oracle alter-table partition

我有两张桌子:

ld_tbl - 分区表。

tgt_tabl - 非分区表。

在我的计划中,我正在执行

alter table ld_tbl exchange partition prt with table tgt_table;

在交换完成后,我执行了ld_tbl的删除。

问题是,如果某人通过tgt_tabl触发了查询,则会引发异常:

  

ORA-00813:对象不再存在

即使我只删除了ld_tbl,也没有触及tgt_tabl。经过多次测试后,我确定它是引起异常的下降。根据这些信息:Object no longer exists,解决方案是推迟下降。

我的问题是:掉落和交换之间需要多长时间?我怎么知道像drop这样的操作不会伤到另一张桌子?

感谢。

1 个答案:

答案 0 :(得分:0)

  

“掉落和交换之间需要多长时间?”

相关的问题是,为什么有人在TGT_TABL上运行查询。如果我理解你的情况是一个临时表,用于通过分区交换加载数据。所以没有业务用户应该查询它(它们应该等到数据在分区表中生效)。

如果查询来自非业务用户(DBA,支持人员),我的建议就是像现在一样继续,并向这些人发送电子邮件,说明他们偶尔会遇到ORA-00813错误的原因

如果查询来自业务用户,则更难。推迟删除是没有意义的,因为有人可能会在计划时运行查询。您需要跟踪运行这些查询的用户,发现他们为什么这样做,并找出是否有其他方法可以满足需求。

但我不认为您可以申请技术修复。通过使用分区交换,您已经最小化了可能发生此错误的窗口。