VS连接不上ORACLE,但oracle客户端可以连接的问题解决_oci 连接 oracle vs2010可以 vs2013失败-程序员宅基地

技术标签: ASP.NET  数据库  

参考链接:

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卸载了,重装一遍就好了。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/codefighting/article/details/38516565

智能推荐

[STM32F1]如何使用stm32快速建立tcp和udp连接?_stm32 udp-程序员宅基地

文章浏览阅读179次。使用w5500或者esp8266做mqtt的话,还需要自己移植相关的mqtt代码过来,或者下载mqtt的固件才能使用。MQTT是一种轻量级的、基于发布/订阅模式的通讯协议,它能够在带宽有限和延迟敏感的网络环境中提供可靠的消息传输服务。stm32使用NT1-B实现了远程的tcp和UDP的连接。之前都是使用w5500或者esp8266来做网络配置,需要实现的代码比较复杂,而且会占用比较多的内存。W5500的官方SDK通常提供网络协议栈的支持,但MQTT协议的实现可能需要用户自己完成或使用第三方的库。_stm32 udp

golang适合做什么_golang语言适合做什么-程序员宅基地

文章浏览阅读536次。Golang(Go语言)是一种开源的编程语言,由Google开发并于2009年首次发布。作为一门现代化的编程语言,Golang在性能、并发性和可靠性方面具有显著的优势,因此被广泛应用于构建高性能、可伸缩、并发和可靠的服务器端应用程序。本文将深入探讨Golang适合做什么,并介绍它在不同领域的应用。_golang语言适合做什么

如何优化LOG FILE SYNC_log file sync 优化-程序员宅基地

文章浏览阅读617次。在一个提交十分频繁的系统中,我们经常会看到LOG FILE SYNC等待事件排在TOP EVENTS中。这种情况下,我们可能就需要针对LOG FILE SYNC等待事件进行优化了。 首先我们会看一下这个等待事件平均的等待时长,正常情况下这个等待事件的平均等待时间不会超过10毫秒,如果等待时间太长,那说明LOG WRITER每次写入的时间过长,如果能够优化一下REDO LOG文件_log file sync 优化

第一个android程序——贷款计算器-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏12次。第一个android程序比较简单,具体的要求是,编写一个简单的贷款计算器,根据输入的贷款金额、期限和利率,显示每月应还款的金额。要求合理的使用布局进行界面设计,对输入的数据错误使用toast通知机制显示。 &lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;GridLayout ="http://sc..._银行贷款计算器android课设

接口自动化入门:Jmeter的多组数据测试、JDBC驱动及数据断言!-程序员宅基地

文章浏览阅读914次,点赞8次,收藏7次。在进行接口测试时,我们经常需要对接口进行多组数据测试,以验证接口在不同输入条件下的表现。同时,我们也需要对接口返回的数据进行断言,以确保接口返回的数据符合预期结果。JMeter正是一个强大的工具,可以帮助我们实现这些需求。

RuoYi-Vue-Plus(登录流程-验证码生成)_ruoyi-vue-plus百度网盘-程序员宅基地

文章浏览阅读135次。1- 进入登录页面,调用 com.ruoyi.web.controller.common.CaptchaController 类中的captchaImage 方法,2- 提交 登录信息 + 验证码 + uuid 比对错误:返回错误信息,删除缓存的验证码,加入缓存。_ruoyi-vue-plus百度网盘

随便推点

Oracle应用之to_char(参数,'FM990.00')函数-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏13次。遇到一个SQL,记录一下select to_char(参数,'FM990.00') from 表格刚看到FM990.00确实不知道什么意思,通过网上资料,知道了0表示:如果参数(double或者float类型)存在数字就显示数字,不存在数字就显示09表示:如果参数(double或者float类型)存在数字就显示数字,不存在数字就显示空格FM表示:将9带来的空格删除拓展:所以上面例子..._fm990.00

jquery项目转vue_jquery改写成vue-程序员宅基地

文章浏览阅读2.7k次。jquery项目转vue转载文章https://blog.csdn.net/violetjack0808/article/details/51451672,为了方便自己查看,后续加一些自己的总结。(一) jQuery和Vue的区别jQuery是使用选择器 ($) 选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。比如需要获取label标签的内容:$("lable").val();,它还是依赖DOM元素的值。_jquery改写成vue

Centos终端显示-bash-4.2#的解决方法_-bash-4.2#原因及解决方法-程序员宅基地

文章浏览阅读1.5k次。如果登录的不是root用户,那么将上面的文件拷贝到登录用户对应的home目录下:为/home/{用户名}目录。拷贝完成过后,重新进行登录即可。而不是root@主机名 + 路径的显示方式,发生这种情况的原因是根目录下缺失几个配置文件,从默认配置中拷贝过来就可以解决了。登录linux系统过后,突然发现显示的是。_-bash-4.2#原因及解决方法

[Xilinx FPGA] #10 ISE、Vivado、SDK、HLS 错误记录 [持续记录中]_ise执行cleanup project files会删掉io pin planning吗-程序员宅基地

文章浏览阅读1.7k次。这里记录的是,在 ISE、Vivado 与 SDK的日常使用中,笔者遇见过的报错及其解决方法ISE 14.7ISE WARNING:ProjectMgmt - File /*filePath*/ is missing.有可能原因,在建立工程后,修改了工程名或工程中某模块名称等信息,而 ISE 在重新综合编译时会读取上次综合编译的信息。只需将之前综合编译产生的各文件删除,再重新综合编译..._ise执行cleanup project files会删掉io pin planning吗

css cursor鼠标指针光标样式default pointer hand url_cursor:url c++-程序员宅基地

文章浏览阅读1.5k次。Css cursor鼠标指针鼠标光标样式教程篇我们在DIV CSS布局时候,我们会遇到对对象内鼠标指针光标进行控制,比如鼠标经过指针变为手指形状等样式,接下来我们介绍鼠标指针样式cursor控制。系统默认鼠标指针样式外,可以通过CSS设置图片为鼠标指针,常见有些网站鼠标指针是各种各样小图片样式,当然这个是通过css cursor设置鼠标样式。扩展阅读:css指针一、cursor语法_cursor:url c++

Html结构解析-程序员宅基地

文章浏览阅读2.6k次,点赞7次,收藏48次。一、html文档树状图结构  1)html树状图2)html代码解释树形图<!DOCTYPE html> <!--声明--><html lang="en"> <!--html开始--><head> <!--头部开始--> <..._html页面可以解析为什么结构