为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
select * from v$instance;
NAME INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION DB_VERSION START_TIME STATUS$ MODE$ OGUID DSC_SEQNO DSC_ROLE BUILD_VERSION BUILD_TIME DMSERVER DMSERVER 1 ca62798c02e2 DM Database Server x64 V8 DB Version: 0x7000c 2023-12-08 17:50:59 OPEN NORMAL 0 0 NULL 1-3-26-2023.07.26-197096-20046-ENT Aug 1 2023 16:35:32
使用docker安装的达梦单机数据库
docker images dm8_single dm8_20230808_rev197096_x86_rh6_64 ab98e2f4a568
docker 版本:
root@ecm-bvb67dp-0003:~# docker -v
Docker version 20.10.18, build b40c2f6
docker命令:
docker run -d \
-p 5236:5236 \
-p 5336:5336 \
-p 5436:5436 \
-p 5536:5536 \
-p 45331:45331 \
--restart=always \
--name dm8_prod \
--privileged=true \
-e PAGE_SIZE=16 \
-e LD_LIBRARY_PATH=/opt/dmdbms/bin \
-e EXTENT_SIZE=32 \
-e BLANK_PAD_MODE=1 \
-e LOG_SIZE=1024 \
-e UNICODE_FLAG=1 \
-e LENGTH_IN_CHAR=1 \
-e INSTANCE_NAME=dm8_prod \
-v /data/dm8_prod:/opt/dmdbms/data \
dm8_single:dm8_20230808_rev197096_x86_rh6_64
root@ecm-bvb67dp-0001:/home# hostnamectl
Static hostname: ecm-bvb67dp-0001
Icon name: computer-vm
Chassis: vm
Machine ID: 186f3198bc334ec89e829c9b3bee5bca
Boot ID: 00c0e403fffa49e6af32f24a8723c8f4
Virtualization: kvm
Operating System: Ubuntu 18.04.5 LTS
Kernel: Linux 4.15.0-137-generic
Architecture: x86-64
root@ecm-bvb67dp-0001:/home# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 8
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel Xeon Processor (Cascadelake)
Stepping: 5
CPU MHz: 2999.998
BogoMIPS: 5999.99
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
L3 cache: 16384K
NUMA node0 CPU(s): 0-7
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat umip pku ospke avx512_vnni md_clear arch_capabilities
DmJdbcDriver18.jar 包中 MANIFEST.MF信息:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.16
Created-By: 11.0.13+8 (Eclipse Adoptium)
Implementation-Vendor: DAMENG
Implementation-Title: Dameng JDBC driver classes for use with JDK1.8
Implementation-Version: - 8.1.3.12 - Production
Driver-name: dm.jdbc.driver.DmDriver
Build-Time: 2023.04.17
Main-Class: dm.jdbc.driver.DmDriver
Premain-Class: dm.jdbc.stat.support.WebServer
Svn-Revision: 16823
Branch-Id:
我们的业务场景是做数据清洗,有一个定时任务查询几张数据量很大的表,每张表大概200来万条数据,每次任务运行到接近一个小时的时候就会报这个错误,但是又不知道错在哪里。还有一个情况也会报这个错误,就是 where 条件 in的时候,in的字段太多,>= 100条就会出现这个错误,针对后者我们将代码逻辑改了一次性不in 太多的字段,但是前者我们就不知道问题出在哪里了,附上报错的堆栈信息:
Cause: dm.jdbc.driver.DMException: Connection has been switched
; uncategorized SQLException; SQL state []; error code [20000]; Connection has been switched; nested exception is dm.jdbc.driver.DMException: Connection has been switched
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
at com.sun.proxy.$Proxy71.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
at com.sun.proxy.$Proxy108.querySplitTableByCondition(Unknown Source)
at sun.reflect.GeneratedMethodAccessor278.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
请确认是否开了do_switch或者autoReconnect,如果在url里面或者dm_svc.conf里面配置了这任一参数,jdbc层就有自动重连功能,如果遇到连接失败,会自动重连,同时给上层应用抛这个信息作为提示。