使用 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 |
检查是否开启了通信加密
若当前为安全版数据库,需要检查是否开启了通信加密功能,若已开启需要 SSL 证书才能正常登陆。
可检查 dm.ini 中 ENABLE_ENCRYPT
的值是否为 0。
远程登录场景中,检查网络
通过 ping
命令检查网络是否通畅,通过 telnet
命令检查端口是否通畅。
远程登录场景中,检查防火墙
如果服务在本地连接正常,但是使用远程连接时提示网络异常,一般情况下是防火墙引发的问题。此时需要检查防火墙相关设置。若不能直接关闭防火墙,就需要在数据库服务器上开启对应端口远程访问的权限(默认为5236)。服务器上的防火墙一般有两种:firewalld 和 iptables。
- firewalld 的基本使用如下:
(1)firewalld 的查看、关闭和重启等(以 Linux 环境为例)。
---启动一个服务 |
(2)配置 firewalld-cmd。
--查看版本 |
(3)开启一个端口。
--添加(--permanent永久生效,没有此参数重启后失效) |
- iptables 使用方法如下:
(1)检查并安装 iptables。
--查看防火墙状态,若显示iptables.service could not be found,表示 iptables 没有安装 |
(2)开启相关规则的命令。
--先允许所有 |
达到最大会话数限制,无法建立新的连接
确定是否达到最大会话数限制,在 ../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)
,修改完成后,需要重启数据库服务生效。
检查实例是否创建成功
如果在建立实例中途中断,建立实例的文件夹可能被创建,但是实际实例是没有建立成功的,这个时候如果登陆,也可能出现报错。此时,需要删除当前没建立完整的实例,重新建立。