【达梦数据库】dblink连接[SqlServer/Mysql]报错处理

目录

背景

需要使用dblink功能连接SqlServer/Mysql数据库,在测试时有好几种报错,记录供参考。

问题1:无法测试以ODBC数据源方式访问的外部链接!

在达梦管理工具图形化测试公共外部链接时,报错:无法测试以ODBC数据源方式访问的外部链接!

问题分析&原因

ODBC类型的外部公共链接没有图形化测试功能

解决方法

直接使用dblink查远端表测试

问题2:DBLINK连接丢失

使用dblink查MYSQL远端表测试,报错:DBLINK连接丢失

问题分析&原因

查看数据库日志,报错:Can not open lib /usrlib64/libmyodbc5.so

手动查找libmyodbc5.so:find / -name libmyodbc5.so,找不到,但是可以找到libmyodbc5w.so

通过排查,原因是找不到/usrlib64/libmyodbc5.so

解决方法

建立软连接:ln -s /usr/local/mysql-odbc/lib/libmyodbc5w.so /usrlib64/libmyodbc5.so

再次使用dblink查远端表测试,无报错,问题解决

问题3:DBIINK远程服务器获取对象xxx失败,错误洋情\[FreeTDSSQL ServerCould not find stored procedure 'xxx'.]

使用dblink查SqlServer远端表测试,报错:DBIINK远程服务器获取对象xxx失败,错误洋情\[FreeTDSSQL ServerCould not find stored procedure 'xxx'.]

问题分析&原因

查看数据库日志,报错:FreeTDSSQL ServerCould not find stored procedure 'xxx'.]

使用isql -v 连接名连接SQLServer,连接不上(参考链接: Java ODBC连接SqlServer,FreeTDS/jtds 连接SqlServer)报错:[unixODBC][FreeTDS][SQL Server]Unable to connect to data source]

通过排查:操作系统找驱动配置文件odbcinst.ini和数据源DSN配置文件odbc.ini都默认找/etc目录下的,而原来安装在/usr/local/etc目录下

解决方法

把odbcinst.ini和odbc.ini文件拷贝到/etc目录下即可

参考链接

参考链接: 配置达梦dblink到sqlserver2012出现连接异常

参考链接: DM->DM通过ODBC方式创建DBLINK,报错DBLINK连接丢失

参考链接: 【有道云笔记】达梦与sqlserver之间dblink创建

参考链接: Java ODBC连接SqlServer,FreeTDS/jtds 连接SqlServer

问题4:远程操作符执行失败,错误详情\[FreeTDS SQLServerInvalid cursor state

使用dblink查SqlServer远端表测试,报错:远程操作符执行失败,错误详情\[FreeTDS SQLServerInvalid cursor state,此类问题又分为两种情况:

  • 情况1:应用端执行报错,数据库端执行不报错
  • 情况2:应用端和数据库端执行均报错。

情况1:应用端执行报错,数据库端执行不报错

问题分析&原因

官方解释:管理工具默认只取前100行数据,如果超过100行,又未获取全部数据,再次执行报错无效的游标状态

解决方法

每次获取全部数据,或者加top 取前几行等

情况2:应用端和数据库端执行均报错。

问题分析&原因

  • 大部分报错集中出现在 情况1:应用端执行报错,数据库端执行不报错,但是也有少量dblink查询会出现情况2:应用端和数据库端执行均报错
  • 更有意思的是,在测试环境中不会出现这样的问题,而在正式环境中出现了,正式环境和测试环境数据库版本&驱动版本均一致

严重怀疑是否和哪个参数有关系?比对测试环境和正式环境的dm.ini文件,还真找到一个:

通过hint提示拼接SQL:

javascript 复制代码
select  /*+ DBLINK_OPT_FLAG(509)*/ 
		字段1,字段2
from 	表1
where 	条件1
and 	条件2;

重新在应用端和数据库端执行,不会出现报错

解决方法

因为此参数为动态参数,执行执行命令修改:

javascript 复制代码
SP_SET_PARA_VALUE (1,'DBLINK_OPT_FLAG',509);

再次使用dblink查远端表测试,无报错,问题解决

相关推荐
hey you~18 分钟前
云呼叫中心坐席自动分配实战:ACD 策略、Redis+Lua 实现与排查清单
数据库·redis·lua·云呼叫中心·acd·坐席分配·坐席状态机
夜雪一千28 分钟前
MySQL 数据字典如何获得
数据库·mysql
系统集成-鹰翔33 分钟前
ERP推单数据库怎么备份:SQLite WAL模式下只复制db文件为什么可能漏任务
javascript·数据库·经验分享·后端
QianhangQianping35 分钟前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做
honsor36 分钟前
用 Grafana 做温湿度异常检测:从阈值告警到趋势预测
数据库·mysql·php
赵渝强老师1 小时前
【赵渝强老师】YashanDB Developer Center(YDC,崖山数据库开发者中心)
数据库·国产数据库·yashandb·崖山数据库
lusklusklusk1 小时前
SQL Server 为什么普通 SELECT 会阻塞 UPDATE?——行级 S 锁到表级 S 锁的锁升级原理与实验验证
数据库·mysql·oracle
Leo.yuan1 小时前
企业业务人员如何独立完成数据分析?2026年自助BI工具选型与应用指南
大数据·数据库·人工智能
roman_日积跬步-终至千里1 小时前
数仓开发的三层责任:业务定义、模型设计与 SQL 实现
数据库·数据仓库·sql·数据建模
瀚高PG实验室1 小时前
瀚高数据库创建新数据库卡住问题排查
数据库·postgresql·瀚高数据库