注册
模拟jdbc网络通信异常场景
专栏/技术分享/ 文章详情 /

模拟jdbc网络通信异常场景

wuran 2025/11/21 172 0 0
摘要

频繁有现场反馈,应用偶发性报网络通信异常、连接已断开,或服务器模式不匹配,无法稳定复现。
DBA一般会先检查磁盘空间是否充足、检查用户是否添加超时限制、检查驱动和数据库版本是否匹配、检查数据库状态、检查历史日志中是否存在异常,比如server日志中有io超时相关告警。检查服务名配置是否准确,比如主备集群一般推荐配置login_mode=1。以上对DBA而言是基本操作,不再赘述。如果以上均无异常,则需排查是否应用服务器和数据库服务器网络通信存在波动,或sql执行超时导致的报错。

一、搭建测试环境

1、复现环境

1.jpg

2、建表和插入测试数据

create table dm1(id int,name varchar);
create table dm2(id int,name varchar);
begin
  for i in 1..1000000 loop
    insert into dm1 values(i,DBMS_RANDOM.RANDOM());
     if (i%10000 = 0)
      then commit;
     end if;
   end loop;
end;
begin
  for i in 1..1000 loop
    insert into dm2 values(i,DBMS_RANDOM.RANDOM());
   end loop;
   commit;
end;

3、jdbc复现demo

package test;

import java.sql.*;
import java.text.SimpleDateFormat;

public class SynchronizedFetch {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        String url = "jdbc:dm://192.168.59.128:5236?schema=ODS_DC&logLevel=all&logDir=C:\\dmdbms\\log&socketTimeout=60000";
        String driverName = "dm.jdbc.driver.DmDriver";
        String username = "ODS_DC";
        String password = "Dameng123";
        String sql = "select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;";
        //也可以通过sleep方式模拟,更方便控制sql执行时间        
        //String sql="sleep(80)";
        Class.forName(driverName);
        Connection connection = DriverManager.getConnection(url, username, password);
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        System.out.println("执行开始时间: " +
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new java.util.Date()));
        ResultSet resultSet = preparedStatement.executeQuery();
        System.out.println("执行结束时间: " +
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new java.util.Date()));

        while (resultSet.next()) {
            resultSet.getObject(1);
        }

        System.out.println("获取数据结束时间: " +
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new java.util.Date()));

        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}

二、模拟报错

2.jpg

1、sql执行超时

socketTimeout=60000,sql执行超过1分钟触发报错。

1)应用日志

Exception in thread "main" dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.a(SourceFile:283)
	at dm.jdbc.a.a.a(SourceFile:1250)
	at dm.jdbc.a.a.b(SourceFile:1077)
	at dm.jdbc.a.a.a(SourceFile:861)
	at dm.jdbc.driver.DmdbPreparedStatement.executeInner(SourceFile:443)
	at dm.jdbc.driver.DmdbPreparedStatement.do_executeQuery(SourceFile:531)
	at dm.jdbc.filter.BaseFilter.PreparedStatement_executeQuery(SourceFile:4681)
	at dm.jdbc.filter.log.LogFilter.PreparedStatement_executeQuery(SourceFile:8119)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1397)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1)
	at dm.jdbc.driver.DmdbPreparedStatement.executeQuery(SourceFile:1405)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:26)
Caused by: java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
	at java.net.SocketInputStream.read(SocketInputStream.java:170)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at dm.jdbc.util.buffer.ByteArrayNode.load(SourceFile:129)
	at dm.jdbc.util.buffer.Buffer.load(SourceFile:365)
	at dm.jdbc.a.c.a(SourceFile:208)
	at dm.jdbc.a.a.e(SourceFile:399)
	at dm.jdbc.a.a.a(SourceFile:273)
	... 11 more

2)驱动日志

[DEBUG - 2025-11-06 20:02:04.303] tid:1 - [main] conn-1 try connect loop 0
[DEBUG - 2025-11-06 20:02:05.526] tid:1 - [main] { conn-1 } access();  CMD_STARTUP
[DEBUG - 2025-11-06 20:02:06.388] tid:1 - [main] { conn-1 } access();  CMD_LOGIN
[DEBUG - 2025-11-06 20:02:06.411] tid:1 - [main] try connect success [192.168.59.128:5236 (NORMAL, OPEN, DSC CONTROL), sessions: 0]
[INFO  - 2025-11-06 20:02:06.418] tid:1 - [main] { DmDriver@5a10411 } connect(DmProperties): conn-1, sessionID-0x7fee6c09b798(140661991520152);  [PARAMS]: {schema=ODS_DC, lastloginip=, svrstat=4, language=CN, globalserverseries=7, lastlogintime=, svrmode=0, dsccontrol=true, clientuser=ODS_DC, localtimezone=480, host=192.168.59.128, driverversion=8.1.4.169, logdir=C:\dmdbms\log, loginwarningid=0, epgroup=192.168.59.128:5236=([192.168.59.128:5236 (NORMAL, OPEN, DSC CONTROL), sessions: 0]), lifetimeremainder=-1, gracetimeremainder=0, failedattempts=0, serverversion=8.1.4.116, clienthostname=192.168.59.128, url=jdbc:dm://192.168.59.128:5236?schema=ODS_DC&logLevel=all&logDir=C:\dmdbms\log&socketTimeout=60000, applicationname=, sockettimeout=60000, instancename=DMCSDB, dbname=DAMENG, port=5236, loglevel=all, guid=080E82C9080E82C94853CDDE7841ABD7, user=ODS_DC}; [USED TIME]: 0.0134ms;
[DEBUG - 2025-11-06 20:02:06.428] tid:1 - [main] { conn-1 } access();  CMD_STMT_ALLOCATE
[DEBUG - 2025-11-06 20:02:06.430] tid:1 - [main] { conn-1 } access();  CMD_PREPARE
[SQL   - 2025-11-06 20:02:06.432] tid:1 - [main] { conn-1 } prepareStatement(String): pstmt-1, handle-0, sessionID-0x7fee6c09b798(140661991520152);  [PARAMS]: "select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;"; [USED TIME]: 13.8301ms;
[DEBUG - 2025-11-06 20:02:06.432] tid:1 - [main] { conn-1 } access();  CMD_EXECUTE2
[ERROR - 2025-11-06 20:03:06.448] tid:1 - [main] { conn-1, pstmt-1 } executeQuery();  [USED TIME]: 60014.9384ms; [EXEC_ID]: 0;
dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.a(SourceFile:283)
	at dm.jdbc.a.a.a(SourceFile:1250)
	at dm.jdbc.a.a.b(SourceFile:1077)
	at dm.jdbc.a.a.a(SourceFile:861)
	at dm.jdbc.driver.DmdbPreparedStatement.executeInner(SourceFile:443)
	at dm.jdbc.driver.DmdbPreparedStatement.do_executeQuery(SourceFile:531)
	at dm.jdbc.filter.BaseFilter.PreparedStatement_executeQuery(SourceFile:4681)
	at dm.jdbc.filter.log.LogFilter.PreparedStatement_executeQuery(SourceFile:8119)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1397)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1)
	at dm.jdbc.driver.DmdbPreparedStatement.executeQuery(SourceFile:1405)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:26)
