使用 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)
,修改完成后,需要重启数据库服务生效。
检查实例是否创建成功
如果在建立实例中途中断,建立实例的文件夹可能被创建,但是实际实例是没有建立成功的,这个时候如果登陆,也可能出现报错。此时,需要删除当前没建立完整的实例,重新建立。