2009-06-23 99 views
0

我有一个中间大小的查询,其中500.000个寄存器通过DBLink从Oracle到DB2系统。此查询是否可以阻止DB2表,以便它可以更新,直到我关闭DBLink或直到完成查询(插入选择到Oracle表中)的作业为止从Oracle到DB2的查询是否可以通过dblink阻止DB2表?

+0

你的意思是‘可以更新’或‘无法更新’? – tuinstoel 2009-06-23 18:21:03

+0

我希望DB2表不被阻挡,使得它可以在我完成更新我的作业(插入选择在oracle表中) – Telcontar 2009-06-24 07:25:23

回答

0

似乎可以通过Oracle dblinks选择阻塞表,因为将DBLINK定义为READ UNCOMMITED是不可能的,但是可以使用支持该功能的另一个DB系统(如SQLServer)来解决问题。这是最后的职位在这个论坛有什么说:

Forum

“有没有办法来设置或愚弄甲骨文与一个未提交选择在DB_LINK

从外部数据库中选择数据,即使读

我们为解决这个问题所做的一切就是绕过来自oracle的odbc驱动程序,一起进展,因为在DB_LINK上选择时,进度端的任何锁定列都被轰炸了,即使我们设置了只读事务处理

我们改用SQLServer作为ORACLE和Prog之间的缓冲区RESS。使用SQLServer,您可以将隔离级别设置为未提交读取。所以我们通过SQLServer Linked Server创建了进度表的SQLServer视图,然后从DB_Link中的这些视图中选择从oracle到SQLServer。

这似乎是工作的罚款”

0

DB2引擎会将DBLink视为执行选择语句的远程应用程序。如果该应用程序使用游标稳定性(CS)或类似合理的隔离级别,则DB2数据库不应该锁定任何行很长时间。最多可能会有一系列非常短的行级锁,因为来自DBLink的游标会遍历DB2查询的结果集。如果DBLink没有改变DB2方面的内容,那么在DB2中不应该有任何重大的锁定,所以其他应用程序应该能够连接到DB2来执行更新。如果我误解了你的问题,请告诉我,我会澄清我的答案。