Caused by: java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
	at java.net.SocketInputStream.read(SocketInputStream.java:170)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at dm.jdbc.util.buffer.ByteArrayNode.load(SourceFile:129)
	at dm.jdbc.util.buffer.Buffer.load(SourceFile:365)
	at dm.jdbc.a.c.a(SourceFile:208)
	at dm.jdbc.a.a.e(SourceFile:399)
	at dm.jdbc.a.a.a(SourceFile:273)
	... 11 more

3)sqllog日志

2025-11-06 20:02:07.928 (EP[0] sess:0x7fee6c09b798 thrd:2983 user:ODS_DC trxid:0 stmt:0x7fee6c0bc5c0 appname: ip:::ffff:192.168.59.1) GET SQL ALL PLN:  select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;

1   #NSET2: [9223372036854775808, 1, 56]
2     #PRJT2: [9223372036854775808, 1, 56]; exp_num(1), is_atom(FALSE)
3       #AAGR2: [9223372036854775808, 1, 56]; grp_num(0), sfun_num(1), distinct_flag[0]; slave_empty(0)
4         #NEST LOOP LEFT JOIN2: [9223372036854775808, 2500000000000, 56]; join condition(C.ID > 1) partition_keys_num(0) ret_null(0)
5           #PRJT2: [26860853974, 50000000, 56]; exp_num(1), is_atom(FALSE)
6             #NEST LOOP LEFT JOIN2: [26860853974, 50000000, 56];  partition_keys_num(0) ret_null(0)
7               #CSCN2: [105, 1000000, 4]; INDEX33557560(DM1 as A); btr_scan(1)
8               #SLCT2: [1, 50, 52]; B.ID > 1
9                 #CSCN2: [1, 1000, 52]; INDEX33557561(DM2 as B); btr_scan(1)
10          #CSCN2: [104, 1000000, 0]; INDEX33557560(DM1 as D); btr_scan(1)^M
2025-11-06 20:02:07.928 (EP[0] sess:0x7fee6c09b798 thrd:2983 user:ODS_DC trxid:264563 stmt:NULL appname: ip:::ffff:192.168.59.1) TRX: START^M
2025-11-06 20:02:07.935 (EP[0] sess:0x7fee6c09b798 thrd:2983 user:ODS_DC trxid:264563 stmt:0x7fee6c0bc5c0 appname: ip:::ffff:192.168.59.1) DLCK used time:18(us)^M
2025-11-06 20:03:08.022 (EP[0] sess:0x7fee6c09b798 thrd:2983 user:ODS_DC trxid:264563 stmt:NULL appname: ip:::ffff:192.168.59.1) TRX: ROLLBACK^M
2025-11-06 20:03:08.022 (EP[0] sess:0x7fee6c09b798 thrd:2983 user:ODS_DC trxid:0 stmt:0x7fee6c0bc5c0 appname: ip:::ffff:192.168.59.1) [ERR(-6007)]: select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1; EXECTIME: 60091(ms) ROWCOUNT: 0(rows) EXEC_ID: 2200.^M
2025-11-06 20:03:08.022 (EP[0] sess:0x7fee6c09b798 thrd:2983 user:ODS_DC trxid:0 stmt:NULL appname: ip:::ffff:192.168.59.1) [LGN] FREE SESSION^M
2025-11-06 20:03:12.229 (EP[0] sess:0x7fee701ab608 thrd:2959 user:SYSDBA trxid:264562 stmt:0x7fee701cc760 appname:manager.exe ip:::ffff:192.168.59.1) [ORA]: sp_set_para_value(1,'SVR_LOG',0);^M
2025-11-06 20:03:12.231 (EP[0] sess:0x7fee701ab608 thrd:2959 user:SYSDBA trxid:264562 stmt:0x7fee701cc760 appname:manager.exe ip:::ffff:192.168.59.1) [CAL] sp_set_para_value(1,'SVR_LOG',0);^M
2025-11-06 20:03:12.232 (EP[0] sess:0x7fee701ab608 thrd:2959 user:SYSDBA trxid:264562 stmt:0x7fee701cc760 appname:manager.exe ip:::ffff:192.168.59.1) [ORA]: sp_set_para_value(1,'SVR_LOG',0);^M

2、Sql执行过程中和数据库通信断开(sql执行耗时超过socketTimeout限制)

连接串:
String url = “jdbc:dm://192.168.59.128:5236?schema=ODS_DC&logLevel=all&logDir=C:\dmdbms\log&socketTimeout=600000&connectTimeout=20000&sessionTimeout=12000”;
断开本地应用和本地虚拟机的网络:
3.jpg

