回顾
上次笔记总结和完成了dm的基本操作、概念理解和“本地工程与本地达梦”情况下、结合实例的数据迁移、写入操作
关于一个django工程如何与达梦数据库连接的全程总结 - 言行一 - 博客园 (cnblogs.com)
接下来针对“本地工程与远程达梦”情况进行 问题描述和逐步解决 的相关经验分享
目前情况
项目:
django框架下的前后端分离项目,后端采用python,前端vuE
问题:
本地负责使用pycharm和webstorm分别运行前后端,在此本地机上,使用“远程桌面连接”输入指定ip以操控远端服务器。远端只扮演数据库角色,本地的后端项目settings中,在DATABASE部分写入数据库的具体信息,运行migrate迁移命令时报错如下:
Traceback (most recent call last):
...略
SystemError: <class 'dmPython.Connection'> returned a result with an exception set
向chatgpt反映后认为“问题出现在本地的项目和具体代码上”,
但无法解释我在本地仅改动数据库指向的引擎和IP,就可以成功执行迁移命令且成功写入新数据
具体行为:
-
向本地的MySQL和达梦数据库(数据库和项目在同一电脑,即127.0.0.1)可以成功连接 √
-
向远端的MySQL数据库可以成功连接 √
-
唯独远端的达梦数据库报错如上述 √
我认为工程文件是无误的,如果代码和环境有问题那么无法和本地的达梦数据库成功连接,而这与事实相悖
与供应商客服沟通得出以下部分检查步骤
可排除的要素
确定参数
name
在远程的服务器上的DM管理工具中新建查询,运行
select name from v$database
查看结果以确认应该往name后写什么
host
远端终端内使用ipconfig
命令查看ip应该写什么(下图的ping
命令在后文)
关于 6001 网络通讯异常
确认数据库是否真的正常启动了,如果未正常启动,登录时报错误号:6001,错误消息:网络通信异常
Windows 通过 资源管理器看 后台 是否有 dmsvc.exe 进程
在达梦自带的“服务查看器”应用 检查DmAPService、DmServiceDMSERV是在运行的;
关于Datagrip
DataGrip (DG) 出自JetBrains公司,是一款跨平台的可视化数据库管理工具,可在Windows,OS X 和 Linux上使用;同时支持多种数据库Oracle,PostgreSQL,MySQL等等;使用其连接到数据库服务器,执行sql、创建表、创建索引以及导出数据等。在此插入DG是因为笔者使用该工具来测试连接(dm官方的“管理工具”亦可)
具体操作由菜单栏常规创建,只需注意填写好DriversName,在General中Driver files添加并选择 DmJdbcDriver18.jar
。Class选择dm.jdbc.driver.DmDriver
,如下图
默认端口参数
端口号可以在数据库安装目录下的 dm.ini
文件中找到 PORT_NUM
确认
ping和telnet
通过 ping 命令(例如在命令提示符内ping www.baidu.com
看是否有回执)检查网络是否通畅,
通过 telnet 命令检查端口是否通畅,具体的使用方法请自行通过网络搜索
最大会话数限制
确定是否达到最大会话数限制(无法建立新的连接),在 dmdbms/log 目录下,查看当月日志。例如本月(10 月)的日志名为:dm_DMSERVER_202310.log
若日志中有 reach the maxsession limit
的提示,则说明达到最大会话数限制
防火墙
本地机和远端的阿里服务器均已从注册表强制关停了防火墙(风险较大,属于最后手段,个人按需);
最终解决措施
通过由本地ping到远端以此方式检查问题,即本机发起
ping 47.92.208.149
与 由本地ping到另一服务器(ping 39.105.190.141
)发现差异:
由此暂定解决方式为重新在141服务器内从头开始配置达梦与dmPython环境和资源编译。