单机部署结构如下,涉及以下问题处理
一、磁盘常见问题处理
1.磁盘性能低下
现象:iostat显示%util持续>90%,await值过高
解决方案:
(1)分离数据文件与日志文件到不同物理磁盘
(2)调整数据库I/O参数:
SP_SET_PARA_VALUE(1, 'DIRECT_IO', 2); -- 启用Native AIO
SP_SET_PARA_VALUE(1, 'IO_THR_GROUPS', 16); -- 增加I/O线程组
(3)升级存储为SSD或NVMe设备
2.磁盘坏道处理
(1)立即停止写入操作
(2)使用badblocks检测坏道:
badblocks -v /dev/sdX > badsectors.txt
(3)通过e2fsck标记坏块:
e2fsck -l badsectors.txt /dev/sdX
(4)更换故障磁盘
3.RAID阵列降级
应急处理:
(1)备份关键数据
(2)更换故障物理磁盘
(3)执行阵列重建:
megacli -PdReplaceMissing -PhysDrv[E:S] -ArrayN -rowN -aN
二、内核常见问题处理
1.计划缓存失效
现象:V$CACHEPLN中绑定计划标记为N(未绑定)
解决方案:
(1)重新绑定计划:
SP_BIND_SQL('SELECT * FROM T1 WHERE C1=?', 'HINT_INDEX(T1 IDX_C1)');
(2)清理无效缓存
SP_CLEAR_PLAN_CACHE(); -- 清理所有计划缓存
2.内存不足导致启动失败
现象:日志报错 mem_malloc_ex2 out of memory 或 RT_HEAP_TARGET illegal。
解决:
(1)调整内核参数
临时生效
echo 0 > /proc/sys/vm/overcommit_memory
永久生效(编辑/etc/sysctl.conf)
vm.overcommit_memory = 0
sysctl -p
(2)降低数据库内存参数
SP_SET_PARA_VALUE(2, 'BUFFER', 8000); -- 调整为8GB
SP_SET_PARA_VALUE(2, 'MEMORY_POOL', 1000);
3.内存硬件故障(SIGBUS信号)
现象:日志报错 DmServiceDM02.service: main process exited, code=killed, status=7/BUS
排查步骤:
(1)检查操作系统日志
dmesg | grep -i 'error|SIGBUS'
grep -i 'level 3 translation fault' /var/log/messages
(2)硬件诊断
运行内存检测工具(如memtest86)。
更换故障内存条,确保服务器散热正常。
三、用户资源限制问题处理
1.会话数超限问题处理
现象:日志报错 reach maximum session limitation,即使调整MAX_SESSIONS参数仍无效。
原因分析:
应用使用被锁定的用户持续发起连接请求,导致无效会话堆积。
通过查询V$SESSIONS发现某个IP的STARTUP状态会话数量异常。
解决步骤:
(1)检查异常会话分布:
SELECT CLNT_IP, STATE, COUNT()
FROM V$SESSIONS
GROUP BY CLNT_IP, STATE
HAVING COUNT() > 100; -- 统计异常IP和会话状态
(2)识别锁定用户:
SELECT USERNAME, ACCOUNT_STATUS
FROM DBA_USERS
WHERE ACCOUNT_STATUS = 'LOCKED'; -- 查询被锁定用户
(3)解锁用户并清理会话
ALTER USER 用户名 ACCOUNT UNLOCK; -- 解锁用户
SP_CLOSE_SESSION(SESS_ID); -- 终止异常会话(需替换实际SESS_ID)
(4)重启数据库服务:彻底释放残留的STARTUP状态会话。
2.用户登录失败与锁定策略
配置登录失败策略:
ALTER USER 用户名 LIMIT FAILED_LOGIN_ATTEMPTS 3, PASSWORD_LOCK_TIME 10;
-- 允许3次失败尝试,锁定10分钟
注意事项:
被锁定的用户需手动解锁,否则无法建立新会话。
监控DBA_USERS视图,定期检查锁定状态。
3.用户登录失败与锁定策略
现象:用户解锁后仍无法登录,报“网络通信异常”。
排查步骤:
(1)检查用户权限与资源限制
SELECT * FROM DBA_USERS WHERE USERNAME = '用户名'; -- 确认用户状态和资源限制
(2)调整启动方式:
停止前台服务:使用命令行或脚本后台启动数据库。
验证网络配置:检查防火墙或安全策略是否拦截连接。
停止数据库服务
systemctl stop DmServiceDM
命令行启动数据库
dmserver path=/dm/data/DAMENG/dm.ini
四、用户环境变量问题处理
1.Windows环境ODBC连接问题
问题现象:
Microsoft OLE DB Provider for ODBC Drivers错误'80004005'加密模块加载失败
原因分析:
(1)权限不足:达梦安装目录的bin文件夹权限未开放,导致无法加载第三方动态库(如libeay32.dll、ssleay32.dll)。
(2)环境变量缺失:未将达梦bin目录添加到系统PATH变量。
(3)动态库冲突:系统目录中存在旧版本动态库,与达梦所需版本冲突。
解决方案:
(1)开放目录权限:
右键点击达梦安装目录的bin文件夹 → 选择“属性” → “安全” → 添加EVERYONE用户并授予“完全控制”权限。
将bin目录下的libeay32.dll和ssleay32.dll复制到C:\Windows\System32目录。
(2)配置环境变量:
将达梦bin目录(如C:\dmdbms\bin)添加到系统PATH变量:
右键“此电脑” → “属性” → “高级系统设置” → “环境变量” → 编辑PATH变量。
(3)解决动态库冲突:
若系统自带动态库版本不兼容(如Windows Server 2008),直接替换系统目录中的文件
copy C:\dmdbms\bin\libeay32.dll C:\Windows\SysWOW64
copy C:\dmdbms\bin\ssleay32.dll C:\Windows\SysWOW64\
2.Linux环境ODBC连接问题
问题现象:
Data source name not found and no default driver specified
原因分析:
(1)ODBC配置文件路径不一致:odbcinst -j与odbc_config显示的路径不同。
(2)环境变量未生效:未正确设置ODBCINI和ODBCSYSINI。
解决方案:
(1)手动指定配置文件路径:
export ODBCINI=/usr/local/etc/odbc.ini
export ODBCSYSINI=/usr/local/etc
将上述命令添加到用户环境变量文件(如~/.bashrc)并执行source ~/.bashrc。
(2)检查并修复依赖库路径:
检查动态库依赖
ldd /opt/dmdbms/bin/libdodbc.so
添加达梦bin目录到LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/dmdbms/bin:$LD_LIBRARY_PATH
3、Python连接问题
问题现象:
ImportError: DLL load failed 或 libdmdpi.so: cannot open shared object file
解决方案:
(1)配置环境变量:
export PATH=$PATH:/dmdbms/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dmdbms/bin
永久生效:将上述命令添加到~/.bash_profile并执行source ~/.bash_profile。
(2)处理字符编码问题:
在Python连接参数中添加local_code=1:
import dmPython
conn = dmPython.connect(user='SYSDBA', password='SYSDBA', server='localhost', port=5236, local_code=1)
4、OCI驱动配置(Oracle与达梦DBLINK)
问题现象:
DBLINK加载库文件失败 或 TNS:could not resolve the connect identifier specified
解决方案:
(1)安装Oracle Instant Client:
下载并解压instantclient-basic和instantclient-odbc包。
创建符号链接解决依赖:
ln -s /usr/lib64/libnsl.so.2 /usr/lib64/libnsl.so.1
ln -s /opt/oracle/instantclient_19_10/libclntsh.so.19.1 /usr/lib64/libclntsh.so
(2)配置环境变量:
export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_10:$LD_LIBRARY_PATH
export PATH=$PATH:/opt/oracle/instantclient_19_10
(3)创建DBLINK:
CREATE PUBLIC LINK "ORCL" CONNECT 'ORACLE' WITH SYSDBA IDENTIFIED BY "SYSDBA" USING '192.168.1.100:1521/ORCL';
五、归档常见问题处理
1.归档日志不连续
现象:备份时报错“归档日志不连续”。
解决:
检查归档配置是否被意外修改,确保归档路径一致。
执行检查点刷新:
sql
CHECKPOINT(100);
2.磁盘空间不足导致归档失败
现象:归档目录空间满,数据库挂起。
解决:
清理过期归档文件或增大 ARCH_SPACE_LIMIT。
监控命令:
df -h /dm/arch #查看磁盘使用率
du -sh /dm/arch/* #查看归档文件大小
3.归档配置无效(错误号-8216)
原因:dmarch.ini 配置错误或权限问题。
检查步骤:
确认 dmarch.ini 文件存在且路径正确。
确保归档目录权限为 dmdba:dinstall。
查询归档状态:
SELECT * FROM V$ARCH_STATUS WHERE ARCH_STATUS != 'VALID';
六、备份常见问题处理
1.备份报错[-8216]: 归档日志不连续
原因:备份时未包含连续归档日志。
解决:
CHECKPOINT(100); -- 强制刷新检查点
BACKUP ARCHIVE LOG ALL; -- 重新备份归档
2.备份期间IO过高导致连接超时
限速备份:
BACKUP DATABASE FULL BACKUPSET '/dm/bak/full_20231001' LIMIT READ SPEED 300;
调整连接超时(DEM平台):
jdbc:dm://192.168.1.100:5236?connectTimeout=50000
3.备份权限问题
授权用户备份权限:
GRANT BACKUP DATABASE TO BK_USER;
文章
阅读量
获赞