如果oracle数据泵实用程序可以刷新数据,为什么我们需要oracle中的物化视图?

如果oracle数据泵实用程序可以刷新数据,为什么我们需要oracle中的物化视图?,oracle,Oracle,我们在不同的oracle服务器中有两个模式。我们计划使用一个模式作为事务数据库,另一个模式用于报告 由于事务数据库是任何用户生成的数据的入口点,我们希望定期将这些数据复制/发送到报告模式。我们考虑在事务数据库中创建物化视图日志,在报表数据库中创建物化视图。然后,我们计划使用Db链接执行计划的快速刷新 然而,一位DBA建议我们使用数据泵,它将导出和导入整个模式。刷新需要每天进行一次。在性能和网络使用方面,哪一个是最佳解决方案?总结 这两种方法各有利弊。没有一般性的答案。你必须进行基准测试 细节 基

我们在不同的oracle服务器中有两个模式。我们计划使用一个模式作为事务数据库,另一个模式用于报告

由于事务数据库是任何用户生成的数据的入口点,我们希望定期将这些数据复制/发送到报告模式。我们考虑在事务数据库中创建物化视图日志,在报表数据库中创建物化视图。然后,我们计划使用Db链接执行计划的快速刷新

然而,一位DBA建议我们使用数据泵,它将导出和导入整个模式。刷新需要每天进行一次。在性能和网络使用方面,哪一个是最佳解决方案?

总结 这两种方法各有利弊。没有一般性的答案。你必须进行基准测试

细节 基于数据库链接的物化视图 你有两种可能使这项工作

第一种可能是使用快速刷新功能。通过此功能,Oracle使用高效的增量机制更新每次更改的物化视图。当每天只更改表的一小部分时,这可以节省大量数据量。你的数据总是新鲜的。但这种机制并不适用于所有类型的表(例如,某些联接和LOB列的问题)。当一个数据库关闭时,物化视图将不同步,必须重建。最后:delta更改的簿记对源表上的所有写操作施加了额外的压力

第二种可能性是使用完全刷新,例如使用物化视图组(DBMS_刷新包)。这将始终触发完全刷新,但不会对簿记造成额外的写入压力

在这两种情况下,两个数据库现在紧密耦合:一个数据库上的更改也将触发另一个数据库上的更改。而且您不能随意移动数据库:它们总是需要低延迟的快速连接,并且不会干扰防火墙。从长远来看,数据库必须同时启动,否则可能会丢失物化视图

ETL工具 作为替代方案,您可以始终使用某种ETL工具,从一个数据库中提取数据,根据某些给定规则转换数据,并将结果加载到另一个数据库中。您可以(错误地)使用oracle Datapump执行此任务,或者使用任何第三方工具。当源或目标的数据库模式必须更改时,ETL工具可以缓存数据、使用任何类型的WAN连接传输数据并对其进行转换。通常,ETL工具还提供某种增量机制


有了ETL工具,您会更加灵活,但您依赖于数据库之外的组件,必须对其进行维护。

我不认为这是高效的。。。更新是根据MV日志执行的删除+插入操作,当数据量较大时,可能会导致问题。@Ben我的意思是“从某种意义上讲,它是有效的,因为它只涉及目标表中已在源表中更改的行。您完全正确,它将替换目标表中的整行。我不确定有线协议的效率。Oracle具有只在后续行之间传输增量的功能。我不知道这个功能是否也用于通过数据库链接刷新的物化视图。你能给我一些关于以下句子的见解吗?谢谢(错误-)为此使用oracle数据泵task@RajkumarVasan数据泵是一个备份工具,而不是ETL工具。使用数据泵仍然会导致紧密耦合:数据泵无法转换数据,因此无法适应模式更改。而且它只适用于Oracle,因此两个数据库必须使用相同的技术。您不能简单地将一个数据库切换到Postgres、MS SQL Server或任何类型的NoSQL数据库。数据泵没有delta机制。