Skip to content

DM 连接故障

连接故障的影响

  • 业务中断:应用程序无法访问数据库,导致业务服务中断
  • 用户体验下降:用户无法完成操作,影响用户体验
  • 数据一致性风险:长时间连接故障可能导致数据不一致
  • 运维压力增加:需要紧急处理,增加运维团队的工作压力

连接故障的常见类型

  1. 连接超时:连接请求在规定时间内未得到响应
  2. 连接拒绝:数据库服务器拒绝连接请求
  3. 身份验证失败:用户名或密码错误
  4. 权限不足:用户没有足够的权限访问数据库
  5. 资源耗尽:数据库连接数达到上限
  6. 网络故障:网络连接中断或不稳定

连接故障诊断

1. 检查网络连接

1.1 检查网络连通性

bash
# 检查网络连通性
ping database_server_ip

# 检查数据库端口是否开放
telnet database_server_ip 5236

# 或使用nc命令检查端口
nc -zv database_server_ip 5236

1.2 检查防火墙配置

bash
# 检查Linux防火墙状态
systemctl status firewalld

# 检查防火墙规则
firewall-cmd --list-all

# 检查Windows防火墙状态
netsh advfirewall show allprofiles

1.3 检查网络路由

bash
# 检查网络路由
traceroute database_server_ip

# 或使用tracert命令
tracert database_server_ip

2. 检查数据库状态

2.1 检查数据库实例是否运行

bash
# 检查数据库服务状态
./DmServiceDMSERVER status

# 或使用ps命令检查进程
ps -ef | grep dmserver

# 检查Windows服务状态
sc query DmServiceDMSERVER

2.2 检查数据库监听状态

sql
-- 检查数据库监听状态
SELECT STATUS$ FROM V$INSTANCE;

-- 检查数据库连接数
SELECT COUNT(*) FROM V$SESSION;

-- 检查最大连接数配置
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'MAX_SESSIONS';

3. 检查连接配置

3.1 检查连接字符串

bash
# 示例连接字符串
disql SYSDBA/SYSDBA@database_server_ip:5236/DAMENG

连接字符串格式:username/password@host:port/database_name

3.2 检查连接参数配置

参数名称描述配置文件
PORT_NUM数据库服务端口dm.ini
MAX_SESSIONS最大连接数dm.ini
SESSION_IDLE_TIMEOUT会话空闲超时时间dm.ini
CONNECTION_TIMEOUT连接超时时间dm.ini

4. 检查日志文件

4.1 检查错误日志

bash
# 查看错误日志
./dm logger view -t error -f /opt/dmdbms/data/DAMENG/log/dm_DMSERVER.log

# 实时查看错误日志
./dm logger tail -f /opt/dmdbms/data/DAMENG/log/dm_DMSERVER.log

4.2 检查连接相关错误

常见连接错误代码:

错误代码错误信息可能原因
-2007用户名或密码错误身份验证失败
-2008用户已锁定用户被锁定
-2011无此用户用户名不存在
-2390数据库版本不匹配客户端与服务器版本不兼容
-2401连接超时网络问题或数据库负载过高
-2402连接被拒绝防火墙阻止或数据库未运行
-2403连接数达到上限超过MAX_SESSIONS限制
-2501内存不足数据库内存不足

5. 检查用户权限

sql
-- 检查用户是否存在
SELECT * FROM SYSUSERS WHERE USERNAME = 'user_name';

-- 检查用户状态
SELECT USERNAME, ACCOUNT_STATUS FROM SYSUSERS;

-- 检查用户权限
SELECT * FROM SYSAUTH WHERE GRANTEE = 'user_name';

连接故障处理

1. 网络问题处理

1.1 修复网络连接

  • 检查网络线缆是否松动
  • 重启网络设备(交换机、路由器等)
  • 检查网络配置(IP地址、子网掩码、网关等)
  • 联系网络管理员协助解决

1.2 调整防火墙规则

bash
# 允许数据库端口通过防火墙
firewall-cmd --add-port=5236/tcp --permanent
firewall-cmd --reload

# 或关闭防火墙(临时解决方案,不推荐)
systemctl stop firewalld

2. 数据库配置调整

2.1 增加最大连接数

sql
-- 查看当前连接数
SELECT COUNT(*) FROM V$SESSION;

-- 查看最大连接数配置
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'MAX_SESSIONS';

-- 调整最大连接数
ALTER SYSTEM SET MAX_SESSIONS = 1000 SPFILE;

-- 重启数据库使配置生效
./DmServiceDMSERVER restart

2.2 调整连接超时时间

sql
-- 调整连接超时时间
ALTER SYSTEM SET CONNECTION_TIMEOUT = 60 SPFILE;

-- 调整会话空闲超时时间
ALTER SYSTEM SET SESSION_IDLE_TIMEOUT = 3600 SPFILE;

3. 用户权限问题处理

3.1 重置用户密码

sql
-- 重置用户密码
ALTER USER user_name IDENTIFIED BY new_password;

3.2 解锁用户

sql
-- 解锁用户
ALTER USER user_name ACCOUNT UNLOCK;

3.3 授予用户权限

sql
-- 授予用户连接权限
GRANT CREATE SESSION TO user_name;

-- 授予用户数据库权限
GRANT DBA TO user_name;

4. 数据库服务重启

bash
# 重启数据库服务
./DmServiceDMSERVER restart

# 或使用SQL命令重启
SHUTDOWN IMMEDIATE;
STARTUP;

5. 客户端配置调整

5.1 调整客户端连接超时时间

bash
# 修改dm_svc.conf文件(Linux)
vi /etc/dm_svc.conf

# 添加或修改连接超时配置
TIMEOUT=60

# 修改dm_svc.conf文件(Windows)
# 位置:C:\Windows\System32\dm_svc.conf

