Bat*_*ech 5 sql-server linked-server sql-server-2014
我使用 SQL Server 2014 链接服务器连接到 Oracle 11gR2 (11.2.0.3) 数据库,使用 ODAC 12.1.0.2.4 Oracle OLE DB 提供程序。我有一个存储过程,它位于 SQL 2014 数据库中,并使用以下语法通过链接服务器将本地表中的数据插入到远程 Oracle 表中:
insert into LinkedServerName..RemoteSchema.RemoteTable(column)
select column from localSQLServerTable
Run Code Online (Sandbox Code Playgroud)
但是,我在插入行中收到以下错误:
消息 7356,级别 16,状态 1,过程 {MyProcName},第 1 行链接服务器“{MyLinkedServer}”的 OLE DB 提供程序“OraOLEDB.Oracle”为列提供了不一致的元数据。据报告,对象“{remote table name}”的列“{columnName}”(编译时序数为 23)在编译时的“DBCOLUMNFLAGS_ISFIXEDLENGTH”为 16,在运行时为 0。
有问题的列在 Oracle 中定义为CHAR(1 BYTE)
数据类型。
安装了“64 位 ODAC 12c 第 4 版 (12.1.0.2.4) Xcopy for Windows x64”,从http://www.oracle.com/technetwork/database/windows/downloads/index-下载名称“ODAC121024Xcopy_x64.zip” 090165.html
尽管 Oracle 支持说明 207303.1 指出 12c 客户端可与 11gR2 客户端一起使用,但此错误似乎是由 2 个不同版本之间的兼容性问题引起的。为了解决这个问题,我按照以下步骤操作:
uninstall.bat all d:\oracle
,其中 d:\oracle 是我的 Oracle 主位置。install.bat all d:\oracle11gr2 odac11gr2
。下载地址:http : //www.oracle.com/technetwork/database/windows/downloads/index-090165.html d:\oracle11gr2;d:\oracle11gr2\bin
在 SQL Server Management Studio(SQL Server 2012 实例)中,我使用 12c ODAC Provider 创建了一个指向 Oracle 12c 数据库的链接服务器。
我在尝试以这种方式从 Oracle 数据库查询表时遇到了“链接服务器的 OLE DB 提供程序“OraOLEDB.Oracle”[???] 为列提供了不一致的元数据...”错误SELECT * FROM [LINKEDSERVER]..[SCHEMA].[TABLE]
我尝试安装版本 11 ODAC 提供程序,但仍然得到相同的结果。
对我有用的是仔细阅读错误消息,找出导致错误的列,然后在 Oracle 端对这些列进行 CAST 或更改为不同的数据类型。有一次,我必须将列从 NUMBER(?,0) 更改为 INT 或 DECIMAL(?,X),其中 X 大于零。还有一次,我不得不将 CHAR(6) 更改为 VARCHAR(6) 才能得到它。
其他人成功地使用了OPENQUERY
一种解决方法,如果我们没有能力调整 Oracle 端的列数据类型,这可能是我们唯一的选择。
我确信有人拥有专业技术知识可以更深入地研究这个问题,但我的感觉是错误在于 SQL Server 和 Oracle 数据提供程序之间的相互作用。甲骨文和微软彼此并不完全友好,或者倾向于为了我们用户的利益而互相帮助。
归档时间: |
|
查看次数: |
13321 次 |
最近记录: |