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

使用 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),修改完成后,需要重启数据库服务生效。

检查实例是否创建成功

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DB实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值