2

从单个临时表填充星型模式的最佳方法是什么。数据负载有数百万行,星型模式是一个包含 10 个关联维度表的事实表。

场景 1.首先对维度进行顺序插入,然后对事实表进行大插入,在该事实表中,我将临时表与更新的维度表连接起来。我在这里最大的担忧是由于大量数据导致并发插入维度/事实表而可能发生的锁定。

场景 2.将数据加载拆分为更小的批次(10k 行)并循环遍历整个临时表并以与场景 1中所述相同的方式插入批次。我在这里看到的问题是循环遍历带有游标的大表. 另外,如果其中一个批次无法插入数据,我需要回滚之前完成的所有插入的更改。

场景 3.编写一个大的INSERT ALL语句并在整个插入期间锁定星型模式。此外,对于锁定问题,我将有一个复杂的插入语句,它必须保存插入语句的所有业务逻辑(调试和维护的噩梦)

4

1 回答 1

1

您可以在 11g 第 2 版中尝试 DBMS_PARALLEL_EXECUTE(!)

http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_parallel_ex.htm#ARPLS233

可以很好地将大表分成较小的块,它可以让您非常轻松地定义并行度。不过,不要在块的处理中使用并行提示或插入追加。

您认为可以毫无问题地加载维度表的假设似乎让我过于乐观。根据我的经验,您必须满足并非所有维度数据信息在加载时都有效的情况。

于 2013-04-03T12:07:01.440 回答