1)应用日志

Exception in thread "main" dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.a(SourceFile:283)
	at dm.jdbc.a.a.a(SourceFile:1250)
	at dm.jdbc.a.a.b(SourceFile:1077)
	at dm.jdbc.a.a.a(SourceFile:861)
	at dm.jdbc.driver.DmdbPreparedStatement.executeInner(SourceFile:443)
	at dm.jdbc.driver.DmdbPreparedStatement.do_executeQuery(SourceFile:531)
	at dm.jdbc.filter.BaseFilter.PreparedStatement_executeQuery(SourceFile:4681)
	at dm.jdbc.filter.log.LogFilter.PreparedStatement_executeQuery(SourceFile:8119)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1397)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1)
	at dm.jdbc.driver.DmdbPreparedStatement.executeQuery(SourceFile:1405)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:26)
Caused by: java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
	at java.net.SocketInputStream.read(SocketInputStream.java:170)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at dm.jdbc.util.buffer.ByteArrayNode.load(SourceFile:129)
	at dm.jdbc.util.buffer.Buffer.load(SourceFile:365)
	at dm.jdbc.a.c.a(SourceFile:208)
	at dm.jdbc.a.a.e(SourceFile:399)
	at dm.jdbc.a.a.a(SourceFile:273)
	... 11 more

2)驱动日志

[DEBUG - 2025-11-06 20:26:44.488] tid:1 - [main] conn-1 try connect loop 0
[DEBUG - 2025-11-06 20:26:45.771] tid:1 - [main] { conn-1 } access();  CMD_STARTUP
[DEBUG - 2025-11-06 20:26:46.664] tid:1 - [main] { conn-1 } access();  CMD_LOGIN
[DEBUG - 2025-11-06 20:26:46.693] tid:1 - [main] try connect success [192.168.59.128:5236 (NORMAL, OPEN, DSC CONTROL), sessions: 0]
[INFO  - 2025-11-06 20:26:46.705] tid:1 - [main] { DmDriver@5a10411 } connect(DmProperties): conn-1, sessionID-0x7fee7c0889a8(140662259878312);  [PARAMS]: {schema=ODS_DC, lastloginip=, svrstat=4, language=CN, globalserverseries=7, lastlogintime=, svrmode=0, dsccontrol=true, sessiontimeout=12000, clientuser=ODS_DC, localtimezone=480, host=192.168.59.128, driverversion=8.1.4.169, logdir=C:\dmdbms\log, loginwarningid=0, connecttimeout=20000, epgroup=192.168.59.128:5236=([192.168.59.128:5236 (NORMAL, OPEN, DSC CONTROL), sessions: 0]), lifetimeremainder=-1, gracetimeremainder=0, failedattempts=0, serverversion=8.1.4.116, clienthostname=192.168.59.128, url=jdbc:dm://192.168.59.128:5236?schema=ODS_DC&logLevel=all&logDir=C:\dmdbms\log&socketTimeout=600000&connectTimeout=20000&sessionTimeout=12000, applicationname=, sockettimeout=600000, instancename=DMCSDB, dbname=DAMENG, port=5236, loglevel=all, guid=080E82C9080E82C94853CDDE7841ABD7, user=ODS_DC}; [USED TIME]: 0.0319ms;
[DEBUG - 2025-11-06 20:26:46.718] tid:1 - [main] { conn-1 } access();  CMD_STMT_ALLOCATE
[DEBUG - 2025-11-06 20:26:46.720] tid:1 - [main] { conn-1 } access();  CMD_PREPARE
[SQL   - 2025-11-06 20:26:46.722] tid:1 - [main] { conn-1 } prepareStatement(String): pstmt-1, handle-0, sessionID-0x7fee7c0889a8(140662259878312);  [PARAMS]: "select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;"; [USED TIME]: 16.7114ms;
[DEBUG - 2025-11-06 20:26:46.723] tid:1 - [main] { conn-1 } access();  CMD_EXECUTE2
[ERROR - 2025-11-06 20:36:46.732] tid:1 - [main] { conn-1, pstmt-1 } executeQuery();  [USED TIME]: 600008.9727ms; [EXEC_ID]: 0;
dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.a(SourceFile:283)
	at dm.jdbc.a.a.a(SourceFile:1250)
	at dm.jdbc.a.a.b(SourceFile:1077)
	at dm.jdbc.a.a.a(SourceFile:861)
	at dm.jdbc.driver.DmdbPreparedStatement.executeInner(SourceFile:443)
	at dm.jdbc.driver.DmdbPreparedStatement.do_executeQuery(SourceFile:531)
	at dm.jdbc.filter.BaseFilter.PreparedStatement_executeQuery(SourceFile:4681)
	at dm.jdbc.filter.log.LogFilter.PreparedStatement_executeQuery(SourceFile:8119)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1397)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1)
	at dm.jdbc.driver.DmdbPreparedStatement.executeQuery(SourceFile:1405)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:26)
Caused by: java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
	at java.net.SocketInputStream.read(SocketInputStream.java:170)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at dm.jdbc.util.buffer.ByteArrayNode.load(SourceFile:129)
	at dm.jdbc.util.buffer.Buffer.load(SourceFile:365)
	at dm.jdbc.a.c.a(SourceFile:208)
	at dm.jdbc.a.a.e(SourceFile:399)
	at dm.jdbc.a.a.a(SourceFile:273)
	... 11 more

3)sqllog日志

