Oracle gateway 报错 ORA-01002: fetch out of sequence

发布于 2022-09-12 04:22:11 字数 1866 浏览 30 评论 0

环境

oracle 版本 11.2r sqlserver 2012

需求

Oracle 通过 gateway dblink 打通和 sqlserver的连接。用户能够直接访问oracle获得sqlserver的数据。

关键问题

select * from dbo.Alarm@LINK_ASDWMS
> ORA-01002: fetch out of sequence
ORA-02063: preceding line from LINK_ASDWMS

> 时间: 0.353s

当所有配置完成后,查询sqlserver下的表时,会报这个错误。

猜测

  1. 猜测一

通过配置,oracle应该是可以检测到sqlserver的存在

我为什么会得出这个结论,原因如下:

当我修改 select 语句,查询一个完全不存在的表时

select * from dbo.NotFount@LINK_ASDWMS
> ORA-00942: table or view does not exist
[Oracle][ODBC SQL Server Driver][SQL Server]对象名 'DBO.NOTFOUNT' 无效。 {42S02,NativeErr = 208}[Oracle][ODBC SQL Server Driver][SQL Server]无法预定义语句。 {42000,NativeErr = 8180}
ORA-02063: preceding 2 lines from LINK_ASDWMS

> 时间: 0.1s

能够精准的报错,提示表不存在。

  1. 猜测二

数据可能没有正常返回到oracle就报错了,因为查了两张表,一张有 163373 万条数据,另一个是0条数据,执行速度都差不多,在有些情况下,0条数据的表执行速度甚至还更慢。

配置

# C:\product\11.2.0\tg_1\dg4msql\admin\initdg4msql.ora
HS_FDS_CONNECT_INFO=[172.16.xxx.xx1,1433]/instanceName/dbName
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=sa
HS_FDS_RECOVERY_PWD=xxxxxxxxx
# C:\product\11.2.0\tg_1\NETWORK\ADMIN\listener.ora
SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (SID_NAME= dg4msql)
      (ORACLE_HOME = C:\product\11.2.0\tg_1)
      (PROGRAM= dg4msql)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-V11L22M0BL3)(PORT = 15210))
    )
  )
ADR_BASE_LISTENER = C:\product\11.2.0\tg_1

Dblink 创建语句

create public database link LINK_ASDWMS connect to "sa" identified by "xxxxxxxx" using '(DESCRIPTION =
  (ADDRESS =
    (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 15210)
  )
  (CONNECT_DATA =
    (SERVICE_NAME = ASD_WMS)
  )
  (HS = OK)
)';

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文