【问题标题】:linked server problem at sql server while connecting to oracle dbms连接到 oracle dbms 时 sql server 上的链接服务器问题
【发布时间】:2011-05-30 06:34:57
【问题描述】:

我根据以下文章创建了链接服务器定义:
http://www.ideaexcursion.com/2009/01/05/connecting-to-oracle-from-sql-server/

我的目标是在 Oracle 11gR2 中将行传输到表中。

创建链接服务器后,每当我尝试使用如下查询选择表时:

SELECT *
FROM [192.168.1.188]..[ESIPARIS].[T_ERROR_LOG]

我收到以下错误:

Msg 7356, Level 16, State 1, Line 1
The OLE DB provider "OraOLEDB.Oracle" for linked server "192.168.1.188"
supplied inconsistent metadata for a column. The column "EVENT_OBJECT"
(compile-time ordinal 2) of object ""ESIPARIS"."T_ERROR_LOG"" was reported
to have a "LENGTH" of 50 at compile time and 100 at run time.

另一件事是,每当“Sql Server Management Studio”准备选择语句时,它会重复字段名称,一些字段重复如下:

SELECT [EVENT_DATE]
      ,[EVENT_DATE]
      ,[EVENT_DATE]
      ,[EVENT_DATE]
      ,[EVENT_OBJECT]
      ,[EVENT_OBJECT]
      ,[EVENT_OBJECT]
      ,[EVENT_OBJECT]
      ,[MESSAGE]
      ,[MESSAGE]
      ,[MESSAGE]
      ,[MESSAGE]
      ,[EVENT_ID]
  FROM [192.168.1.188]..[ESIPARIS].[T_ERROR_LOG]

很高兴收到您的任何想法,感谢您的关注,

最好的问候,

凯汉·尤克塞尔

【问题讨论】:

    标签: sql-server database oracle linked-server


    【解决方案1】:

    有许多情况可能会引发此错误:

    • 您在 SQL Server 中的分布式查询引用了一个视图,该视图具有 Oracle 中的基础表,其中主键列以某种方式创建,Find out more
    • 查询带有数字列的视图时存在错误。 Find out more
    • 这可能是驱动程序不兼容的问题,例如使用 MS OleDB 驱动程序而不是 Oracle 提供的驱动程序。

    如果不是驱动程序,一种可能的解决方法是使用OPENQUERY。否则。 this support note 包含有关对链接服务器和 Oracle 进行故障排除的一般信息。


    (这个问题是一个相当普遍的问题,所以事实证明,实际的解决方案并不是我建议的。为了完整起见,我将@kayhanyüksel 的解决方案合并到此响应的正文中。)

    通过更改侦听器和 tnsnames 解决了这个问题。我们现在能够从 SQL Server 连接到 Oracle 11gR2(在 64 位 Red Hat Enterprise Linux 5.4 上运行),反之亦然。后面的文件是 - Making a Connection from Oracle to SQL Server
    - The Oracle Gateways documentation

    【讨论】:

    • APC,非常感谢,开始查看您的链接。
    • APC,我已经阅读了您发送的注释,再次非常感谢,但是更改数据类型似乎不是一个好的解决方案,为什么我应该将数字更改为 nvarchar2,例如,如果我需要是吗?
    • @KayhanYuksel - 您阅读过该错误的解决方法吗?一种可能的解决方案是在本地 (SQL Server) 数据库中构建视图。
    • APC,试过了,还是一样。尝试了 MS 和 Oracle 驱动程序,但结果没有改变。我们将尝试 180 度不同的方式,通过 Oracle DBMS 访问 SQL Server。
    • 但是 het 的配置还有其他问题。服务
    【解决方案2】:

    我也遇到了同样的问题:栏目……被举报了 在编译时的“长度”为 50,在运行时为 100。并在选择时重复列名。 当我试图从 ORACLE 11g 数据库中运行 MS SQL 查询时

    我使用了 follownig 类型的查询,它成功了!

      DECLARE @TSQL varchar(8000)
      SELECT  @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM TableName'')'
      EXEC (@TSQL)
    

    其中 MyLinkedServer 是链接服务器的名称,并且 TableName 是表的名称。

    这里有帮助我的文章的链接:http://support.microsoft.com/kb/314520

    【讨论】:

      【解决方案3】:

      旧线程,但它可能对某人有用。 当我最近遇到这个错误时,使用 MS OleDB 驱动程序而不是 Oracle OleDB 提供程序作为提供程序解决了这个问题。

      【讨论】:

        【解决方案4】:

        我在使用 11g 客户端时也遇到了同样的问题,但在使用 OPENQUERYto_char 的客户端版本 12 时它就消失了。

        我确认SQL management studio(无论是什么版本)给出了许多重复的字段。唯一安装最后一个驱动程序版本我们可以有一致的查询。希望对你有用!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-21
          • 1970-01-01
          • 2021-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多