Linked server和SSIS连接Oracle时的常见问题
来源:互联网 发布:js code style 编辑:程序博客网 时间:2024/05/22 05:26
引用:http://blogs.msdn.com/b/apgcdsd/archive/2011/05/25/linked-server-ssis-oracle.aspx
1.Linked server去连接oracle的时候,是按照SQL Server引擎的版本去载入oracle provider的版本。如果SQL Server是64bit的,只能载入64 bit oracle的provider。32bit的SQL Server只能使用32bit的oracle的provider。
2.很多SQL Server的图形界面工具都是32bit的,比如SSIS,32位的 import/export wizard,这些32bit的工具只能load 32 bit的oracle provider。如果想知道这个工具是不是32bit的,去检查工具所对应的exe文件是不是在program files(x86)子路径下。
3.Linked server去连接oracle的时候,首先会读取tnsname.ora文件,然后读取sqlnet.ora文件,然后用SQLServr.exe直接去连oracle,连接成功以后会再次读取tnsname.ora文件,然后开始载入oracle OLEDB的DLL文件。在64位操作系统上安装的32位SQL Server中,读到的路径是这样的:
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.2.118)(PORT=1521))(CONNECT_DATA=(SID=express)(CID=(PROGRAM=D:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe)(HOST=SCT-IT-SQLTEST)(USER=SYSTEM))))
在64 bit的操作系统上按照32 bit的SQL Server服务器以及32 bit的oracle客户端,是可以创建linked server和SSIS程序包的。但是,oracle在处理包含括号文件全路径名称时有个bug,这个bug在8i,9i和10g的版本上都存在。必须通过打oracle的补丁来解决。
以下报错由Oracle bug引起(以下参考了官方定义关于此bug的文档):
主题:在64位Windows操作系统上运行32位Oracle报错ORA-12154或者 ORA-6413
原文档 ID: 334528.1
症状:如果在64位Windows操作系统上运行32位Oracle客户端,自Windows平台使用ODBC、OLEDB、OO4O、ODP.NET四种接口之一尝试联接Oracle数据库时,将遇到以下报错信息
ORA-12154: TNS:could not resolve the connect identifier specified
或者
ORA-6413: Connection not open. Cause64-bit Microsoft OS's install 32-bit applications into the following location
"C:\Program Files (x86)\..."
rather than the typical location of
"C:\Program Files\..."
这将导致发生现有网络的错误,因为网络层无法解析程序地址中包含的可执行文件是试图连接到Oracle的路径括号。
这个bug已被提出来如下修正方案:
Bug 3807408 - CANNOT EXTERNALLY AUTHENTICATE USER WITH QUOTE IN USERNAME
更多信息
之所以遇到ORA-6413或ORA-12154这是一般是取决于您选择用于连接到Oracle的编程接口。
错误ORA-12154是当使用最新的OCI接口连接时的典型错误,接口包括
Oracle ODBC Driver
Oracle Provider for OLE DB
Oracle Objects for OLE
Oracle Data Provider for .NET (ODP.NET)
Microsoft's .NET Managed Provider for Oracle
错误ORA-6413则是使用旧版本的接口,即调用Oracle OCI API 7版本的接口:
Microsoft ODBC Driver for Oracle
Microsoft OLE DB Provider for Oracle
解决方案有如下两种
解决1:
使用Oracle软件包含Bug 3807408补丁的版本
注意:目前为止已发布适用于Windows的补丁有:
Windows 32-bit
9.2.0.7.0 Patch 6: Apply Patch 4928723 or later
10.2.0.1.0 Patch 4: Apply Patch 4923768 or later
10.2.0.2.0 Patch 5: Apply Patch 5383042 or later
10.2.0.3.0: Apply Patch 5337014 or later
Windows 64-bit AMD64 and INTEL EM64T
10.2.0.1.0 Patch 4: Apply Patch 4923787 or later
10.2.0.2.0 Patch 5: Apply Patch 5388871 or later
10.2.0.3.0: Apply Patch 5337014 or later
对于其他版本的Windows平台请使用解决方案2
解决方案 2:
找到报错的应用程序路径,检查是否含有括号,如何有,请重新配置该应用到一个没有括号的路径中
4.如果使用64 bit的SQL Server服务器和64 bit的oracle 客户端,linked server是可以工作的。但是oracle在64 bit的OLEDB provider上有个bug,会导致连接服务器访问失败。
报错信息如:Msg 7333, Level 16, State 2, Line 1
Cannot fetch a row using a bookmark from OLE DB provider "OraOLEDB.Oracle" for
linked server <linked server name>.
这个问题在32位环境下使用32位 MSDAORA (Microsoft’s OLEDB Provider for Oracle) provider或者32-bit ORAOLEDB (Oracle’s OLEDB Provider) provider时不会发生。只发生在使用64-bit ORAOLEDB provider时(MSDAORA没有64位版本存在)。
这是一个与Oracle的64位OLEDB provider的已知问题。多数情况下,客户发生错误信息到Oracle或通过Oracle补丁或升级Oracle提供程序解决了这一问题。
最新64位Oracle OLE DB provider版本是10.2.0.3.00.如果用户在使用低版本,升级即可解决。
对此问题Oracle正事补丁#5084517,Oracle关于bug1023的前提补丁# 6166400也解决了早期部分用户的这一问题。看起来这些版本补丁都包含最新的Oracle provider
5.如果在一个64 位的SQL Server上想同时使用linked server和SSIS的BIDS去连oracle,必须要同时安装64位和32位的oracle客户端。但是,在oracle 10g早期的版本中,貌似有一个bug导致oracle 10g的32 位和64位客户端无法同时在一台机器上工作。不确定这个问题是否已经被解决。目前11g的32bit和64bit Oracle客户端同时安装在一个机器上没有遇到这样的问题。
6. 32位上还可以使用oracle的ODBC driver创建ODBC数据源,然后在创建linked server时候使用Microsoft OLEDB for ODBC provider然后指向oracle的ODBC数据源。如果是64位的SQL Server 2005,默认安装是没有64bit的Microsoft OLEDB for ODBC provider的。需要去下载并安装64 位 Microsoft OLEDB for ODBC provider,然后就可以按照同样的方法使用oracle的ODBC。http://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&displaylang=en
7.使用oracle ODBC provider比较容易遇到中文字符的问题,建议尽量使用OLEDB的provider。
8. SQL Server对于oracle client OLEDB和ODBC的支持和test只到oracle 8.17的最后版本.这个版本中对于一些数据类型,比如blob字段是不支持的。如果使用9i以及后续版本的oracle client,不能保证在连接和使用中不遇到任何兼容性问题。任何兼容性问题,微软都不保证一定能解决方案。
9.对于oracle client 9i和10g的版本,Microsoft .net的oracle provider提供了兼容性支持。
- Linked server和SSIS连接Oracle时的常见问题
- Linked server和SSIS连接Oracle时的常见问题(一)
- Linked server和SSIS连接Oracle时的常见问题(二)
- Linked server和SSIS连接Oracle时的常见问题(三)
- SSIS连接Oracle遇到的问题
- 64位 SSIS连接Oracle
- 转载-64位SQL Server 2008的Linked Server连接64位的Oracle--Oracle Provider for OLEDB
- 通过SQL Server的Linked Servers连接到Oracle以直接更新相关数据表
- 图解:SQL Server SSIS包和job的部署攻略
- Sql Server Linked Oracle Server
- Sql Server Linked Oracle Server
- SSIS连接Oracle报错:ORA-12154
- Spring连接MySQL、Oracle和SQL Server的数据库连接属性
- Oracle和SQL Server在配置连接池时的区别:
- 网络连接的常见问题和解决方法
- JDBC连接SQL Server 2008 R2时遇到的常见问题集解
- JDBC连接SQL Server 2008 R2时遇到的常见问题集解
- java 通过jdbc连接sql server数据库的常见问题
- C# 事件机制
- Delphi 的绘图功能
- grep 多条件搜索
- 指责小孩牢记“六个不”
- 如何判断 一组字符 是不是纯数字?
- Linked server和SSIS连接Oracle时的常见问题
- 学习笔记之字符和字符串处理
- 解决Cannot load /usr/local/apache/modules/libphp5.so的方法
- zlib Usage Example
- sys.dm_db_index_physical_stats函数分析索引-游标
- 视频基础知识
- C++ 虚函数表解析
- 技术分享- IOS后台获取地理位置并且上传到服务器
- hibernate中三种状态以及转换