在SQLserver中一直使用的是DTS抽取数据,但是DTS微软只支持到2008,到了2012后就没有这个工具了,现在需要在SQLserver跟Oracle中间建立一个通道,借助这个通道,将Oracle中的数据抽取到SQLserver数据库中。

环境介绍:win2012  64位服务器、SQLserver2012数据库、本地数据库Oracle 11g-64bit

注意:在这里特别声明一点,或许有的人认为oracle根本就不区分位数,只要是数据库就行,是不行的,如果你的机子是64位的,你必须装64位的oracle.

本来是考虑到在服务器上装database太浪费资源了,但是在装客户端的时候遇到如下问题:

  Could not find the main class. Program will exit.

      这个问题我也没有深究,网上说是因为装在中文目录下的原因,其实不然,我的是在英文目录下,那就是版本问题。

     下面是我的一个具体创建链接的详细步骤:

     1.配置ODBC

     先到C:\app\product\11.2.0\dbhome_1\NETWORK\ADMIN\,找到tnsnames.ora

     配置上连接远程oracle的服务名。

   

   打开ODBC64

   

  安装了64位的oracle数据库之后的ODBC64

然后到用户DNS下,点击添加,找到刚才的驱动,即可出现如下界面:

点击测试连接后,会让你输入登录oracle数据库的用户名跟密码,输入完成点ok

直到出现如下界面,说明已经成功一半了。

2.新建链接服务

图中红色部分特别注意,IP加上实例名。或许有人觉得为什么不直接用ODBC中刚配置好的那个160作为数据源,我刚开始也觉得应该可以这样,但是实践了,报错了。我直接用实例加IP是成功的。

输入用户名跟密码

也可以使用脚本建立服务链接:

USE [master]
GO /****** Object: LinkedServer [TEST] Script Date: 2015/12/2 11:18:01 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'TEST11', @srvproduct=N'oracle', @provider=N'OraOLEDB.Oracle', @datasrc=N'192.168.1.160/oracle'
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'TEST11',@useself=N'False',@locallogin=NULL,@rmtuser=N'***',@rmtpassword='***' GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'collation compatible', @optvalue=N'false'
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'data access', @optvalue=N'true'
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'dist', @optvalue=N'false'
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'pub', @optvalue=N'false'
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'rpc', @optvalue=N'false'
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'rpc out', @optvalue=N'false'
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'sub', @optvalue=N'false'
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'connect timeout', @optvalue=N''
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'collation name', @optvalue=null
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'lazy schema validation', @optvalue=N'false'
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'query timeout', @optvalue=N''
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'use remote collation', @optvalue=N'true'
GO EXEC master.dbo.sp_serveroption @server=N'TEST11', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

上述工作做完之后可以用如下语句测试是否连通

select * from openquery(TEST11,'select SYSDATE from DUAL');

如果有结果就说明成功了。

SQLserver通过链接服务器连接oracle的更多相关文章

  1. Sqlserver通过链接服务器访问Oracle的那些事儿

    前言: 1.不经历风雨,怎能见彩虹. 2.充分利用BaiDu.google等搜索引擎查找资料并整合分析! 3.世上无难事只怕有心人! 本文由来:笔者在研究SQLSERVER链接服务器到oracle并使 ...

  2. 【转】Sqlserver通过链接服务器访问Oracle的那些事儿!

    原文:http://blog.sina.com.cn/s/blog_614b6f210100t80r.html 前言:1.不经历风雨,怎能见彩虹.2.充分利用BaiDu.google等搜索引擎查找资料 ...

  3. Sqlserver通过链接服务器访问Oracle的解决办法

    转自http://blog.sina.com.cn/s/blog_614b6f210100t80r.html 一.创建sqlserver链接服务(sqlserver链接oracle)  首先sqlse ...

  4. sql server 使用链接服务器连接Oracle,openquery查询数据

      对接问题描述:不知道正式库oracle数据库账户密码,对方愿意在对方的客户端上输入账号和密码,但不告诉我们 解决方案:使用一台sql server作为中间服务器,可以通过转存数据到sql serv ...

  5. 【转】Sqlserver通过链接服务器访问Oracle的解决办法

    一.创建sqlserver链接服务(sqlserver链接oracle)  首先sqlserver 链接oracle可以通过两个访问接口: “MSDAORA” 和“OraOLEDB.Oracle” 1 ...

  6. SQLServer通过链接服务器调用Oracle 存储过程

    语法: declare @输出参数 数据类型; exec(' exec 存储过程(?, ?)', 输入参数, @输出参数 out) at 链接服务器名 参考文章: SQL2008 链接Oracle 调 ...

  7. Sqlserver通过链接服务器访问Oracle

    工作中遇到的情况,win 7 64位操作系统的就安装64位的oracle 客户端,然后重启sql service服务后再创建sql 链接服务器.关于如何创建链接服务器请查看下面的大神的链接: http ...

  8. sqlserver创建链接服务器连接sqlserver脚本

    示例: EXEC sp_addlinkedserver @server='MyLinkServer', --链接服务器别名 @srvproduct='', @provider='SQLOLEDB', ...

  9. SQLServer通过链接服务器远程删除数据性能问题解决

    原文:SQLServer通过链接服务器远程删除数据性能问题解决 在上一遍文章中介绍了SQLServer通过链接服务器访问Oracle性能问题的解决方法,本文介绍链接服务器下远程删除SQLServer数 ...

随机推荐

  1. C#中Invoke和BeginInvoke的区别

    1.Invoke() 调用时,Invoke会阻止当前主线程的运行,等到 Invoke() 方法返回才继续执行后面的代码,表现出“同步”的概念. 2.BeginInvoke() 调用时,当前线程会启用线 ...

  2. freeCodeCamp:Missing letters

    从传递进来的字母序列中找到缺失的字母并返回它. 如果所有字母都在序列中,返回 undefined. function fearNotLetter(str) { var arr = str.split( ...

  3. JavaScript:exec()方法的用法及说明

    最近在看某知名js框架的源码,突然间发现自己对exec()方法竟然不太理解,然后就仔细的分析了一下这个方法 下面贴个exec()方法使用的代码出来 rquickExpr = /^(?:\s*(< ...

  4. flv视频播放器代码

    <div class="txt1"> <script type="text/javascript"> var swf_width=307 ...

  5. Java开发从零开始填坑

    开始学习Java,感觉较.NET知识更零碎一些,所以开个帖子把自己踩过的坑记录下来,都是边边角角网上不容易找到的东西. 1.java命令格式:>cd %parent-of-pakadgePath ...

  6. AJAX一些基本知识点

    ajax的定义: 中文意思:异步JavaScript和XML. 指一种创建交互式网页应用的网页开发技术. ajax的核心是XMLHttpRequest,在页面中由XMLHTTPRequest来发出Ht ...

  7. Part 16 Important concepts related to functions in sql server

    Important concepts related to functions in sql server

  8. 解决windows端口被占用

    1, Cmd输入命令:netstat  –ano|findstr  “端口号” ,如netstat  –ano|findstr  “8080” 记下PID,最后一行为PID,这里为396 2,Cmd输 ...

  9. iOS 常用控件集合 完整项目

    [Swift]高仿 爱范儿3.0 http://www.code4app.com/forum.php?mod=viewthread&tid=10053&page=1&extra ...

  10. HTML+CSS学习笔记 (15) - css样式设置小技巧

    水平居中设置-行内元素 我们在实际工作中常会遇到需要设置水平居中场景,今天我们就来看看怎么设置水平居中的. 如果被设置元素为文本.图片等行内元素时,水平居中是通过给父元素设置 text-align:c ...