Oracle中ora_rowscn的替代品

时间:2019-06-14 16:10:56

标签: sql oracle

我们有一个第三方Oracle数据库,该数据库会定期查询以将某些数据表复制到Microsoft数据库中。我们关心Oracle数据的更改,因此需要使其与我们的副本保持同步。

要复制的代码取决于ORA_ROWSCN来确定哪些行已更改,因此我们不会在每次同步时复制表的全部内容。它将当前的MAX(ORA_ROWSCN)与上次同步时找到的MAX(ORA_ROWSCN)进行比较。

但是,用于确定MAX(ORA_ROWSCN)的查询现在花费的时间太长。这是第三方数据库,我们无法打开审核日志。

是否有合理的替代方法?

此外,我们在查询中看到Oracle超时以获取MAX(ORA_ROWSCN)是否可以做些帮助呢?我们将最大查询时间设置为4小时,但是oracle在大约25分钟后仍处于超时状态。

1 个答案:

答案 0 :(得分:0)

一个真正的变更数据捕获(CDC)工具,例如Oracle GoldenGate,可以根据您的预算(它不是免费的)和第三方在其系统上安装它的开放性来选择。 (您还需要将其安装在您的计算机上。)但是,如果您不时地拉一些表,这可能不是最佳选择。如果将数据从Oracle传输到Oracle,则可能使用快速刷新的物化视图,但是SQL Server的使用使事情变得有些棘手。一种自己开发的解决方案,可以使用源表上的触发器将插入/更新/删除的键记录到增量表中,但这是可能的-但前提是只有第三方允许在其系统上使用它。

为减少查询时间,您可以尝试使用/*+PARALLEL(N)*/提示,该提示使用N个并行进程来执行查询。但是,请注意,这种方法将消耗额外的资源,并且可能减慢Oracle系统的速度。您需要进行反复试验才能找到最佳的“ N”值,也就是DOP或“并行度”。选择初始DOP时要保持保守。

示例:

SELECT /*+PARALLEL(4)*/ MAX(ORA_ROWSCN) FROM third_party_table;

最后,找出导致超时的真正原因将很有用。 Oracle中的某种东西,例如用户个人资料或资源管理器计划?防火墙?负载均衡器?作为一种临时措施,如果没有其他原因,可以增加超时时间。