当前位置: 首页 > news >正文

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

目录

  • 背景
  • 问题1:无法测试以ODBC数据源方式访问的外部链接!
    • 问题分析&原因
    • 解决方法
  • 问题2:DBLINK连接丢失
    • 问题分析&原因
    • 解决方法
  • 问题3:DBIINK远程服务器获取对象[xxx]失败,错误洋情[[FreeTDS][SQL Server]Could not find stored procedure '`xxx`'.]
    • 问题分析&原因
    • 解决方法
    • 参考链接
  • 问题4:远程操作符执行失败,错误详情[[FreeTDS] [SQLServerInvalid cursor state]
    • 情况1:应用端执行报错,数据库端执行不报错
      • 问题分析&原因
      • 解决方法
    • 情况2:应用端和数据库端执行均报错。
      • 问题分析&原因
      • 解决方法

背景

需要使用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]失败,错误洋情[[FreeTDS][SQL Server]Could not find stored procedure ‘xxx’.]

使用dblink查SqlServer远端表测试,报错:DBIINK远程服务器获取对象[xxx]失败,错误洋情[[FreeTDS][SQL Server]Could not find stored procedure ‘xxx’.]
在这里插入图片描述

问题分析&原因

查看数据库日志,报错:[FreeTDS][SQL Server]Could 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:

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

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

解决方法

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

SP_SET_PARA_VALUE (1,'DBLINK_OPT_FLAG',509);

在这里插入图片描述
再次使用dblink查远端表测试,无报错,问题解决

相关文章:

  • 百度搜索融合 DeepSeek 满血版,开启智能搜索新篇
  • SVM对偶问题
  • Redis 监视器:深入解析与实战指南
  • HomeAssistant 发现MQTT设备(温度,湿度,开关)
  • DelayQueue实现原理
  • 基于Vulhub靶场 | CVE-2017-12615 Tomcat文件上传漏洞
  • resultType与resultMap的区别
  • C++基础:引用,内联函数,auto,类的两种定义方式
  • 【含文档+PPT+源码】基于微信小程序的校园志愿者管理系统的设计与实现
  • CSS3 面试题 超基础 一
  • DAY07 Collection、Iterator、泛型、数据结构
  • Docker 部署 Dify:轻松集成 Ollama 和 DeepSeek
  • HTML应用指南:利用GET请求获取全国乐乐茶门店位置信息
  • 关于 C++ 二叉树的总结汇报
  • 对话智面创始人陶然:一是初心和心态,二是坚持和心力
  • TinyVue自动导入插件重大升级,@opentiny/unplugin-tiny-vue1.0.0版本开启单组件包引入新模式
  • Visual Studio Code的下载安装与汉化
  • 深入解析 Flutter Riverpod:从原理到实战
  • 2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序
  • 理解三种哈希算法:MD5、CRC、SHA256
  • 女外交官郑璇已任中国驻莫桑比克大使
  • 安徽省委副秘书长、省委政研室主任余三元调任省社科院院长
  • 《新时代的中国国家安全》白皮书(全文)
  • 5月12日-14日,上海小升初民办初中进行网上报名
  • 1156万+1170万,静安、宝山购彩者击中大乐透头奖
  • 社恐也能嗨起来,《孤独摇滚》千人观影齐舞荧光棒