ORA-02049:超时:分布式事务在多环境中等待锁

时间:2018-10-31 16:53:15

标签: java oracle jdbc dblink

我有两个DB,其中我使用DB链接从Db1连接到DB2。 我正在使用JDBC,C3Po jar,oracle 11g。这是每天运行的批处理作业。

在成功运行的第一次运行中,在merge命令期间插入了约40万条记录,而在第二次运行(其日常工作)期间,我们面临问题。我猜问题是因为合并查询?合并有条件,如果存在则更新,否则插入。它很有可能会重新运行400k,并且大多数情况下都相同(目前),那么查找和更新/插入是否会导致此问题?

这就是我的逻辑样子

method(){
1.select query where DBlink involved, contains Db1 and Db2 tables
2.iterate the result and using batch updates 
     save (using MERGE) the result from step 1 to a table which is not used in step 1 query.
     we are dealing with over 100k records here.
3.  stmt.executeBatch();//This is where the sql exception is occurring
            closeResultSet(rs);
            clearBatch(stmt);
            closePreparedStatement(stmt);
            closePreparedStatement(pstmt);//select statement
}

我的代码中没有关闭DBlink。上面的逻辑将在8个(更大或更少)线程上并行运行,每个线程具有与db自己的连接的不同输入。 这是我的想法和疑问

  • 我认为每个线程都会创建一个DBlink
  • 我是否需要按照此链接的建议增加共享民意调查的大小 here
  • 如果是由于Dblink造成的,为什么我在遇到异常时 不使用Dblink的executeBatch()?
  • 我认为关闭DBlink对我而言不起作用。由于这些 在并行运行时,它们通常会同时到达代码 时间,我是否需要更改配置以具有更多Dblink?

0 个答案:

没有答案