sql server 2002连接oracle 11G

来源:互联网 发布:c语言的关键字有哪些 编辑:程序博客网 时间:2024/06/17 08:27


要在sql server 2008 R2上连接oracle数据库,可是在建立link database的时候,里面没有oracle for oledb ,找到以前下载的一个 oracle client,安装后建立tnsnames,可是在link database中仍然是找不到oracle for oledb。

在控制面板中的odbc驱动中看到 odbc数据源32位中有oracle的驱动,但在odbc数据源64位中没有oracle的驱动,打开odbc数据源32位,尝试在里面新建一个用户数据源,选择oracle,结果在Tns service Name中显示的是一大堆乱码,这个是经常遇到的,需要在系统的环境变量中添加TNS_ADMIN只想我们的安装目录。加好后,连接测试成功。

重新启动服务器,进入sql server管理器添加链接数据库,可是依然没有,一搜网上很多人遇到问题,解决方法有简单有复杂,复杂的居然要自己添加注册表记录。
根据自己的现状,认为还是安装64位驱动比较合理一点,跑到oracle网站下载一个64位客户端,安装时选择对应的驱动,一切OK。
打开odbc数据源64位,在里面添加一个链接oracle的数据源,注意这里一定要添加系统数据源,否则后面还是无法添加。
打开sql server管理器,建立连接数据库,这里选择ole db provider for odbc drivers接口,然后使用上面刚建立的数据源,测试链接ok。

不要以为这样就可以解决问题了,连接是连上了,但是埋下了祸根。
义务人员反映查询的数据不对,总是少,一检查发现还真是的,在sqlserver中查出的数据就是少。
 OPENQUERY(OAprd1, 'select * from oracle.tablea where status=1')) 可以查到,但是
select * from  OPENQUERY(OAprd1, 'select * from tablea ) a where a.status=1 可能就查不出来。
一查,还有不少人遇到这个问题,建议最好还是采用oracle provider for ole db.

问题重新转回来,使用oracle provider for oledb接口一直报: ora-12154 tns:无法解析指定的连接标识符
其实tnsping 都没有问题,真没招了。
天无绝人之路,没有想到在数据源的地方可以设置连接字符串的,见数据源名改成如下:
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.66)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))

设置用户名和登录密码,连接成功,测试查询也不再丢数据了。


原创粉丝点击