注册

golang驱动问题

berserk 2023/07/05 707 0

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM Database Server 64 V8
DB Version: 0x7000c
03134283938-20221019-172201-20018
driver 8.1.3.12
【操作系统】:centos7
【CPU】: Intel Xeon Processor
【问题描述】*:
驱动不支持自动重连

一般情况下访问db的代码
dsn := "dm://xxx:xxx@xxxxx:5236?autoCommit=false"
db, err := sql.Open("dm", dsn)
db.Exec("xxxx")

sql.Db是个包含连接池的对象,正常golang的代码,后面使用db一般都会复用这个对象,而不是重新Open一个。
如果停掉达梦服务器,db.Exec(xxx)会返回网络通信异常。这个是正常的。
但如果启动达梦服务器,恢复服务后, db.Exec(xxx),并不会自动恢复,而是继续返回网络通信异常。必须重新Open,得到新的db对象之后才能连上服务器

如果是mysql的话,mysql服务器一旦恢复,db.Exec就会恢复,不需要应用自己重建db。

这块本身可以在应用层面检查异常,重建db来解决。但感觉并不合理,这块如果要降低迁移成本,应该把这个重连机制加到驱动中,而不是逼迫应用自己去检查异常,重建db对象。

补充一下
groups.google.com/g/golang-nuts/c/qd2TEndsxi4

可以参考下这个
postgresql的驱动一开始也没有这个逻辑,后面加上了

现在的问题就是同样的代码,mysql/postgre驱动,db重启,进程不用重启,进程恢复后业务自动恢复
达梦驱动,db重启后,进程永远连不了db,必须重启进程,或者增加监测机制,自己主动重建db对象

回答 0
暂无回答
扫一扫
联系客服