目录

数据库获取连接超时排查

一、环境准备

如果没有开启监控,可在 Druid 配置里增加:
<property name="filters" value="stat,wall"/>
配置日志记录连接池 DEBUG 日志,便于后续排查:
<logger name="com.alibaba.druid.pool.DruidDataSource" level="DEBUG"/>

二、验证连接池状态

ActiveCount(活跃连接数)

PoolingCount(空闲连接数)

CreateCount / CreateErrorCount

NotEmptyWaitCount(等待线程数量)

三、达梦数据库侧检查连接情况

五、验证数据库是否进入休眠或超时关闭连接

六、检查网络状态

七、Druid 详细日志验证

九、改进建议

@Scheduled(cron = "0 0/30 * * * ?")
public void keepAlive() {
    jdbcTemplate.queryForObject("SELECT 1 FROM DUAL", Integer.class);
}

相关SQL命令汇总

--查看达梦数据库连接状态
SELECT * FROM V$SESSION;
  
--查看达梦最近慢 SQL
SELECT * FROM V$SQLAREA WHERE EXECUTIONS > 0 ORDER BY ELAPSED_TIME DESC FETCH FIRST 10 ROWS ONLY;

--验证数据库响应
SELECT 1 FROM DUAL;

开启druid监控页面

<!-- 注册Druid监控Servlet -->
<servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <!-- 配置登录用户名、密码 -->
    <init-param>
        <param-name>loginUsername</param-name>
        <param-value>admin</param-value>
    </init-param>
    <init-param>
        <param-name>loginPassword</param-name>
        <param-value>123456</param-value>
    </init-param>
    <!-- 允许访问的IP白名单,留空表示允许所有 -->
    <init-param>
        <param-name>allow</param-name>
        <param-value></param-value>
    </init-param>
    <!-- 禁止访问的IP黑名单,多个用逗号分隔 -->
    <!-- <init-param>
        <param-name>deny</param-name>
        <param-value>192.168.1.100</param-value>
    </init-param> -->
</servlet>

<servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!-- Druid WebStatFilter -->
<filter>
    <filter-name>DruidWebStatFilter</filter-name>
    <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
    <!-- 排除一些不需要监控的资源 -->
    <init-param>
        <param-name>exclusions</param-name>
        <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>DruidWebStatFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<property name="useGlobalDataSourceStat" value="true"/>
<property name="mergeSql" value="true"/>

达梦迁移到金仓

create or REPLACE FUNCTION EN514(STR IN VARCHAR2(100))RETURN VARCHAR2(100)AS
BEGIN
IF STR IS NOT NULL THEN
    RETURN CFALGORITHMSENCRYPT(STR, 514, '123456');
ELSE
    RETURN NULL;
END IF;
END;
create or REPLACE FUNCTION DE514(STR IN VARCHAR2(100))RETURN VARCHAR2(100)AS
BEGIN
IF STR IS NOT NULL THEN
    RETURN CFALGORITHMSDECRYPT(STR, 514, '123456');
ELSE
    RETURN NULL;
