表重命名和交换分区之间的区别

时间:2016-11-15 16:11:11

标签: sql oracle etl database-partitioning

我有一个ETL进程,它将数据加载到目标表A中。我们创建了另一个表B,它与结构中的目标表相同 报告团队访问此表以生成报告。现在,只要将数据加载到目标表A中,就调用存储过程将表B重命名为表Temp,将表B重命名为表A,将表A重命名为表Temp。这样做是为了最大限度地减少报告生成的停机时间。

这样报告始终可以访问最新数据。现在我的问题是我可以在表B上创建一个分区,并使用交换分区机制来交换A和分区表B的段。那么你能告诉我哪种方法更好,交换分区与表重命名有什么不同。

3 个答案:

答案 0 :(得分:1)

当您重命名表格对象时,静态引用这些表格可能会变得无效。所以我更喜欢使用交换分区。

交换分区方法的另一个好处是表A和表B可以有不同的授权:A是目标表,其中读取授权给最终用户,B - 只是应用程序的中间表访问。

它们也可能有不同的索引--B根本不需要索引。

表A可以存储所有历史数据(在分区中),B只保存当前生成的中间数据(未分区)。

答案 1 :(得分:0)

从概念上讲,它们是相同的。仅修改元数据。 但是通过使用交换分区。 1.您可以选择收集分区的统计信息。(与完整表格相比较小的子集) 2.旧数据的存档变得容易。 (例如,您可以存档超过3年的分区)

您可以在asktom上查看以下链接以获取更多信息。

https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1238800184155,%7Bpartitions%7D

答案 2 :(得分:0)

我认为您必须意识到表是一个对象,其中包含一组固有的逻辑元数据(名称,授权等)与数据对象(以及数据对象的元数据,如行数和其他统计数据)。

重命名表时,您可能会修改有关该表名字符串所解析的对象的所有内容 - 所有表元数据,数据对象及其元数据 - 这对系统的其余部分有重要影响。您现在指向另一个对象。

交换分区时,您正在更改与表对象关联的数据对象。这固有地对系统的其余部分影响较小,因为表的元数据保持不变,并且您仍然指向同一个逻辑对象。

出于这个原因,我更喜欢将分区交换重命名为表格。

P.S。使用这个比喻,您可能还会认为视图对象在逻辑上与表对象几乎相同,因为它们都具有相似的逻辑元数据。当然,视图没有数据对象,而是有额外的元数据来定义其底层关系。

物化视图也类似于表格,具有额外的元数据(类似于视图),并具有用于刷新目的的额外元数据。

创建延迟段的表是尚未创建数据对象的表对象。