SQL Server链接服务器访问Oracle
更新时间:2024-03-27 04:24:01 阅读量: 综合文库 文档下载
- sql server推荐度:
- 相关推荐
SQLServer链接服务器访问Oracle
一、 测试环境说明
操作系统:Windows Server 2008 R2 64位
数据库版本:SQLServer 2008 R2 64位和Oracle Database 11g 第 2 版 (11.2.0.1.0) 及相应的客户端版本:Oracle 11g client 64位。
其中Oracle Database 11g 安装在一台电脑,另一台安装 SQL Server 2008 R2 64位和Oracle 11g client 64位。
二、 创建SQL Server链接服务
首先SQL Server链接Oracle可以通过两个访问接口:“MSDAORA”和“OraOLEDB.Oracle”。 默认状态下,SQL Server 2008 R2 64位安装后在服务器对象 ->链接服务器 ->访问接口下并没有“MSDAORA”和“OraOLEDB.Oracle”接口。
安装“MSDAORA”访问接口需要下载Oracle Data Access Components(ODAC)for Windows的相应64位版本。安装后重新启动服务器即可以看到“MSDAORA”接口。因为此接口不支持分布式事务,因此不做过多的描述。
安装“OraOLEDB.Oracle”访问接口需要下载Oracle 11g client 64位。具体安装过程如下: 1) 下载后解压zip文件到文件夹,点击setup.exe,弹出如下界面:
直接点[是]。
2) 弹出如下界面:
选择[定制]选项。点击下一步,弹出如下界面:
直接点击下一步,弹出如下界面:
选择软件安装的位置后点击下一步,弹出如下界面:
在可用产品组件窗口点击[全选]后直接点击下一步,弹出如下窗口:
在调度程序代理主机名中输入本机的主机名。点击下一步,弹出如下界面:
在Oracle Services for MTS 中配置端口,这里直接使用默认端口,点击下一步: Oracle Services for Microsoft Transaction Server
Oracle Services for MTS 允许客户在 MTS 协调事务中使用 Oracle 数据库作为资源管理器,从而提供了 Oracle 解决方案和 MTS 之间的强大集成。Oracle Services for MTS 用作 Oracle 数据库到 MTS 分布式交易协同器的代理。因此,这些服务负责提供与 MTS 的客户端连接合并,并允许 COM 组件通过 Oracle 参与 MTS 交易。此外,Oracle Services for MTS 也可以操作运行在任何操作系统上的 Oracle 数据库(如果服务本身在 Windows 上运行)。
直接点击完成,开始安装客户端程序。 3) 配置注册表
打开运行,输入regedit,按回车。
找到注册表项HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSDTC\\MTxOCI OracleOciLib值改为oci.dll、 OracleSqlLib值改为orasql11.dll、
OracleXaLib值改为oraclient11.dll。
HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\MSDTC\\MTxOCI对它做同样的修改。
4) 配置完成后重新启动计算机,继续配置
在开始 ->所有程序 ->Oracle - OraClient11g_home1 ->配置和移植工具下找到Net Manager点击打开,弹出如下窗口:
点击服务命名,选择编辑–>创建弹出网络服务名向导:
在网络服务名中输入要连接的Oracle实例名。点击下一步:
默认选择[TCP/IP(Internet协议)] 点击下一步:
输入要连接的主机名,端口号为1521 ,Oracle的默认端口,点击下一步:
输入服务名(关于Oracle服务名与实例名,请参考Oracle服务名与实例名.doc),点击下一步:
点击测试中的[测试]按钮,进行服务器连接测试,注意要输入正确的用户名和密码,可以直接点击完成跳过测试步骤。
1、“MSDAORA”访问接口是由Microsoft OLE DB Provider for Oracle提供的,建议不使用此接口进行链接。通过该接口建立的链接服务器在进行查询Oracle表时会报错,在带数据类型CLOB、BLOB字段时。
错误提示如下:
“链接服务器\的 OLE DB 访问接口 \返回了消息 \发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。\。链接服务器\的 OLE DB 访问接口 \返回了消息 \数据类型不被支持。\
2、“OraOLEDB.Oracle”访问接口是由Oracle 的Oracle Provider for OLE DB 驱动提供的。它解决了两个数据库类型不一致的问题。而且如果需要使用分布式事务,必须使用它来创建链接服务器。
在创建之前,在SQL Server中,链接服务器->访问接口->OraOLEDB.Oracle->右键属性,选中“允许进程内”。
这一步是使我们选择的OraOLEDB.Oracle接口打开执行操作。如未设置会报如下错误: “无法初始化链接服务器 \的OLE DB访问接口 \的数据源对象\
使用Oracle Provider for OLE DB 驱动创建sqlserver链接服务器的代码:
--建立数据库链接服务器
EXECSp_addlinkedserver
@server=N'ORACLEDB',--要创建的链接服务器别名 @srvproduct=N'Oracle',--产品名称
@provider=N'OraOLEDB.Oracle',-- OLE DB 驱动名称 @datasrc=N'ORCL'--数据源
Oracle->ora11g->network->admin->tnsnames.ora查看
EXECSp_addlinkedsrvlogin 'ORACLEDB',--已建立的链接服务器名 'false',-- 固定*/
NULL,--为每个登陆SQL SERVER的用户使用此链接服务器,则写用户名*/ 'scott',--帐号(Oracle) 'tiger'--密码
EXECSp_serveroption 'ORACLEDB', 'rpc out', 'true'
EXECSp_serveroption 'ORACLEDB', 'rpc', 'true'
--这两个是打开rpc,rpc out的,默认为False,打开后可以支持远程更改分布式事务。(如有分布式事务操作必须要设置)
这样我们就建好了链接服务器,已经可以通过它对Oracle数据库进行查询。
三、 链接服务器的查询
查询的两种方式:
1) 链接服务器别名..Oracle名.oracle表,注意使用大写;
SELECT*FROM[ORACLEDB]..[SCOTT].[EMP]
这种方式可以进行操作,优点是使用简单,一目了然,而缺点是性能太差,查询大数据量表很慢。效率太差。
2) 使用OPENQUERY;
对给定的链接服务器执行指定的传递查询。该服务器是 OLE DB 数据源。OPENQUERY 可以在查询的 FROM 子句中引用,就象它是一个表名。OPENQUERY 也可以作为 INSERT、UPDATE 或 DELETE 语句的目标表进行引用。但这要取决于 OLE DB 访问接口的功能。尽管查询可能返回多个结果集,但是 OPENQUERY 只返回第一个。 示例:
A. 执行 SELECT 传递查询
SELECT*
FROMOPENQUERY(ORACLEDB,'SELECT * FROM SCOTT.EMP')
B. 执行 UPDATE 传递查询
UPDATEOPENQUERY (ORACLEDB,'SELECT ENAME FROM SCOTT.EMP WHERE EMPNO = 7369') SETENAME='SMITH';
C. 执行 INSERT传递查询
INSERTOPENQUERY (ORACLEDB,'SELECT * FROM SCOTT.EMP') VALUES (8888,'JIAO','MANAGER',NULL,'1990-12-17 00:00:00.0000000',5000.00,5000.00,10);
D. 执行DELETE传递查询
DELETEOPENQUERY (ORACLEDB,'SELECT ENAME FROM SCOTT.EMP WHERE EMPNO = 8888');
查询方式速度几乎和在Oralce中一样快。并且我们可以将openquery() 当做表来用。
四、 SQL Server链接服务器实现分布式查询
启用条件:
1、 必须安装Oracle Services for Microsoft Transaction Server;
2、 必须用Oracle Provider for OLE DB 驱动提供的OraOLEDB.Oracle访问接口来创建链接服务; 3、 必须双方启动并配置MSDTC服务,关于MSDTC服务的配置请参考:SQLServer分布式事务配置.doc。
示例:
SETXACT_ABORTON BEGINTRAN
UPDATEOpenquery(ORACLEDB,'SELECT * FROM EMP WHERE EMPNO = 7369') SETCOMM= 200
INSERTtest_yiyanhua.dbo.EMP SELECT*
FROMtest_yiyanhua.dbo.EMP WHEREEMPNO= 7499 IF@@ERROR<> 0 ROLLBACKTRAN ELSE COMMITTRAN
正在阅读:
广东台山发电厂二期(首两台1000MW级机组)扩建工程桩基施工(A标段04-19
山东建筑大学04-28
三峡大学学生综合素质测评方案(试行)08-20
假如我有一枝神笔作文500字06-30
关于我的爱好英语作文05-06
在会同籍在外人士座谈会上的讲话06-15
20年同学聚会活动方案05-13
实训教学管理办法03-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 链接
- 服务器
- Server
- Oracle
- 访问
- SQL
- 高管选拔考试试卷
- 小学六年级第一单元各节教学反思--王爱梅
- 中国引流管行业市场前景分析预测报告(目录) - 图文
- 设点宣传听民意 环境整治惠民生 - 图文
- 引入非财务指标的可持续增长研究
- 肥料行业业务员应该知道的一些基本知识
- 2015年全国高考理综(化学)试题及答案-北京卷讲解
- 2009年水资源公报 - 图文
- 2008年上半年深圳市公务员录用考试《行政职业能力测验》试卷
- 会议室音响系统设计方案
- 参考家庭理财规划书
- 湖南工业大学《计算机组装与维护》题库(整理版)
- 区域经济一体化小论文
- 全套-APQP表单1 - 图文
- 中国泳具行业市场调查研究报告(目录) - 图文
- 隋毅开题报告 - 图文
- 湖南省衡阳八中、永州四中2018-2019学年高二上学期第一次联考文
- 钻孔桩在施工过程中遇到的一些问题及处理措施
- 六年级上册语文教案-课文26 将相和 - 语文S版(1)
- 国家赔偿法练习题