我有两张桌子:
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这样的操作不会伤到另一张桌子?
感谢。
答案 0 :(得分:0)
“掉落和交换之间需要多长时间?”
相关的问题是,为什么有人在TGT_TABL上运行查询。如果我理解你的情况是一个临时表,用于通过分区交换加载数据。所以没有业务用户应该查询它(它们应该等到数据在分区表中生效)。
如果查询来自非业务用户(DBA,支持人员),我的建议就是像现在一样继续,并向这些人发送电子邮件,说明他们偶尔会遇到ORA-00813
错误的原因
如果查询来自业务用户,则更难。推迟删除是没有意义的,因为有人可能会在计划时运行查询。您需要跟踪运行这些查询的用户,发现他们为什么这样做,并找出是否有其他方法可以满足需求。
但我不认为您可以申请技术修复。通过使用分区交换,您已经最小化了可能发生此错误的窗口。