我们在不同的oracle服务器上有两个架构。我们计划将一个模式用作事务数据库,并使用其他模式进行报告。
由于事务数据库是任何用户生成数据的入口点,因此我们希望定期将此数据复制/发送到Reporting模式。我们考虑在报表数据库中创建事务数据库和物化视图中的物化视图日志。然后我们计划使用Db链接进行预定的快速刷新。
但是,DBA建议我们使用Data Pump,它将导出和导入整个架构。刷新需要在一天内完成一次。哪一个是性能和网络使用方面的最佳解决方案?
答案 0 :(得分:2)
这两种方法都有其优点和缺点。没有一般的答案。你必须进行基准测试。
你有两种可能性来完成这项工作。
第一种可能性是使用快速刷新功能。通过此功能,Oracle使用有效的增量机制更新每次更改的实例化视图。当每天只更改表的一小部分时,这可以节省大量数据。而且你的数据总是很新鲜。但是这种机制不适用于所有类型的表(例如某些连接和LOB列的问题)。当一个数据库发生故障时,物化视图将不同步,必须重建。最后:增量更改的簿记给源表上的所有写操作带来了额外的压力。
第二种可能性是使用完全刷新,例如使用物化视图组(DBMS_REFRESH包)。这将始终触发完全刷新,但不会为记账保留额外的写入压力。
在这两种情况下,两个数据库现在紧密耦合:一个数据库上的更改也会触发另一个数据库的更改。并且您无法随意移动数据库:它们始终需要低延迟的快速连接,并且不会干扰防火墙。从长远来看,数据库必须同时启动,否则您可能会失去物化视图。
作为替代方案,您可以始终使用某种ETL工具,它从一个数据库中提取数据,根据某些给定的规则转换数据,并将结果加载到另一个数据库中。您可以(错误地)使用oracle Datapump执行此任务,或使用任何第三方工具。当必须更改源或目标的数据库模式时,ETL工具可以缓存数据,使用任何类型的WAN连接传输数据并对其进行转换。通常ETL工具也提供某种delta机制。
使用ETL工具,您可以更灵活,但是您依赖于数据库之外的组件,必须对其进行维护。