2025-11-06 20:26:48.178 (EP[0] sess:0x7fee7c0889a8 thrd:3444 user:ODS_DC trxid:0 stmt:NULL appname: ip:::ffff:192.168.59.1) [LGN] LOGIN^M
2025-11-06 20:26:48.230 (EP[0] sess:0x7fee7c0889a8 thrd:3444 user:ODS_DC trxid:0 stmt:NULL appname: ip:::ffff:192.168.59.1) ALLOC STMT^M
2025-11-06 20:26:48.232 (EP[0] sess:0x7fee7c0889a8 thrd:3444 user:ODS_DC trxid:0 stmt:0x7fee7c0a97d0 appname: ip:::ffff:192.168.59.1) [ORA]: select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;^M
2025-11-06 20:26:48.232 (EP[0] sess:0x7fee7c0889a8 thrd:3444 user:ODS_DC trxid:0 stmt:0x7fee7c0a97d0 appname: ip:::ffff:192.168.59.1) GET SQL ALL PLN:  select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;

1   #NSET2: [9223372036854775808, 1, 56]
2     #PRJT2: [9223372036854775808, 1, 56]; exp_num(1), is_atom(FALSE)
3       #AAGR2: [9223372036854775808, 1, 56]; grp_num(0), sfun_num(1), distinct_flag[0]; slave_empty(0)
4         #NEST LOOP LEFT JOIN2: [9223372036854775808, 2500000000000, 56]; join condition(C.ID > 1) partition_keys_num(0) ret_null(0)
5           #PRJT2: [26860853974, 50000000, 56]; exp_num(1), is_atom(FALSE)
6             #NEST LOOP LEFT JOIN2: [26860853974, 50000000, 56];  partition_keys_num(0) ret_null(0)
7               #CSCN2: [105, 1000000, 4]; INDEX33557560(DM1 as A); btr_scan(1)
8               #SLCT2: [1, 50, 52]; B.ID > 1
9                 #CSCN2: [1, 1000, 52]; INDEX33557561(DM2 as B); btr_scan(1)
10          #CSCN2: [104, 1000000, 0]; INDEX33557560(DM1 as D); btr_scan(1)^M
2025-11-06 20:26:48.232 (EP[0] sess:0x7fee7c0889a8 thrd:3444 user:ODS_DC trxid:264728 stmt:NULL appname: ip:::ffff:192.168.59.1) TRX: START^M
2025-11-06 20:26:48.235 (EP[0] sess:0x7fee7c0889a8 thrd:3444 user:ODS_DC trxid:264728 stmt:0x7fee7c0a97d0 appname: ip:::ffff:192.168.59.1) DLCK used time:2(us)^M
2025-11-06 20:27:08.578 (EP[0] sess:0x7fee7c0889a8 thrd:3444 user:ODS_DC trxid:264728 stmt:NULL appname: ip:::ffff:192.168.59.1) TRX: ROLLBACK^M
2025-11-06 20:27:08.578 (EP[0] sess:0x7fee7c0889a8 thrd:3444 user:ODS_DC trxid:0 stmt:0x7fee7c0a97d0 appname: ip:::ffff:192.168.59.1) [ERR(-6007)]: select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1; EXECTIME: 20342(ms) ROWCOUNT: 0(rows) EXEC_ID: 2900.^M
2025-11-06 20:27:08.578 (EP[0] sess:0x7fee7c0889a8 thrd:3444 user:ODS_DC trxid:0 stmt:NULL appname: ip:::ffff:192.168.59.1) [LGN] FREE SESSION^M

3、Sql执行过程中和数据库通信断开(sql执行耗时未超过socketTimeout限制)

连接串:
String url = “jdbc:dm://192.168.59.128:5236?schema=ODS_DC&logLevel=all&logDir=C:\dmdbms\log&socketTimeout=600000&connectTimeout=20000&sessionTimeout=12000”;
demo中sql调整为:
select count(*) from (select top 699000000 a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id=d.id;–执行耗时45秒 495毫秒
断开本地应用和本地虚拟机的网络:
3.jpg

1)应用日志

Exception in thread "main" dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.a(SourceFile:283)
	at dm.jdbc.a.a.e(SourceFile:630)
	at dm.jdbc.driver.DmdbConnection.openConnection(SourceFile:862)
	at dm.jdbc.internal.conf.EP.connect(SourceFile:153)
	at dm.jdbc.internal.conf.EPGroup$EPSelector.select(SourceFile:574)
	at dm.jdbc.internal.conf.EPGroup.connect(SourceFile:380)
	at dm.jdbc.driver.DmDriver.do_connect(SourceFile:198)
	at dm.jdbc.filter.BaseFilter.Driver_connect(SourceFile:4571)
	at dm.jdbc.filter.log.LogFilter.Driver_connect(SourceFile:15438)
	at dm.jdbc.driver.DmDriver.connect(SourceFile:541)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:19)
Caused by: java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:209)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at dm.jdbc.util.buffer.ByteArrayNode.load(SourceFile:129)
	at dm.jdbc.util.buffer.Buffer.load(SourceFile:365)
	at dm.jdbc.a.c.a(SourceFile:208)
	at dm.jdbc.a.a.e(SourceFile:399)
	at dm.jdbc.a.a.a(SourceFile:273)
	... 12 more

2)驱动日志

[DEBUG - 2025-11-07 10:58:22.623] tid:1 - [main] conn-1 try connect loop 0
[DEBUG - 2025-11-07 10:58:24.178] tid:1 - [main] { conn-1 } access();  CMD_STARTUP
[ASSERT - 2025-11-07 10:58:44.317] tid:1 - [main] try connect fail [192.168.59.128:5236 (UNKNOW, UNKNOW), sessions: 0] 
dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.a(SourceFile:283)
	at dm.jdbc.a.a.e(SourceFile:630)
	at dm.jdbc.driver.DmdbConnection.openConnection(SourceFile:862)
	at dm.jdbc.internal.conf.EP.connect(SourceFile:153)
	at dm.jdbc.internal.conf.EPGroup$EPSelector.select(SourceFile:574)
	at dm.jdbc.internal.conf.EPGroup.connect(SourceFile:380)
	at dm.jdbc.driver.DmDriver.do_connect(SourceFile:198)
	at dm.jdbc.filter.BaseFilter.Driver_connect(SourceFile:4571)
	at dm.jdbc.filter.log.LogFilter.Driver_connect(SourceFile:15438)
	at dm.jdbc.driver.DmDriver.connect(SourceFile:541)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:19)
