【发布时间】:2013-04-16 00:56:14
【问题描述】:
我正致力于在 Oracle 中编写一个存储过程,该过程将刷新包含非规范化数据的表。程序的概要是:
CREATE OR REPLACE PROCEDURE loadDenormalizedTable IS
BEGIN
DELETE FROM denormalizedTable;
INSERT INTO
denormalizedTable
(
data
)
SELECT DISTINCT
data
FROM
normalizedTables;
END;
/
我希望所有这些都发生在事务中,以便表中始终存在数据。现在删除运行并且表是空的几分钟,直到插入完成。在不停机的情况下处理这种类型的表刷新的最佳方法是什么?
【问题讨论】:
-
在您提交之前,其他会话不会看到删除,您不应该在过程中执行此操作。所以你会看到空桌子,但没有其他人会。这是您真实程序的显着缩减版本吗?还有……你在重新发明materialized views吗?
-
谢谢!会话问题使我绊倒了。我现在看到在刷新表时数据仍然对应用程序可见。它被削减了,因为我删除了所有实际的表和列,只是放入了占位符。不过结构是一样的。是的,这是对物化视图的重新发明,数据架构师不喜欢 MV。
-
垫子视图有什么问题?它可以以原子方式或非原子方式刷新。并且一旦创建,所有这些工作都可以简化为单个刷新语句。我不会说我对你的数据“架构师”的看法
-
我应该说他们不喜欢“这个项目”的 MV。我们确实有 MV,所以这不是全面反对。我不太了解决定以何种方式评论这个特定问题的决定的原因,但我会说,总的来说,这些人在他们所做的事情上都很出色。