交换分区后推迟放置表

问题描述:

我有两个表:交换分区后推迟放置表

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这样的操作不会伤害其他表?

谢谢。 “下降和交换之间需要多少时间?”

“下降和交换之间需要多少时间?”

相关的问题是,为什么有人在TGT_TABL上运行查询。如果我正确理解您的情况,那是一个瞬态表,用于通过分区交换加载数据。因此,没有商业用户应该查询它们(他们应该等到数据在分区表中生效)。

如果查询来自非业务用户(DBA,支持人员),我的建议是继续像现在这样做,然后发送电子邮件给那些解释为什么他们偶尔会得到ORA-00813错误的人。

如果查询来自业务用户,那么它更困难。推迟下降没有任何意义,因为只要您计划了,有人可能会运行查询。您需要跟踪正在运行这些查询的用户,了解他们为什么要这样做,并确定是否有其他方式来满足需求。

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

+0

APC,谢谢你的回答。我会尽力解释。在标准交换分区语句中,目标是将没有分区的表中的所有数据移动到具有分区的表中。在我的情况下是不同的。我没有一个真正的数据需要在其中的分区表。我只想将数据从加载表切换到目标。所以最好的方法是像1分区一样创建加载表 - 匹配所有行,并将此全行分区与目标表交换。所以交换完成后我不需要加载表。这就是为什么我想放弃它。 – user2671057

+0

关于这个问题本身 - 如果我通过交换声明正确的话,这些表格有共同的关系。所以当你放弃其中一个时,可能会导致第二个访问异常。也许我错了,但我认为这不是关于用户查询表的时间。用户查询只会引起注意。但是为什么一个表的下降会导致另一个表异常?因为交流......所以我认为我会将其推向前进...... – user2671057