Caused by: java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:209)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at dm.jdbc.util.buffer.ByteArrayNode.load(SourceFile:129)
	at dm.jdbc.util.buffer.Buffer.load(SourceFile:365)
	at dm.jdbc.a.c.a(SourceFile:208)
	at dm.jdbc.a.a.e(SourceFile:399)
	at dm.jdbc.a.a.a(SourceFile:273)
	... 12 more
[ERROR - 2025-11-07 10:58:45.333] tid:1 - [main] { DmDriver@5a10411 } connect(DmProperties): null;  [PARAMS]: {schema=ODS_DC, connecttimeout=20000, epgroup=192.168.59.128:5236=([192.168.59.128:5236 (UNKNOW, UNKNOW), sessions: 0]), language=CN, url=jdbc:dm://192.168.59.128:5236?schema=ODS_DC&logLevel=all&logDir=C:\dmdbms\log&socketTimeout=600000&connectTimeout=20000&sessionTimeout=12000, sockettimeout=600000, sessiontimeout=12000, localtimezone=480, port=5236, loglevel=all, host=192.168.59.128, driverversion=8.1.4.169, user=ODS_DC, logdir=C:\dmdbms\log}; [USED TIME]: 0.0109ms;
dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.a(SourceFile:283)
	at dm.jdbc.a.a.e(SourceFile:630)
	at dm.jdbc.driver.DmdbConnection.openConnection(SourceFile:862)
	at dm.jdbc.internal.conf.EP.connect(SourceFile:153)
	at dm.jdbc.internal.conf.EPGroup$EPSelector.select(SourceFile:574)
	at dm.jdbc.internal.conf.EPGroup.connect(SourceFile:380)
	at dm.jdbc.driver.DmDriver.do_connect(SourceFile:198)
	at dm.jdbc.filter.BaseFilter.Driver_connect(SourceFile:4571)
	at dm.jdbc.filter.log.LogFilter.Driver_connect(SourceFile:15438)
	at dm.jdbc.driver.DmDriver.connect(SourceFile:541)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:19)
Caused by: java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:209)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at dm.jdbc.util.buffer.ByteArrayNode.load(SourceFile:129)
	at dm.jdbc.util.buffer.Buffer.load(SourceFile:365)
	at dm.jdbc.a.c.a(SourceFile:208)
	at dm.jdbc.a.a.e(SourceFile:399)
	at dm.jdbc.a.a.a(SourceFile:273)
	... 12 more

3)sqllog日志

2025-11-07 10:57:45.410 (EP[0] sess:0x7f6b84245b88 thrd:1516 user:SYSDBA trxid:0 stmt:0x7f6b8426c308 appname:manager.exe ip:::ffff:192.168.59.1) [ORA]: /***Manager***/ SELECT count(*),max(trxid) from SYS.SYSOBJECTS;^M
2025-11-07 10:57:45.410 (EP[0] sess:0x7f6b84245b88 thrd:1516 user:SYSDBA trxid:0 stmt:0x7f6b8426c308 appname:manager.exe ip:::ffff:192.168.59.1) GET SQL ALL PLN:  /***Manager***/ SELECT count(*),max(trxid) from SYS.SYSOBJECTS;

1   #NSET2: [1, 1, 8]
2     #PRJT2: [1, 1, 8]; exp_num(2), is_atom(FALSE)
3       #AAGR2: [1, 1, 8]; grp_num(0), sfun_num(2), distinct_flag[0,0]; slave_empty(0)
4         #SSCN: [1, 2167, 8]; SYSINDEXIDSYSOBJECTS(SYSOBJECTS); btr_scan(1); is_global(0)^M
2025-11-07 10:57:45.410 (EP[0] sess:0x7f6b84245b88 thrd:1516 user:SYSDBA trxid:274204 stmt:NULL appname:manager.exe ip:::ffff:192.168.59.1) TRX: START^M
2025-11-07 10:57:45.411 (EP[0] sess:0x7f6b84245b88 thrd:1516 user:SYSDBA trxid:274204 stmt:NULL appname:manager.exe ip:::ffff:192.168.59.1) TRX: COMMIT^M
2025-11-07 10:57:45.411 (EP[0] sess:0x7f6b84245b88 thrd:1516 user:SYSDBA trxid:0 stmt:0x7f6b8426c308 appname:manager.exe ip:::ffff:192.168.59.1) [SEL] /***Manager***/ SELECT count(*),max(trxid) from SYS.SYSOBJECTS; EXECTIME: 0(ms) ROWCOUNT: 1(rows) EXEC_ID: 916.^M
2025-11-07 10:58:26.119 (EP[0] sess:0xc111138 thrd:-1 user:NULL trxid:NULL stmt:NULL appname:) ALLOC SESSION^M
2025-11-07 10:58:44.441 (EP[0] sess:0x7f6b5c133bc8 thrd:1514 user:SYSDBA trxid:0 stmt:NULL appname:manager.exe ip:::ffff:192.168.59.1) [LGN] FREE SESSION^M
2025-11-07 10:58:44.746 (EP[0] sess:0x7f6b84124f68 thrd:1579 user:SYSDBA trxid:274191 stmt:NULL appname:manager.exe ip:::ffff:192.168.59.1) [LGN] FREE SESSION^M
2025-11-07 10:58:44.746 (EP[0] sess:0x7f6b84124f68 thrd:1579 user:SYSDBA trxid:274191 stmt:NULL appname:manager.exe ip:::ffff:192.168.59.1) TRX: ROLLBACK^M
2025-11-07 10:58:45.537 (EP[0] sess:0x7f6b84245b88 thrd:1516 user:SYSDBA trxid:0 stmt:NULL appname:manager.exe ip:::ffff:192.168.59.1) [LGN] FREE SESSION^M