5.2 检查客户端版本兼容性

bash
# 查看客户端版本
./disql -v

# 查看服务器版本
SELECT * FROM V$VERSION;

确保客户端和服务器版本兼容,建议使用相同版本或兼容版本。

6. 资源问题处理

6.1 释放空闲连接

sql
-- 查看空闲会话
SELECT SID, SERIAL#, USERNAME, STATUS, IDLE_TIME FROM V$SESSION WHERE STATUS = 'IDLE' AND IDLE_TIME > 3600;

-- 终止空闲会话
ALTER SYSTEM KILL SESSION 'SID,SERIAL#';

6.2 增加系统资源

  • 增加服务器物理内存
  • 增加CPU核心数
  • 优化存储系统
  • 调整数据库参数,优化资源使用

连接故障预防

1. 网络优化

  • 使用稳定的网络设备
  • 配置冗余网络连接
  • 定期检查网络状态
  • 监控网络性能

2. 数据库配置优化

  • 根据业务需求合理配置最大连接数
  • 调整连接超时和会话空闲超时时间
  • 定期监控数据库连接数
  • 配置连接池,优化连接管理

3. 用户权限管理

  • 遵循最小权限原则,只授予必要的权限
  • 定期审查用户权限
  • 启用密码策略,强制密码复杂度和定期更换
  • 定期锁定或删除 unused 用户

4. 监控与告警

  • 配置连接数监控和告警
  • 监控数据库服务状态
  • 监控网络连接状态
  • 建立连接故障自动恢复机制

5. 定期维护

  • 定期重启数据库服务
  • 定期清理无效连接
  • 定期更新数据库补丁
  • 定期测试数据库连接

连接池配置

使用连接池可以优化数据库连接管理,提高连接利用率,减少连接故障。

1. DM连接池配置

DM数据库提供了内置的连接池功能,可以通过以下方式配置:

sql
-- 查看连接池配置
SELECT * FROM V$DM_INI WHERE PARA_NAME LIKE '%POOL%';

-- 调整连接池参数
ALTER SYSTEM SET CONNECTION_POOL = 1 SPFILE;
ALTER SYSTEM SET CONNECTION_POOL_SIZE = 100 SPFILE;
ALTER SYSTEM SET CONNECTION_POOL_KEEPALIVE_TIME = 3600 SPFILE;

2. 应用程序连接池配置

常见的应用程序连接池包括:

  • DBCP:Apache DBCP连接池
  • C3P0:C3P0连接池
  • HikariCP:HikariCP连接池
  • Druid:阿里巴巴Druid连接池

2.1 Druid连接池配置示例

properties
# Druid连接池配置
spring.datasource.url=jdbc:dm://database_server_ip:5236/DAMENG
spring.datasource.username=SYSDBA
spring.datasource.password=SYSDBA
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver

# 连接池配置
spring.datasource.druid.initial-size=10
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=100
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false

版本差异

DM版本连接管理差异
DM7支持基本的连接管理功能,连接池功能有限
DM8增强了连接管理功能,支持更灵活的连接配置
DM8.1引入了智能连接管理功能,支持自动调整连接池大小

常见问题(FAQ)

Q1: 如何查看DM数据库当前的连接数?

A1: 可以使用以下命令查看DM数据库当前的连接数:

sql
-- 查看当前连接数
SELECT COUNT(*) FROM V$SESSION;

-- 查看不同状态的连接数
SELECT STATUS, COUNT(*) FROM V$SESSION GROUP BY STATUS;

-- 查看各用户的连接数
SELECT USERNAME, COUNT(*) FROM V$SESSION GROUP BY USERNAME;

Q2: 如何调整DM数据库的最大连接数?

A2: 可以使用以下命令调整DM数据库的最大连接数:

sql
-- 查看当前最大连接数配置
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'MAX_SESSIONS';

-- 调整最大连接数
ALTER SYSTEM SET MAX_SESSIONS = 1000 SPFILE;

-- 重启数据库使配置生效
./DmServiceDMSERVER restart

Q3: 连接超时的原因有哪些?

A3: 连接超时的常见原因包括:

  • 网络连接不稳定或中断
  • 数据库服务器负载过高
  • 数据库连接数达到上限
  • 防火墙阻止连接
  • 连接超时时间设置过短
  • 数据库实例故障

Q4: 如何处理"连接数达到上限"错误?

A4: 处理"连接数达到上限"错误的方法包括:

  1. 增加最大连接数配置
  2. 释放空闲连接
  3. 优化应用程序,减少连接占用时间
  4. 使用连接池,优化连接管理
  5. 检查是否存在连接泄漏

Q5: 如何诊断连接泄漏问题?

A5: 诊断连接泄漏问题的方法包括:

  1. 监控连接数变化,观察是否持续增长
  2. 检查长时间运行的会话
  3. 分析应用程序代码,检查是否正确关闭连接
  4. 使用连接池的连接泄漏检测功能
  5. 定期重启应用程序,释放泄漏的连接

Q6: 如何优化数据库连接性能?

A6: 优化数据库连接性能的方法包括:

  1. 使用连接池管理连接
  2. 调整连接池参数,优化连接复用
  3. 减少连接占用时间,尽快释放连接
  4. 优化SQL语句,减少执行时间
  5. 增加数据库服务器资源
  6. 配置合适的连接超时和会话空闲超时时间

预防连接故障同样重要,包括网络优化、数据库配置优化、用户权限管理、监控与告警、定期维护等方面。使用连接池可以优化连接管理,提高连接利用率,减少连接故障的发生。

数据库管理员应该建立完善的连接故障处理流程,定期测试和监控数据库连接状态,及时发现和处理连接问题,确保数据库的正常访问和业务的连续性。