0
点赞
收藏
分享

微信扫一扫

达梦数据库登陆失败的排查方法


使用 DM 数据库时,有时会碰到登录失败的情况。根据使用的连接工具不同,问题具体可能表现为网络通讯异常或者 socket 连接失败。此问题通常与连接信息、网络、会话数等配置有关,以下提供排查方法。

检查数据库是否已正常启动

  • Windows 环境下:通过资源管理器看是否有 dmsvc.exe 进程,或者打开 DM 服务查看器查看服务状态。
  • Linux 环境下:通过​​ps -ef | grep dmserver​​ 看是否有 dmserver 进程。

如果进程存在,查看数据库日志,一般在 ​​../dmdbms/log​​​ 下,日志名为 ​​dm_实例名_年月.log​​​,例如 ​​dm_DMSERVER_202002.log​​​,在文件中查看启动过程中是否已经出现 ​​SYSTEM IS READY​​ 字样,如果出现该字样说明正常启动了,如果没有,需详细查看日志具体分析。

检查连接数据库的 IP 地址和端口号

  • Windows 环境下:执行​​ipconfig​​​ 查看 IP 信息,在数据库目录下 dm.ini 中找到​​PORT_NUM​​ 确认端口信息。
  • Linux 环境下:执行​​ifconfig​​​ 查看 IP 信息,在数据库目录下 dm.ini 中找到​​PORT_NUM​​ 确认端口信息。

参数说明:​​PORT_NUM​​​ 服务器通讯端口号,有效值范围(1024~65534),默认值 5236。
disql 中按照以下方式登录:

./disql SYSDBA/SYSDBA@127.0.0.1:8236
服务器 [127.0.0.1:8236]: 处于普通打开状态
登录使用时间: 66.208(毫秒)

检查是否开启了通信加密

若当前为安全版数据库,需要检查是否开启了通信加密功能,若已开启需要 SSL 证书才能正常登陆。
可检查 dm.ini 中 ​​​ENABLE_ENCRYPT​​ 的值是否为 0。

远程登录场景中,检查网络

通过 ​​ping​​​ 命令检查网络是否通畅,通过 ​​telnet​​ 命令检查端口是否通畅。

远程登录场景中,检查防火墙

如果服务在本地连接正常,但是使用远程连接时提示网络异常,一般情况下是防火墙引发的问题。此时需要检查防火墙相关设置。若不能直接关闭防火墙,就需要在数据库服务器上开启对应端口远程访问的权限(默认为5236)。服务器上的防火墙一般有两种:firewalld 和 iptables。

firewalld 的基本使用如下:

(1)firewalld 的查看、关闭和重启等(以 Linux 环境为例)。

---启动一个服务
systemctl start firewalld.service

---关闭一个服务
systemctl stop firewalld.service

---重启一个服务
systemctl restart firewalld.service

---显示一个服务的状态
systemctl status firewalld.service

---在开机时启用一个服务
systemctl enable firewalld.service

---在开机时禁用一个服务
systemctl disable firewalld.service

---查看服务是否开机启动
systemctl is-enabled firewalld.service

---查看已启动的服务列表
systemctl list-unit-files|grep enabled

---查看启动失败的服务列表
systemctl --failed

(2)配置 firewalld-cmd。

--查看版本
firewall-cmd --version

--查看帮助
firewall-cmd --help

--显示状态
firewall-cmd --state

--查看所有打开的端口
firewall-cmd --zone=public --list-ports

--更新防火墙规则
firewall-cmd --reload

--查看区域信息
firewall-cmd --get-active-zones

--查看指定接口所属区域
firewall-cmd --get-zone-of-interface=eth0

--拒绝所有包
firewall-cmd --panic-on

--取消拒绝状态
firewall-cmd --panic-off

--查看是否拒绝
firewall-cmd --query-panic

(3)开启一个端口。

--添加(--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=80/tcp --permanent

--重新载入
firewall-cmd --reload

--查看
firewall-cmd --zone= public --query-port= 80/tcp

--删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent

iptables 使用方法如下:

(1)检查并安装 iptables。

--查看防火墙状态,若显示iptables.service could not be found,表示 iptables 没有安装
service iptables status

---安装 iptables
yum install -y iptables

---安装iptables-services
yum install iptables-services

--查看iptables现有规则
iptables -L -n

--关闭防火墙
service iptables stop

(2)开启相关规则的命令。

--先允许所有
iptables -P INPUT ACCEPT

--清空所有默认规则
iptables -F

--清空所有自定义规则
iptables -X

--所有计数器归 0
iptables -Z

--允许来自于 lo 接口的数据包(本地访问)
iptables -A INPUT -i lo -j ACCEPT

--开放22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

--允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

--允许接受本机请求之后的返回数据 RELATED,是为FTP设置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

--其他入站一律丢弃
iptables -P INPUT DROP

--所有出站一律接收
iptables -P OUTPUT ACCEPT

--所有转发一律丢弃
iptables -P FORWARD DROP

--保存配置并重启
service iptables save
systemctl restart iptables.service

达到最大会话数限制,无法建立新的连接

确定是否达到最大会话数限制,在 ​​../dmdbms/log​​​ 目录下,查看当月日志。例如,8 月的日志名为:​​dm_DMSERVER_201808.log​​​ 若日志中有 ​​reach the maxsession limit​​​ 的提示,则说明达到最大会话数限制。
若确认是由此原因导致无法访问数据库,则需要进行以下两个方面的排查:

  • 应用连接池配置,连接池最大会话数要进行合理的设置。
  • dm.ini 文件中,​​MAX_SESSIONS​​ 参数默认为 100,可根据实际需要调整。

​MAX_SESSIONS​​:系统允许同时连接的最大数,同时还受到 LICENSE 的限制,取二者中较小的值,有效值范围 (1~65000)。
例如:应用连接池设置的最大连接数设置为 500,且 license 为正式企业版、测试企业版,则需要修改 dm.ini 中 ​​​MAX_SESSION​​​ 参数 500,在数据库中执行 ​​SP_SET_PARA_VALUE(2,‘MAX_SESSIONS’,600)​​,修改完成后,需要重启数据库服务生效。

检查实例是否创建成功

如果在建立实例中途中断,建立实例的文件夹可能被创建,但是实际实例是没有建立成功的,这个时候如果登陆,也可能出现报错。此时,需要删除当前没建立完整的实例,重新建立。

欢迎关注个人博客​​Jackin's Blog​​

举报

相关推荐

0 条评论