4、模拟数据库关闭时应用访问数据库

1)应用日志

Exception in thread "main" dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.init(SourceFile:218)
	at dm.jdbc.a.a.<init>(SourceFile:185)
	at dm.jdbc.driver.DmdbConnection.openConnection(SourceFile:860)
	at dm.jdbc.internal.conf.EP.connect(SourceFile:153)
	at dm.jdbc.internal.conf.EPGroup$EPSelector.select(SourceFile:574)
	at dm.jdbc.internal.conf.EPGroup.connect(SourceFile:380)
	at dm.jdbc.driver.DmDriver.do_connect(SourceFile:198)
	at dm.jdbc.filter.BaseFilter.Driver_connect(SourceFile:4571)
	at dm.jdbc.filter.log.LogFilter.Driver_connect(SourceFile:15438)
	at dm.jdbc.driver.DmDriver.connect(SourceFile:541)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:19)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at dm.jdbc.a.c.d(SourceFile:110)
	at dm.jdbc.a.c.b(SourceFile:68)
	at dm.jdbc.a.c.g(SourceFile:1)
	at dm.jdbc.a.a.init(SourceFile:212)
	... 12 more

2)驱动日志

[DEBUG - 2025-11-06 21:31:51.069] tid:1 - [main] conn-1 try connect loop 0
[ASSERT - 2025-11-06 21:31:53.225] tid:1 - [main] try connect fail [192.168.59.128:5236 (UNKNOW, UNKNOW), sessions: 0] 
dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.init(SourceFile:218)
	at dm.jdbc.a.a.<init>(SourceFile:185)
	at dm.jdbc.driver.DmdbConnection.openConnection(SourceFile:860)
	at dm.jdbc.internal.conf.EP.connect(SourceFile:153)
	at dm.jdbc.internal.conf.EPGroup$EPSelector.select(SourceFile:574)
	at dm.jdbc.internal.conf.EPGroup.connect(SourceFile:380)
	at dm.jdbc.driver.DmDriver.do_connect(SourceFile:198)
	at dm.jdbc.filter.BaseFilter.Driver_connect(SourceFile:4571)
	at dm.jdbc.filter.log.LogFilter.Driver_connect(SourceFile:15438)
	at dm.jdbc.driver.DmDriver.connect(SourceFile:541)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:19)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at dm.jdbc.a.c.d(SourceFile:110)
	at dm.jdbc.a.c.b(SourceFile:68)
	at dm.jdbc.a.c.g(SourceFile:1)
	at dm.jdbc.a.a.init(SourceFile:212)
	... 12 more
[ERROR - 2025-11-06 21:31:54.242] tid:1 - [main] { DmDriver@5a10411 } connect(DmProperties): null;  [PARAMS]: {schema=ODS_DC, connecttimeout=20000, epgroup=192.168.59.128:5236=([192.168.59.128:5236 (UNKNOW, UNKNOW), sessions: 0]), language=CN, url=jdbc:dm://192.168.59.128:5236?schema=ODS_DC&logLevel=all&logDir=C:\dmdbms\log&socketTimeout=600000&connectTimeout=20000&sessionTimeout=12000, sockettimeout=600000, sessiontimeout=12000, localtimezone=480, port=5236, loglevel=all, host=192.168.59.128, driverversion=8.1.4.169, user=ODS_DC, logdir=C:\dmdbms\log}; [USED TIME]: 0.0101ms;
dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.init(SourceFile:218)
	at dm.jdbc.a.a.<init>(SourceFile:185)
	at dm.jdbc.driver.DmdbConnection.openConnection(SourceFile:860)
	at dm.jdbc.internal.conf.EP.connect(SourceFile:153)
	at dm.jdbc.internal.conf.EPGroup$EPSelector.select(SourceFile:574)
	at dm.jdbc.internal.conf.EPGroup.connect(SourceFile:380)
	at dm.jdbc.driver.DmDriver.do_connect(SourceFile:198)
	at dm.jdbc.filter.BaseFilter.Driver_connect(SourceFile:4571)
	at dm.jdbc.filter.log.LogFilter.Driver_connect(SourceFile:15438)
	at dm.jdbc.driver.DmDriver.connect(SourceFile:541)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:19)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at dm.jdbc.a.c.d(SourceFile:110)
	at dm.jdbc.a.c.b(SourceFile:68)
	at dm.jdbc.a.c.g(SourceFile:1)
	at dm.jdbc.a.a.init(SourceFile:212)
	... 12 more

3)sqllog日志

未生成sqllog日志。

5、模拟应用访问过程中关闭数据库

1)应用日志

Exception in thread "main" dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.a(SourceFile:283)
	at dm.jdbc.a.a.a(SourceFile:1250)
	at dm.jdbc.a.a.b(SourceFile:1077)
	at dm.jdbc.a.a.a(SourceFile:861)
	at dm.jdbc.driver.DmdbPreparedStatement.executeInner(SourceFile:443)
	at dm.jdbc.driver.DmdbPreparedStatement.do_executeQuery(SourceFile:531)
	at dm.jdbc.filter.BaseFilter.PreparedStatement_executeQuery(SourceFile:4681)
	at dm.jdbc.filter.log.LogFilter.PreparedStatement_executeQuery(SourceFile:8119)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1397)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1)
	at dm.jdbc.driver.DmdbPreparedStatement.executeQuery(SourceFile:1405)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:26)
Caused by: java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:209)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at dm.jdbc.util.buffer.ByteArrayNode.load(SourceFile:129)
	at dm.jdbc.util.buffer.Buffer.load(SourceFile:365)
	at dm.jdbc.a.c.a(SourceFile:208)
	at dm.jdbc.a.a.e(SourceFile:399)
	at dm.jdbc.a.a.a(SourceFile:273)
	... 11 more