END IF;
END;
-- 转换为SM4函数进行加密的形式
create or REPLACE FUNCTION CONVERT_ENSM4(STR IN VARCHAR2(100))RETURN VARCHAR2(100)AS
BEGIN
IF STR IS NOT NULL THEN
    RETURN CONCAT('SM4(''',CFALGORITHMSDECRYPT(STR, 514, '123456'),''',''123456'',0)');
ELSE
    RETURN NULL;
END IF;
END;
CREATE OR REPLACE FUNCTION DESM4(STR IN VARCHAR2(100))
RETURN VARCHAR2(100)AS 
BEGIN 
IF STR IS NOT NULL THEN
    RETURN convert_from(SM4(STR,'123456',1),'UTF8'); 
ELSE 
    RETURN NULL ;
END IF;
END;
DECLARE
    -- 要处理的模式名
    schema_name VARCHAR2(20) :='DMHR';
    TYPE COL_ARRAY_TYPE IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;
    -- 存储表名
    table_names COL_ARRAY_TYPE;
    -- 存储列名
    col_names COL_ARRAY_TYPE;
    -- 拼接的sql语句
    res VARCHAR2;
    TYPE FIELD_SET_TYPE IS TABLE OF BOOLEAN INDEX BY VARCHAR2(100);
    -- 存储解密字段
    field_set FIELD_SET_TYPE;
    TYPE FIELD_ARRAY_TYPE IS TABLE OF VARCHAR2(100);
    -- 存储需解密字段数组
    field_array FIELD_ARRAY_TYPE := FIELD_ARRAY_TYPE('EMPLOYEE_NAME','IDENTITY_CARD','EMAIL','PHONE_NUM','STREET_ADDRESS');
BEGIN
    FOR k IN 1..field_array.count LOOP
        field_set(field_array(k)):=TRUE;
    END LOOP;
    -- 获取指定模式下的表名
    SELECT TABLE_NAME BULK COLLECT INTO table_names from DBA_TABLES where OWNER=schema_name;
    FOR i IN 1..table_names.count LOOP
        PRINT('--table:'||table_names(i));
        BEGIN
            SELECT COLUMN_NAME BULK COLLECT INTO col_names from ALL_TAB_COLUMNS WHERE OWNER=schema_name AND TABLE_NAME=table_names(i);
            res := col_names(1);
            FOR j IN 2..col_names.count LOOP
                IF field_set.exists(col_names(j)) THEN
                    res := CONCAT(res, ', CONVERT_ENSM4(', col_names(j), ')', col_names(j));
                ELSE
                    res := CONCAT(res, ', ', col_names(j));
                END IF;
            END LOOP;
            res := CONCAT('SELECT ', res, ' FROM ', schema_name, '.', table_names(i), ';');
            -- 打印sql语句
            PRINT(res);
            -- 执行sql语句
            EXECUTE IMMEDIATE res;
        END;
    END LOOP;
END;
DECLARE
    schema_name VARCHAR2(20) :='DMHR';
    TYPE COL_ARRAY_TYPE is TABLE of VARCHAR2(100) INDEX BY PLS_INTEGER;
    -- 存储表名
    table_names COL_ARRAY_TYPE;
BEGIN
    SELECT TABLE_NAME BULK COLLECT INTO table_names from DBA_TABLES where OWNER=schema_name;
    FOR i in 1..table_names.count LOOP
        print(table_names(i) ||  schema_name);
        SELECT DBMS_METADATA.GET_DDL('TABLE', table_names(i), schema_name) FROM DUAL;
    end loop;
end;
D:\Dameng\dmdbms\tool>dts_cmd_run.bat config
请输入命令:
格式: CONFIG KEYWORD=VALUE
例程: CONFIG FILE=/OPT/DM_DM.XML DESCRYPT_PASSWORD =1
-----------------------------------------------
FILE                    :       DTS迁移配置文件路径,例如: FILE=/opt/1.xml
DESCRYPT_PASSWORD       :       是否需要解密密码,0:不需要,1: 需要,默认值: 1
(DTS默认生成的配置文件登录密码都是加密的,所以需要解密,但如果手动编辑过配置文件,一般给明文,这时就不需要解密)

REPORT                  :       EXCEL报告导出路径,指定目录
HTML_REPORT             :       HTML报告导出路径,指定目录
LOG                     :       日志导出路径,指定目录
ERR_LOG                 :       错误日志导出路径,指定目录
SHOW_I                  :       进度显示时间间隔(单位:秒),默认10s打印一次进度
DATA_TYPE_MAP_FILE      :       类型映射配置文件路径,默认为FILE同目录下的datatype.xml
ERR_SQL                 :       迁移错误SQL导出路径,指定目录
ERR_OBJECT              :       导出迁移出错的对象的路径,指定目录
D:\Dameng\dmdbms\tool>dts_cmd_run.bat config FILE=./aa.xml DESCRYPT_PASSWORD=1
迁移./aa.xml...
解析迁移的配置文件./aa.xml...
开始执行迁移./aa.xml[DM            ==>   SQL]...
进度:任务总数:27,已完成:27,出错:0,取消:0,剩余:0,开始时间:2025-07-19 19:07:40,结束时间:2025-07-19 19:07:40,耗时:496毫秒
./aa.xml迁移完成.
Export...
Export HTML_REPORT...
log4j:WARN No appenders could be found for logger (freemarker.cache).
log4j:WARN Please initialize the log4j system properly.
Export HTML_REPORT success(D:\Dameng\dmdbms\tool\tool\workspace\temp_data\temp\project\DTS_CMD\1953311629333524\1752923259465\transform_report_2025_07_19_19_07_52.zip)!
Total time: (19:07:52.95 - 19:07:36.84) seconds
<?xml version="1.0" encoding="UTF-8"?>
<!--本文件由DM数据迁移工具生成,请不要手工修改,生成时间2025-07-19 13:35:14.-->
<TransformTask transform="1004" name="DM2DDL">
  <Source type="db" useCustomDriver="false" useDefaultURL="true">
    <Server>localhost</Server>
    <Port>5236</Port>
    <AuthType>0</AuthType>
    <Compress>false</Compress>
    <DmType>dm</DmType>
    <User>SYSDBA</User>
    <Password>7BAE51EA9BBCEAAD387023DAB16F5A62</Password>
  </Source>
  <Destination type="file">
    <File encoding="UTF-8" definitionType="0" dataType="0" option="1" defineExed="false" split="false" splitSize="0"/>
  </Destination>
  <Config selectObjType="1">
    <Strategy name="indexRename" value="true"/>
    <Strategy name="createTableParallel" value="false"/>
    <Strategy name="createIndexParallel" value="false"/>
    <Strategy name="createPkParallel" value="false"/>
    <Strategy name="allParallel" value="false"/>
    <Strategy name="itemBatchSize" value="50"/>
    <Strategy name="itemBufSize" value="4"/>
    <Strategy name="fillThreadCount" value="2"/>
    <Strategy name="taskBufSize" value="4"/>
    <Strategy name="batchMaxSize" value="0"/>
    <Strategy name="batchLobMaxSize" value="0"/>
    <Strategy name="batchMaxTime" value="60"/>
    <Strategy name="globalFldr" value="false"/>
    <Strategy name="retryConnect" value="true"/>
    <Strategy name="retryConnectCount" value="3"/>
    <Strategy name="retryConnectInterval" value="15"/>
    <Strategy name="lengthInChar" value="1.0"/>
    <Strategy name="continueWhenError" value="true"/>
    <Strategy name="toDate" value="false"/>
    <Strategy name="threadCount" value="2"/>
    <Strategy name="objectNameToUpperCase" value="true"/>
  </Config>
  <Mode simple="false">
    <DBStrategies>
      <Strategy>TRANSFORM_SCHEMAS</Strategy>
    </DBStrategies>
    <Schema source="DMHR" destination="DMHR">
      <Strategies>
        <Strategy name="schObjectStrategys" value="TRANSFORM_TABLES,TRANSFORM_VIEWS,TRANSFORM_MVIEWS,TRANSFORM_SEQUENCES,TRANSFORM_PROCEDURE_FUNCTIONS,TRANSFORM_DATABASE_AND_SCHEMA_TRIGGERS,TRANSFORM_PACKAGES,TRANSFORM_CLASSES,TRANSFORM_SYNONYM,TRANSFORM_TYPES"/>
      </Strategies>
    </Schema>
  </Mode>
  <TransformItems ItemCount="8">
    <TransformItem id="0" type="table" sourceSchema="DMHR" destSchema="DMHR" source="DEPARTMENT" destination="DEPARTMENT" isDefinitionAutoGenerated="true" customColumnMap="false" partitionAsList="false"/>
    <TransformItem id="0" type="table" sourceSchema="DMHR" destSchema="DMHR" source="EMPLOYEE" destination="EMPLOYEE" isDefinitionAutoGenerated="true" customColumnMap="false" partitionAsList="false"/>
    <TransformItem id="0" type="table" sourceSchema="DMHR" destSchema="DMHR" source="JOB" destination="JOB" isDefinitionAutoGenerated="true" customColumnMap="false" partitionAsList="false"/>
    <TransformItem id="0" type="table" sourceSchema="DMHR" destSchema="DMHR" source="JOB_HISTORY" destination="JOB_HISTORY" isDefinitionAutoGenerated="true" customColumnMap="false" partitionAsList="false"/>
    <TransformItem id="0" type="table" sourceSchema="DMHR" destSchema="DMHR" source="LOCATION" destination="LOCATION" isDefinitionAutoGenerated="true" customColumnMap="false" partitionAsList="false"/>
    <TransformItem id="0" type="table" sourceSchema="DMHR" destSchema="DMHR" source="REGION" destination="REGION" isDefinitionAutoGenerated="true" customColumnMap="false" partitionAsList="false"/>
    <TransformItem id="0" type="table" sourceSchema="DMHR" destSchema="DMHR" source="CITY" destination="CITY" isDefinitionAutoGenerated="true" customColumnMap="false" partitionAsList="false"/>
  </TransformItems>
</TransformTask>

达梦数据守护

相关概念

主机名IP状态说明
DW_P192.168.1.131, 192.168.0.141主库, GRP1_RT_01192.168.1.131 外部服务 IP;192.168.0.141 内部通信 IP
DW_S1192.168.1.132, 192.164.0.142备库1, GRP1_RT_02192.168.1.132 外部服务 IP;192.168.0.142 内部通信 IP
DW_M192.168.0.73确认监视器 GRP1_RT_M
实例名PORT_NUMMAL_INST_DW_PORTMAL_HOSTMAL_PORTMAL_DW_PORTGRP1_RT_01
GRP1_RT_013214133141192.168.0.1416114152141
GRP1_RT_023214233142192.168.0.1426114252142
GRP1_RT_M5236
# 创建外部服务网络(对应 192.168.1.0/24)
docker network create --subnet=192.168.1.0/24 dm_external

# 创建内部通信网络(对应 192.168.0.0/24)
docker network create --subnet=192.168.0.0/24 dm_internal