达梦dm_svc.conf配置与数据库运维管理本文系统梳理了达梦数据库dm_svc.conf配置文件的使用方法以及不同集群环境下的配置实践同时总结了数据库配置管理和日常运维的核心内容适合DBA和运维人员参考。文章目录达梦dm_svc.conf配置与数据库运维管理第一部分dm_svc.conf配置详解一、dm_svc.conf概述1.1 什么是dm_svc.conf1.2 配置文件位置1.3 配置文件结构二、全局配置参数2.1 常用全局参数三、不同集群环境下的配置实践3.1 单机环境配置3.2 主备数据守护集群配置3.3 读写分离集群配置3.4 DSC共享存储集群配置3.5 DPC分布式计算集群配置四、dm_svc.conf配置验证4.1 验证配置是否生效4.2 常见配置问题排查第二部分数据库配置与运维管理五、数据库配置管理5.1 dm.ini核心参数5.2 参数查看与修改5.3 配置文件备份与恢复六、日常运维管理6.1 数据库启动与停止6.2 表空间管理6.3 用户和会话管理6.4 日志管理七、备份恢复管理7.1 物理备份DMRMAN7.2 逻辑备份dexp/dimp7.3 备份策略建议八、性能监控与调优8.1 性能监控视图8.2 常见性能问题排查8.3 AWR性能报告九、故障排查方法论9.1 故障排查通用流程9.2 常见故障处理十、学习心得第一部分dm_svc.conf配置详解一、dm_svc.conf概述1.1 什么是dm_svc.confdm_svc.conf是达梦数据库的服务名配置文件用于定义数据库服务名与实际数据库地址的映射关系。客户端JDBC、ODBC、disql等通过服务名连接数据库时会读取这个配置文件找到对应的数据库地址进行连接。dm_svc.conf的作用作用说明服务名映射把服务名映射到具体的IP:端口故障自动切换主备集群中主库故障时自动切换到备库读写分离把读请求分发到备库写请求走主库连接负载均衡多个节点间分发连接请求连接参数统一管理超时、重试、字符集等参数统一配置1.2 配置文件位置平台默认位置Linux/etc/dm_svc.confWindowsC:\Windows\System32\dm_svc.conf自定义通过环境变量DM_SVC_CONF指定# Linux查看配置文件cat/etc/dm_svc.conf# 自定义配置文件路径exportDM_SVC_CONF/path/to/dm_svc.conf1.3 配置文件结构dm_svc.conf分为三个区域# 1. 全局配置区 TIME_ZONE(480) LANGUAGE(cn) LOGIN_MODE(1) # 2. 服务名定义区 DMDB(192.168.1.100:5236,192.168.1.101:5236) # 3. 服务名配置区 [DMDB] LOGIN_MODE(1) SWITCH_TIMES(60) SWITCH_INTERVAL(1000)二、全局配置参数2.1 常用全局参数参数说明默认值示例TIME_ZONE时区分钟480东八区TIME_ZONE(480)LANGUAGE客户端语言cnLANGUAGE(cn)LOGIN_MODE登录模式1LOGIN_MODE(1)CHAR_CODE字符集编码0自动CHAR_CODE(1)ENCRYPT通信加密0不加密ENCRYPT(1)TRACE客户端跟踪0关闭TRACE(1)TRACE_FILE跟踪文件路径-TRACE_FILE(/tmp/dm_trace.log)LOGIN_MODE登录模式值说明0正常模式优先连接第一个地址1只连主库主备集群用2只连备库读写分离用3优先主库主库不可用连备库4优先备库备库不可用连主库三、不同集群环境下的配置实践3.1 单机环境配置场景单台数据库服务器没有高可用。# 全局配置 TIME_ZONE(480) LANGUAGE(cn) # 服务名定义 DMDB(192.168.1.100:5236) # 服务名配置 [DMDB] LOGIN_MODE(1)连接方式# disql连接disql SYSDBA/Dameng123DMDB# JDBC连接jdbc:dm://DMDB3.2 主备数据守护集群配置场景一主一备数据守护集群要求主库故障时自动切换到备库。集群环境主库192.168.1.100:5236备库192.168.1.101:5236# 全局配置 TIME_ZONE(480) LANGUAGE(cn) # 服务名定义主备地址都写上 DMDB(192.168.1.100:5236,192.168.1.101:5236) # 服务名配置 [DMDB] LOGIN_MODE(1) # 只连主库 SWITCH_TIMES(60) # 切换尝试60次 SWITCH_INTERVAL(1000) # 每次切换间隔1000ms AUTO_RECONNECT(1) # 自动重连关键参数说明参数说明推荐值LOGIN_MODE登录模式1只连主库1SWITCH_TIMES故障切换尝试次数60SWITCH_INTERVAL切换间隔毫秒1000AUTO_RECONNECT断开后自动重连1故障切换流程客户端连接主库192.168.1.100主库故障连接失败客户端自动尝试连接备库192.168.1.101备库已被守护进程提升为主库连接成功业务无感知除了短暂的连接中断3.3 读写分离集群配置场景一主两备读写分离集群读请求分发到备库写请求走主库。集群环境主库192.168.1.100:5236备库1192.168.1.101:5236备库2192.168.1.102:5236# 全局配置 TIME_ZONE(480) LANGUAGE(cn) # 服务名定义主备地址都写上 DMRW(192.168.1.100:5236,192.168.1.101:5236,192.168.1.102:5236) # 服务名配置 [DMRW] RW_SEPARATE(1) # 开启读写分离 RW_PERCENT(30) # 主库承担30%读请求 SWITCH_TIMES(60) SWITCH_INTERVAL(1000) AUTO_RECONNECT(1)关键参数说明参数说明推荐值RW_SEPARATE读写分离开关1开启1RW_PERCENT主库承担读请求的比例0~10020~30读写分离原理写请求INSERT/UPDATE/DELETE全部发往主库读请求SELECT按比例分发到主库和备库RW_PERCENT30表示30%的读请求走主库70%走备库一主两备场景的RW_PERCENT建议备库性能好RW_PERCENT2020%读走主库80%走两个备库备库性能一般RW_PERCENT30要求强一致读RW_PERCENT100所有读都走主库不分离3.4 DSC共享存储集群配置场景三节点DSC共享存储集群所有节点都是主库负载均衡。集群环境DSC0192.168.1.110:5236DSC1192.168.1.111:5236DSC2192.168.1.112:5236# 全局配置 TIME_ZONE(480) LANGUAGE(cn) # 服务名定义所有节点地址 DSC(192.168.1.110:5236,192.168.1.111:5236,192.168.1.112:5236) # 服务名配置 [DSC] LOGIN_MODE(0) # 正常模式负载均衡 SWITCH_TIMES(60) SWITCH_INTERVAL(1000) AUTO_RECONNECT(1)DSC集群特点所有节点都是主库都可以读写LOGIN_MODE0客户端随机选择节点连接实现负载均衡某个节点故障时自动切换到其他正常节点3.5 DPC分布式计算集群配置场景DPC分布式集群通过SP节点对外提供服务。集群环境SP1192.168.1.104:5230SP2192.168.1.105:5230SP3192.168.1.106:5230# 全局配置 TIME_ZONE(480) LANGUAGE(cn) # 服务名定义所有SP节点地址 DPC(192.168.1.104:5230,192.168.1.105:5230,192.168.1.106:5230) # 服务名配置 [DPC] LOGIN_MODE(0) # 正常模式SP节点负载均衡 SWITCH_TIMES(60) SWITCH_INTERVAL(1000) AUTO_RECONNECT(1)DPC集群特点SP节点是无状态的计算节点所有SP都可以对外提供服务客户端连接任意SP都能获得完整的数据库服务某个SP故障时自动切换到其他正常SP四、dm_svc.conf配置验证4.1 验证配置是否生效# 方式1用disql连接测试disql SYSDBA/Dameng123DMDB# 方式2查看当前连接的数据库SQLSELECT SF_GET_IP();SQLSELECT * FROM V$INSTANCE;# 方式3测试故障切换-- 杀掉主库进程观察客户端是否自动切换到备库4.2 常见配置问题排查问题原因解决方法服务名找不到配置文件位置不对检查/etc/dm_svc.conf是否存在连接超时网络不通或防火墙ping和telnet测试端口不自动切换SWITCH_TIMES太小或LOGIN_MODE不对检查参数配置读写分离不生效RW_SEPARATE没开确认RW_SEPARATE(1)中文乱码字符集配置不对检查CHAR_CODE和数据库字符集第二部分数据库配置与运维管理五、数据库配置管理5.1 dm.ini核心参数dm.ini是达梦数据库的主配置文件控制数据库的各种行为。内存相关参数参数说明推荐值MEMORY_POOL共享内存池系统内存的20%BUFFER数据缓冲区系统内存的40%~60%KEEP保持缓冲区BUFFER的10%~20%SORT_BUF_SIZE排序缓冲区2~16MHASH_BUF_SIZE哈希缓冲区2~16MDICT_BUF_SIZE字典缓冲区2~8M并发相关参数参数说明推荐值MAX_SESSIONS最大会话数100~1000WORKER_THREADS工作线程数CPU核数MAX_CONCURRENT_TRX最大并发事务CPU核数*2IO相关参数参数说明推荐值CKPT_INTERVAL检查点间隔秒60~300RLOG_BUF_SIZE日志缓冲区1~8MRLOG_POOL_SIZE日志池128~512M5.2 参数查看与修改-- 查看当前参数值SELECT*FROMV$DM_INIWHEREPARA_NAMEBUFFER;-- 查看所有内存相关参数SELECTPARA_NAME,PARA_VALUE,PARA_TYPEFROMV$DM_INIWHEREPARA_NAMELIKE%BUF%ORPARA_NAMELIKE%MEMORY%;-- 修改动态参数立即生效scope1SP_SET_PARA_VALUE(1,SORT_BUF_SIZE,8);-- 修改静态参数重启生效scope2SP_SET_PARA_VALUE(2,BUFFER,8000);-- 修改会话级参数仅当前会话生效SETSORT_BUF_SIZE8;参数类型说明PARA_TYPE说明修改方式READ ONLY只读参数不能修改SYS系统级动态参数SP_SET_PARA_VALUE(1,…) 立即生效IN FILE静态参数SP_SET_PARA_VALUE(2,…) 重启生效SESSION会话级参数SET … 仅当前会话5.3 配置文件备份与恢复# 备份配置文件cp/dmdata/data/DM/dm.ini /dmdata/data/DM/dm.ini.bak.$(date%Y%m%d)# 查看配置文件修改历史# 建议每次修改前都备份出问题可以回滚# 恢复配置文件cp/dmdata/data/DM/dm.ini.bak.20260801 /dmdata/data/DM/dm.ini# 重启数据库生效六、日常运维管理6.1 数据库启动与停止# 方式1systemctl管理推荐systemctl start DmServiceDMSERVER systemctl stop DmServiceDMSERVER systemctl restart DmServiceDMSERVER systemctl status DmServiceDMSERVER# 方式2前台启动排查问题用cd/home/dmdba/dmdbms/bin ./dmserver /dmdata/data/DM/dm.ini# 方式3disql命令SQLSHUTDOWN IMMEDIATE;-- 立即关闭 SQLSHUTDOWN NORMAL;-- 正常关闭等待事务结束 SQLSTARTUP;-- 启动6.2 表空间管理-- 查看表空间SELECTTABLESPACE_NAME,STATUS,CONTENTSFROMDBA_TABLESPACES;-- 查看表空间使用率SELECTT.TABLESPACE_NAME,T.TOTAL_SIZE,F.FREE_SIZE,(T.TOTAL_SIZE-F.FREE_SIZE)*100/T.TOTAL_SIZEASUSED_PERCENTFROM(SELECTTABLESPACE_NAME,SUM(BYTES)/1024/1024ASTOTAL_SIZEFROMDBA_DATA_FILESGROUPBYTABLESPACE_NAME)TJOIN(SELECTTABLESPACE_NAME,SUM(BYTES)/1024/1024ASFREE_SIZEFROMDBA_FREE_SPACEGROUPBYTABLESPACE_NAME)FONT.TABLESPACE_NAMEF.TABLESPACE_NAME;-- 扩展表空间ALTERTABLESPACEMAINADDDATAFILE/dmdata/main02.dbfSIZE1024;-- 调整数据文件大小ALTERDATABASEDATAFILE/dmdata/main01.dbfRESIZE2048;6.3 用户和会话管理-- 查看当前所有会话SELECTSESS_ID,USER_NAME,CLNT_IP,SQL_TEXT,STATUSFROMV$SESSIONS;-- 查看活动会话SELECT*FROMV$SESSIONSWHERESTATUSACTIVE;-- 查看等待事件SELECT*FROMV$WAIT_HISTORY;-- 杀掉异常会话SP_CLOSE_SESSION(会话ID);-- 查看锁等待SELECT*FROMV$TRXWAIT;SELECT*FROMV$LOCKWHEREBLOCKED1;6.4 日志管理联机日志Redo Log-- 查看联机日志状态SELECT*FROMV$RLOG;-- 查看日志文件SELECT*FROMV$RLOGFILE;-- 手动切换日志ALTERDATABASESWITCH LOGFILE;-- 添加日志文件ALTERDATABASEADDLOGFILE/dmdata/redo03.logSIZE2048;归档日志-- 查看归档状态SELECTARCH_MODEFROMV$INSTANCE;-- 开启归档需要mount状态ALTERDATABASEMOUNT;ALTERDATABASEARCHIVELOG;ALTERDATABASEOPEN;-- 配置归档路径-- 修改dm.ini中的ARCH_INI1配置dmarch.ini-- 查看归档日志SELECT*FROMV$ARCH_FILE;-- 清理过期归档-- 用dmrman工具清理告警日志# 告警日志位置/dmdata/data/DM/dm_DMSERVER.log# 实时查看告警日志tail-f/dmdata/data/DM/dm_DMSERVER.log# 查看最近的错误grep-ierror/dmdata/data/DM/dm_DMSERVER.log|tail-50七、备份恢复管理7.1 物理备份DMRMAN# 进入dmrmancd/home/dmdba/dmdbms/bin ./dmrman# 全量备份BACKUP DATABASE/dmdata/data/DM/dm.iniFULL BACKUPSET/dmbackup/full_20260801;# 增量备份BACKUP DATABASE/dmdata/data/DM/dm.iniINCREMENT BACKUPSET/dmbackup/incr_20260802;# 查看备份集SHOW BACKUPSET/dmbackup/full_20260801;# 校验备份集CHECK BACKUPSET/dmbackup/full_20260801;# 恢复数据库RESTORE DATABASE/dmdata/data/DM/dm.iniFROM BACKUPSET/dmbackup/full_20260801;RECOVER DATABASE/dmdata/data/DM/dm.ini;RECOVER DATABASE/dmdata/data/DM/dm.iniUPDATE DB_MAGIC;7.2 逻辑备份dexp/dimp# 全库逻辑导出./dexpUSERIDSYSDBA/Dameng123localhost:5236\DIRECTORY/dmbackupFILEfull_db.dmpLOGfull_export.logFULLY# 按用户导出./dexpUSERIDSYSDBA/Dameng123localhost:5236\DIRECTORY/dmbackupFILEbiz_user.dmpLOGbiz_export.logOWNERBIZ_USER# 按表导出./dexpUSERIDSYSDBA/Dameng123localhost:5236\DIRECTORY/dmbackupFILEt_emp.dmpLOGt_emp_export.logTABLEST_EMP# 逻辑导入./dimpUSERIDSYSDBA/Dameng123localhost:5236\DIRECTORY/dmbackupFILEfull_db.dmpLOGfull_import.logFULLY7.3 备份策略建议备份类型频率保留时间用途全量物理备份每周一次4周灾难恢复增量物理备份每天一次2周日常恢复逻辑备份每周一次4周对象级恢复、迁移归档日志实时2周时间点恢复八、性能监控与调优8.1 性能监控视图-- 系统整体状态SELECT*FROMV$SYSSTAT;-- CPU使用率SELECT*FROMV$PROCESS;-- 内存使用SELECT*FROMV$MEM_POOL;-- IO统计SELECT*FROMV$IOSTAT;-- 慢SQLSELECT*FROMV$LONG_EXEC_SQLSORDERBYEXEC_TIMEDESC;-- 执行次数最多的SQLSELECT*FROMV$SQL_HISTORYORDERBYEXEC_CNTDESC;-- 表空间IOSELECT*FROMV$TABLESPACE_IOSTAT;8.2 常见性能问题排查现象可能原因排查方法CPU打满慢SQL、高并发、排序/哈希查看VL O N G E X E C S Q L S 、 V LONG_EXEC_SQLS、VLONGEXECSQLS、VSESSIONS内存不足BUFFER太小、SQL占用内存多查看V$MEM_POOL、调整BUFFERIO瓶颈全表扫描、索引失效、磁盘慢查看V$IOSTAT、执行计划锁等待长事务、行锁冲突查看VL O C K 、 V LOCK、VLOCK、VTRXWAIT连接数满应用没释放连接、连接池过大查看V$SESSIONS、调整MAX_SESSIONS8.3 AWR性能报告达梦数据库支持AWR自动工作负载库性能报告-- 创建快照DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();-- 查看快照列表SELECT*FROMSYS.WRM$_SNAPSHOT;-- 生成AWR报告HTML格式DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(开始快照ID,结束快照ID);九、故障排查方法论9.1 故障排查通用流程确认现象什么问题什么时候开始的影响范围查看日志告警日志、应用日志、系统日志检查状态数据库状态、会话状态、锁状态定位原因根据现象和日志分析根本原因制定方案针对性的解决方案实施验证执行方案并验证效果总结复盘记录问题原因和解决方案避免再犯9.2 常见故障处理故障1数据库无法启动# 步骤1查看告警日志tail-100/dmdata/data/DM/dm_DMSERVER.log# 步骤2常见原因# - 配置文件错误# - 数据文件损坏# - 磁盘空间满# - 端口被占用# - 权限问题# 步骤3根据日志错误信息针对性处理故障2连接数满-- 查看当前连接数SELECTCOUNT(*)FROMV$SESSIONS;-- 查看连接最多的IPSELECTCLNT_IP,COUNT(*)FROMV$SESSIONSGROUPBYCLNT_IPORDERBY2DESC;-- 杀掉空闲连接SP_CLOSE_SESSION(会话ID);-- 调整最大连接数SP_SET_PARA_VALUE(2,MAX_SESSIONS,1000);故障3锁等待-- 查看锁等待SELECT*FROMV$TRXWAIT;-- 查看阻塞会话SELECT*FROMV$LOCKWHEREBLOCKED1;-- 杀掉阻塞会话SP_CLOSE_SESSION(阻塞会话ID);十、学习心得dm_svc.conf是高可用的关键很多人以为主备集群搭好了就高可用了其实客户端的dm_svc.conf配置才是故障自动切换的关键。配置不对主库挂了客户端不会自动切业务照样中断。不同集群类型主备、读写分离、DSC、DPC的配置要点不一样要根据实际场景正确配置。配置管理要规范数据库参数很多不能随便改。改参数前要备份配置文件改完要记录修改内容和原因出问题能回滚。动态参数和静态参数要分清楚静态参数改了要重启才生效别改完以为生效了其实没有。运维是个细致活数据库运维涉及启动停止、表空间管理、用户会话管理、日志管理、备份恢复、性能监控、故障排查等方方面面每个环节都不能马虎。特别是备份一定要定期验证备份的可用性不能等出问题了才发现备份不能用。监控是运维的眼睛没有监控就是盲人摸象。要建立完善的监控体系CPU、内存、IO、连接数、慢SQL、锁等待这些关键指标都要监控。出问题时第一时间能看到异常才能快速定位和解决。故障排查要有方法论遇到问题不要慌按照确认现象→查看日志→检查状态→定位原因→制定方案→实施验证→总结复盘的流程一步步来。很多故障都是常见问题积累的经验多了排查起来就快了。安全和性能要平衡配置参数时安全和性能往往是矛盾的。比如审计开多了影响性能连接池大了增加数据库负担。要根据业务场景找到平衡点不能一味追求安全牺牲性能也不能为了性能忽略安全。文档和记录很重要运维工作很多是重复性的但每次遇到的问题可能不一样。要养成记录的习惯配置变更、故障处理、性能调优都要记录下来既方便自己回顾也方便团队共享。好的运维文档是团队的宝贵财富。