2)驱动日志

[DEBUG - 2025-11-06 21:39:22.918] tid:1 - [main] conn-1 try connect loop 0
[DEBUG - 2025-11-06 21:39:24.133] tid:1 - [main] { conn-1 } access();  CMD_STARTUP
[DEBUG - 2025-11-06 21:39:25.018] tid:1 - [main] { conn-1 } access();  CMD_LOGIN
[DEBUG - 2025-11-06 21:39:25.047] tid:1 - [main] try connect success [192.168.59.128:5236 (NORMAL, OPEN, DSC CONTROL), sessions: 0]
[INFO  - 2025-11-06 21:39:25.056] tid:1 - [main] { DmDriver@5a10411 } connect(DmProperties): conn-1, sessionID-0x7f4d0808a0e8(139968823992552);  [PARAMS]: {schema=ODS_DC, lastloginip=, svrstat=4, language=CN, globalserverseries=7, lastlogintime=, svrmode=0, dsccontrol=true, sessiontimeout=12000, clientuser=ODS_DC, localtimezone=480, host=192.168.59.128, driverversion=8.1.4.169, logdir=C:\dmdbms\log, loginwarningid=0, connecttimeout=20000, epgroup=192.168.59.128:5236=([192.168.59.128:5236 (NORMAL, OPEN, DSC CONTROL), sessions: 0]), lifetimeremainder=-1, gracetimeremainder=0, failedattempts=0, serverversion=8.1.4.116, clienthostname=192.168.59.128, url=jdbc:dm://192.168.59.128:5236?schema=ODS_DC&logLevel=all&logDir=C:\dmdbms\log&socketTimeout=600000&connectTimeout=20000&sessionTimeout=12000, applicationname=, sockettimeout=600000, instancename=DMCSDB, dbname=DAMENG, port=5236, loglevel=all, guid=91D4302991D43029FF8142C47841ABD7, user=ODS_DC}; [USED TIME]: 0.0118ms;
[DEBUG - 2025-11-06 21:39:25.066] tid:1 - [main] { conn-1 } access();  CMD_STMT_ALLOCATE
[DEBUG - 2025-11-06 21:39:25.067] tid:1 - [main] { conn-1 } access();  CMD_PREPARE
[SQL   - 2025-11-06 21:39:25.082] tid:1 - [main] { conn-1 } prepareStatement(String): pstmt-1, handle-0, sessionID-0x7f4d0808a0e8(139968823992552);  [PARAMS]: "select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;"; [USED TIME]: 24.7899ms;
[DEBUG - 2025-11-06 21:39:25.082] tid:1 - [main] { conn-1 } access();  CMD_EXECUTE2
[ERROR - 2025-11-06 21:39:34.061] tid:1 - [main] { conn-1, pstmt-1 } executeQuery();  [USED TIME]: 8979.1502ms; [EXEC_ID]: 0;
dm.jdbc.driver.DMException: Communication error
	at dm.jdbc.driver.DBError.throwException(SourceFile:864)
	at dm.jdbc.a.a.a(SourceFile:283)
	at dm.jdbc.a.a.a(SourceFile:1250)
	at dm.jdbc.a.a.b(SourceFile:1077)
	at dm.jdbc.a.a.a(SourceFile:861)
	at dm.jdbc.driver.DmdbPreparedStatement.executeInner(SourceFile:443)
	at dm.jdbc.driver.DmdbPreparedStatement.do_executeQuery(SourceFile:531)
	at dm.jdbc.filter.BaseFilter.PreparedStatement_executeQuery(SourceFile:4681)
	at dm.jdbc.filter.log.LogFilter.PreparedStatement_executeQuery(SourceFile:8119)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1397)
	at dm.jdbc.driver.DmdbPreparedStatement$2.run(SourceFile:1)
	at dm.jdbc.driver.DmdbPreparedStatement.executeQuery(SourceFile:1405)
	at test.SynchronizedFetch.main(SynchronizedFetch.java:26)
Caused by: java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:209)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at dm.jdbc.util.buffer.ByteArrayNode.load(SourceFile:129)
	at dm.jdbc.util.buffer.Buffer.load(SourceFile:365)
	at dm.jdbc.a.c.a(SourceFile:208)
	at dm.jdbc.a.a.e(SourceFile:399)
	at dm.jdbc.a.a.a(SourceFile:273)
	... 11 more

3)sqllog日志

2025-11-06 21:39:24.547 (EP[0] sess:0x7f4d0808a0e8 thrd:-1 user:NULL trxid:NULL stmt:NULL appname:) ALLOC SESSION^M
2025-11-06 21:39:26.561 (EP[0] sess:0x7f4d0808a0e8 thrd:3961 user:NULL trxid:0 stmt:NULL appname:) STARTUP^M
2025-11-06 21:39:26.577 (EP[0] sess:0x7f4d0808a0e8 thrd:3961 user:ODS_DC trxid:0 stmt:NULL appname: ip:::ffff:192.168.59.1) [LGN] LOGIN^M
2025-11-06 21:39:26.621 (EP[0] sess:0x7f4d0808a0e8 thrd:3961 user:ODS_DC trxid:0 stmt:NULL appname: ip:::ffff:192.168.59.1) ALLOC STMT^M
2025-11-06 21:39:26.623 (EP[0] sess:0x7f4d0808a0e8 thrd:3961 user:ODS_DC trxid:0 stmt:0x7f4d080ab5a0 appname: ip:::ffff:192.168.59.1) [ORA]: select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;^M
2025-11-06 21:39:26.626 (EP[0] sess:0x7f4d0808a0e8 thrd:3961 user:ODS_DC trxid:270016 stmt:NULL appname: ip:::ffff:192.168.59.1) TRX: START^M
2025-11-06 21:39:26.634 (EP[0] sess:0x7f4d0808a0e8 thrd:3961 user:ODS_DC trxid:270016 stmt:0x7f4d080ab5a0 appname: ip:::ffff:192.168.59.1) GET SQL NEW PLN:  select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;

