VS连接不上ORACLE,但oracle客户端可以连接的问题解决

参考链接:

http://blogs.msdn.com/b/apgcdsd/archive/2011/05/25/linked-server-ssis-oracle.aspx

http://www.cnblogs.com/xiaojinhe2/archive/2013/09/13/3318718.html



参考文章一、Linked server和SSIS连接Oracle时的常见问题


1. Linked server去连接oracle的时候,是按照SQL Server 引擎的版本去载入oracle provider的版本。如果SQL Server64bit的,只能载入64 bit oracleprovider32bitSQL Server只能使用32bitoracleprovider

2. 很多SQL Server图形界面工具都是32bit的,比如SSIS32位的 import/export wizard,这些32bit的工具只能load 32 bitoracle provider。如果想知道这个工具是不是32bit的,去检查工具所对应的exe文件是不是在program files(x86)子路径下。

3. Linked server 连接oracle的时候,首先会读取tnsname.ora文件,然后读取sqlnet.ora文件,然后用SQLServr.exe直接去连oracle,连接成功以后会再次读取tnsname.ora文件,然后开始载入oracle OLEDBDLL文件。在64位操作系统上安装的32SQL 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 bitSQL Server服务器以及32 bitoracle客户端,是可以创建linked serverSSIS程序包的。但是,oracle在处理包含括号文件全路径名称时有个bug,这个bug8i,9i10g的版本上都存在。必须通过打oracle的补丁来解决。

以下报错由Oracle bug引起(以下参考了官方定义关于此bug的文档):

主题:64Windows操作系统上运行32Oracle报错ORA-12154或者 ORA-6413

原文档 ID: 334528.1

症状:如果在64Windows操作系统上运行32Oracle客户端,自Windows平台使用ODBCOLEDBOO4OODP.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-6413ORA-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 bitSQL Server服务器和64 bit oracle 客户端,linked server是可以工作的。但是oracle64 bitOLEDB 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位版本存在)。

这是一个与Oracle64OLEDB provider的已知问题。多数情况下,客户发生错误信息到Oracle或通过Oracle补丁或升级Oracle提供程序解决了这一问题。

最新64Oracle OLE DB provider版本是10.2.0.3.00. 如果用户在使用低版本,升级即可解决。

对此问题Oracle正事补丁#5084517Oracle关于bug1023的前提补丁# 6166400也解决了早期部分用户的这一问题。看起来这些版本补丁都包含最新的Oracle provider

5. 如果在一个64 位的SQL Server上想同时使用linked serverSSISBIDS去连oracle,必须要同时安装64 位和32位的oracle客户端。但是,在oracle 10g早期的版本中,貌似有一个bug导致oracle 10g32 位和64 位客户端无法同时在一台机器上工作。不确定这个问题是否已经被解决。目前11g32bit 64bit Oracle客户端同时安装在一个机器上没有遇到这样的问题。

6. 32 位上还可以使用oracleODBC driver 创建ODBC数据源,然后在创建linked server时候使用Microsoft OLEDB for ODBC provider 然后指向oracleODBC数据源。如果是64位的SQL Server 2005,默认安装是没有64bitMicrosoft OLEDB for ODBC provider的。需要去下载并安装64 Microsoft OLEDB for ODBC provider,然后就可以按照同样的方法使用oracleODBChttp://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&displaylang=en

7. 使用oracle ODBC provider比较容易遇到中文字符的问题,建议尽量使用OLEDBprovider

8. SQL Server对于oracle client OLEDBODBC的支持和test只到oracle 8.17的最后版本.这个版本中对于一些数据类型,比如blob字段是不支持的。如果使用9i以及后续版本的oracle client,不能保证在连接和使用中不遇到任何兼容性问题。任何兼容性问题,微软都不保证一定能解决方案。

9. 对于oracle client 9i10g的版本,Microsoft .netoracle provider提供了兼容性支持。



参考文章二、64位Win7系统下vs2010调试无法连接oracle解决办法


经历过疼苦之后就百度、google终于找到了零时的解决办法,现将详细操作步骤下下来,供有需要的朋友参考;

 

具体的解决办法如下:

1、先将WebDev.WebServer20.EXE和WebDev.WebServer40.EXE文件从Program Files (x86)目录中拷贝出来放到c:\dev目录中

 

2、开始->运行->cmd , 在命令行窗口输入: "C:\dev\WebDev.WebServer20.EXE" /port:5970 /path:"D:\WebSite" /vpath:"/"

该命令执行启动web调试服务器   

注意上方的path和vpath分别表示:   

      path:项目文件所在路径   

      vpath:虚拟目录名称   

      port:调试端口号(可以自行设置)

 

3、在web项目上 右键->属性,在web选项卡中的“服务器”中“使用自定web服务器”,将服务器url设置为:    http://localhost:5970

 

4、然后在指定页面中打断点调试;

 

 

问题分析说明:

主要是因为64位win7系统的Program Files (x86)路径中的括号引起的,oracle不认识这样的路径,所以就出现不能连接数据库了,但是用plsql和iis服务器运行程序的时候都是没有问题的。所以我们就将vs2010的内部调试web服务器WebDev.WebServer20.EXE文件从Program Files (x86)路径中拷贝出来,放到oracle可以认识的路径中去,然后在调用该服务器调试就解决问题了。

 


最终LZ的解决办法比较幸运,直接把ORACLE卸载了,重装一遍就好了。


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页