【问题标题】:Difference between table renaming and exchange partition表重命名和交换分区的区别
【发布时间】:2016-11-15 16:11:11
【问题描述】:

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

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

【问题讨论】:

  • @George 是否可以在目标表上有两个分区 P1 和 P2,ETL 进程将数据加载到目标表的 P1 分区,然后使用交换分区我们可以将分区 P2 与分区 P1 交换。 P1 将用于 ETL,P2 将用于报告...这种设计是否可以使用 Exchange 分区机制??

标签: sql oracle etl database-partitioning


【解决方案1】:

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

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

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

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

【讨论】:

  • 我同意,如果我有分区选项我更喜欢交换分区,即使分区表只有一个分区。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    我认为您必须了解表是一个对象,它具有一组固有的逻辑元数据(名称、授权等)与数据对象(以及数据对象的元数据,例如行数和其他统计数据)。

    重命名表时,您可能会修改该表名字符串解析为的对象的所有内容——所有表元数据、数据对象及其元数据——这对系统的其余部分具有重要意义.您现在指向不同的对象。

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

    出于这个原因,我更喜欢分区交换而不是表重命名。

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

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

    具有延迟创建段的表是尚未为其创建数据对象的表对象。

    等等

    【讨论】:

      猜你喜欢
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 2020-09-10
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      相关资源
      最近更新 更多