从单个临时表填充星型模式的最佳方法是什么? dataload的行数为数百万,而star-schema是一个包含10个关联维度表的事实表。
场景1。首先对维度进行顺序插入,然后在事实表中进行大插入,然后使用更新的维度表加入登台表。我最担心的是由于大量数据导致并发插入维度/事实表,可能会发生锁定。
场景2。将数据加载拆分为较小的批次(10k行)并循环遍历整个登台表并以与 Scenarion 1中所述相同的方式插入批次。我在这里看到的问题是通过一个带有游标的大表循环。另外,如果其中一个批次无法插入数据,我需要回滚以前完成的所有插入的更改。
场景3。编写一个大的 INSERT ALL 语句,并在插入的整个持续时间内锁定星型模式。此外,对于锁定问题,我将有一个复杂的插入语句,必须保存插入语句的所有业务逻辑(调试和维护的噩梦)
答案 0 :(得分:1)
您可以在11g第2版(!)
中尝试DBMS_PARALLEL_EXECUTEhttp://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_parallel_ex.htm#ARPLS233
可以很好地分离较小块的大表,它可以让您轻松定义并行度等级。不要在处理块时使用并行提示或插入追加。
您可以毫无问题地加载维度表的假设似乎让我过于乐观。根据我的经验,您必须满足以下情况:尺寸数据的所有信息在加载时都不是有效的。