VS连接不上ORACLE,但oracle客户端可以连接的问题解决
来源:互联网 发布:2016黑马python百度云 编辑:程序博客网 时间:2024/05/20 07:15
参考链接:
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 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提供了兼容性支持。
参考文章二、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卸载了,重装一遍就好了。
- VS连接不上ORACLE,但oracle客户端可以连接的问题解决
- oracle客户端可以连接但cmd连不上
- 客户端不安装 Oracle 也可以连接数据库的方法
- oracle远程连接不上问题解决记录
- 通过vpn访问oracle连接不上的问题解决!
- 连接不上ORACLE
- arcgis 10.1 32位desktop在服务器上安装oracle客户端和服务器端,plsql连接不上问题解决
- arcgis 10.1 32位desktop在服务器上安装oracle客户端和服务器端,plsql连接不上问题解决2
- 电脑重装系统后,客户端,plsql连接不上oracle问题
- oracle 连接不上的解决方法
- 不安装oracle客户端连接oracle数据库
- mysql客户端连接不上,但是网页端的可以
- oracle连接不上原因
- 远程连接不上Oracle
- oracle客户端连接linux服务器上的oracle
- 关于Navicat premium 连接Oracle连接不上的问题
- win7,win8 下PLSQL developer 连接不上64位Oracle 的解决方法 不安装orcal 使用PLSQL的组件 使用它可以不安装oracle连接数据库
- Pl/SQL连接不上64位ORACLE客户端以及ORA-12154: TNS: 无法解析指定的连接标识符
- map遍历
- GDAL综合整理--5:GDAL编译说明
- Python机器学习库
- java java local cache本地缓存的两种实现,一个基于list轮询一个基于timer定时
- setInterval 和 setTimeout 怎样停止
- VS连接不上ORACLE,但oracle客户端可以连接的问题解决
- 被迫搬离牧原—李子园
- GDAL综合整理--6:GDAL部分类说明
- 输入输出重定向 2>&1
- PowerDesigner技巧
- 编辑文章 - 博客频道 - CSDN.NET
- V4L2 soc camera 分析 - 系统架构图
- 菜鸟的安卓实习之路----TextWatcher的三个函数
- ORACLE 中SCHEMA的概念以及数据库,表空间,数据文件等的区别