1   #NSET2: [9223372036854775808, 1, 56]
2     #PRJT2: [9223372036854775808, 1, 56]; exp_num(1), is_atom(FALSE)
3       #AAGR2: [9223372036854775808, 1, 56]; grp_num(0), sfun_num(1), distinct_flag[0]; slave_empty(0)
4         #NEST LOOP LEFT JOIN2: [9223372036854775808, 2500000000000, 56]; join condition(C.ID > 1) partition_keys_num(0) ret_null(0)
5           #PRJT2: [26860853974, 50000000, 56]; exp_num(1), is_atom(FALSE)
6             #NEST LOOP LEFT JOIN2: [26860853974, 50000000, 56];  partition_keys_num(0) ret_null(0)
7               #CSCN2: [105, 1000000, 4]; INDEX33557560(DM1 as A); btr_scan(1)
8               #SLCT2: [1, 50, 52]; B.ID > 1
9                 #CSCN2: [1, 1000, 52]; INDEX33557561(DM2 as B); btr_scan(1)
10          #CSCN2: [104, 1000000, 0]; INDEX33557560(DM1 as D); btr_scan(1)^M
2025-11-06 21:39:26.635 (EP[0] sess:0x7f4d0808a0e8 thrd:3961 user:ODS_DC trxid:270016 stmt:0x7f4d080ab5a0 appname: ip:::ffff:192.168.59.1) [SEL] select count(*) from (select a.id,b.name from dm1 a left join dm2 b on b.id>1)c left join dm1 d on c.id>1;^M
2025-11-06 21:39:26.639 (EP[0] sess:0x7f4d0808a0e8 thrd:3961 user:ODS_DC trxid:270016 stmt:0x7f4d080ab5a0 appname: ip:::ffff:192.168.59.1) DLCK used time:6(us)^M
~

三、总结

不同场景应用、驱动和sqllog日志表现不同。
场景1:
sql执行超时。超时时间受socketTimeout控制,应用日志:Caused by: java.net.SocketTimeoutException: Read timed out,驱动日志:[ERROR - 2025-11-06 20:03:06.448] tid:1 - [main] { conn-1, pstmt-1 } executeQuery(); [USED TIME]: 60014.9384ms; [EXEC_ID]: 0;达梦sqllog日志中sql执行失败,报错:[ERR(-6007)]。
场景2:
Sql执行过程中和数据库通信断开(sql执行耗时超过socketTimeout),sql执行过程中,断开应用和数据库服务器的通信,sql会继续执行,直到超过socketTimeout才报错。应用日志:Caused by: java.net.SocketTimeoutException: Read timed out,驱动日志:[ERROR - 2025-11-06 20:36:46.732] tid:1 - [main] { conn-1, pstmt-1 } executeQuery(); [USED TIME]: 600008.9727ms; [EXEC_ID]: 0;达梦sqllog日志中sql执行失败,报错:[ERR(-6007)]。
场景3:
Sql执行过程中和数据库通信断开(sql执行耗时未超过socketTimeout),sql会继续执行,执行结束后先不报错,超过socketTimeout后才报错。应用日志:Caused by: java.net.SocketException: Connection reset,驱动日志:[ASSERT - 2025-11-07 10:58:44.317] tid:1 - [main] try connect fail [192.168.59.128:5236 (UNKNOW, UNKNOW), sessions: 0] 。达梦sqllog中sql执行完成,无报错。
场景4:
数据库关闭时应用访问数据库,立即报错。应用日志:Caused by: java.net.ConnectException: Connection refused: connect,驱动日志:[ASSERT - 2025-11-06 21:31:53.225] tid:1 - [main] try connect fail [192.168.59.128:5236 (UNKNOW, UNKNOW), sessions: 0] 。达梦sqllog无日志生成。
场景5:
应用访问过程中关闭数据库,立即报错。应用日志:Caused by: java.net.SocketException: Connection reset,驱动日志:[DEBUG - 2025-11-06 21:39:25.047] tid:1 - [main] try connect success [192.168.59.128:5236 (NORMAL, OPEN, DSC CONTROL), sessions: 0]。kill数据库后不再生成新的sqllog日志。
场景1和场景2,一定和sql性能差,sql执行超时有关,场景2不排除应用服务器和数据库服务器通信存在波动可能。注:有些监控平台会定时访问数据库,确认数据库状态正常,不做任何操作,创建连接完成后立刻销毁连接,也会偶发性报网络通信异常,应用报错信息和场景1、场景2相同,数据库实际未发生故障(SQL未超时),驱动和数据库版本差距不大,一般为网络响应延迟应用等待数据库响应超时引起,可适当调大socketTimeout参数。
场景3一定是应用服务器和数据库服务器通信存在波动。
还有一种不方便模拟的场景,sql执行未超时但应用报Caused by: java.net.SocketTimeoutException: Read timed out。这种一般是因为结果集传输过程阻塞,SQL返回大量数据(如百万行),网络带宽不足或延迟高,可以添加重试机制SWITCH_TIMES=3&SWITCH_INTERVAL=1000绕过。
也可以通过在数据库服务器配置定时job,每秒连接一次数据库,直接排除数据库存在异常可能。

vi /home/dmdba/test_conn.sh 
#!/bin/bash
/home/dmdba/dmdbms/bin/disql SYSDBA/Dameng123@localhost:5236 -e 'select 1'
--crontab 每秒执行 确认数据库连接正常 用>> 追加日志,一个>会被覆盖
crontab -e
*/1 * * * * /home/dmdba/test_conn.sh  >>  /home/dmdba/test_conn.log
--查看配置信息
crontab -l
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服