【 使用环境 】测试环境
【 OB 数据库-单机模式-租户为oracle 】
【 使用版本 】4.2.1.3
【问题描述】业务库对象1.4万,表超过8000+,另还有视图、序列、索引、分区表等其他对象。我们自己开发了一个脚本升级组件,基于原Oracle生成一套标准的结构,升级组件读这个结构再将转换成OB的语法并在OB上执行。因对象多我们采用了java线程池按对象进行并发(如表间并发,视图间的并发等)来提高执行效率,每个线程负责一个对象的全部DDL的执行,数据库连接采用了druid来管理数据库的连接。
(此方式我们验证过其他数据库:如oracle、达梦、gauss均正常执行。)
但执行一小段时间后,数据库陆续出现connetion time out错误。信息如下:
java.sql.SQLNonTransientConnectionException: (conn=3221688232) Connection timed out
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:122)
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:202)
at com.oceanbase.jdbc.OceanBaseStatement.executeExceptionEpilogue(OceanBaseStatement.java:320)
at com.oceanbase.jdbc.OceanBaseStatement.executeInternal(OceanBaseStatement.java:494)
at com.oceanbase.jdbc.OceanBaseStatement.executeUpdate(OceanBaseStatement.java:821)
at com.oceanbase.jdbc.OceanBaseStatement.executeUpdate(OceanBaseStatement.java:798)
at com.alibaba.druid.filter.FilterChainImpl.statement_executeUpdate(FilterChainImpl.java:2881)
at com.alibaba.druid.filter.FilterAdapter.statement_executeUpdate(FilterAdapter.java:2518)
at com.alibaba.druid.filter.FilterEventAdapter.statement_executeUpdate(FilterEventAdapter.java:321)
at com.alibaba.druid.filter.FilterChainImpl.statement_executeUpdate(FilterChainImpl.java:2879)
at com.alibaba.druid.filter.FilterAdapter.statement_executeUpdate(FilterAdapter.java:2518)
at com.alibaba.druid.filter.FilterEventAdapter.statement_executeUpdate(FilterEventAdapter.java:321)
at com.alibaba.druid.filter.FilterChainImpl.statement_executeUpdate(FilterChainImpl.java:2879)
at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeUpdate(StatementProxyImpl.java:231)
at com.alibaba.druid.pool.DruidPooledStatement.executeUpdate(DruidPooledStatement.java:328)
我们反复调整timeout参数及在url中配置参数如connectTimeOut,SocketTimeOut等参数都无效。
1.OB内部DDL执行是否是串型化执行?
2.如果要实现我上述的诉求有没有其他办法或实现方式?