SQL Server链接服务器访问OracleWord格式.docx
《SQL Server链接服务器访问OracleWord格式.docx》由会员分享,可在线阅读,更多相关《SQL Server链接服务器访问OracleWord格式.docx(11页珍藏版)》请在冰豆网上搜索。
安装“OraOLEDB.Oracle”访问接口需要下载Oracle11gclient64位。
具体安装过程如下:
1)下载后解压zip文件到文件夹,点击setup.exe,弹出如下界面:
直接点[是]。
2)弹出如下界面:
选择[定制]选项。
点击下一步,弹出如下界面:
直接点击下一步,弹出如下界面:
选择软件安装的位置后点击下一步,弹出如下界面:
在可用产品组件窗口点击[全选]后直接点击下一步,弹出如下窗口:
在调度程序代理主机名中输入本机的主机名。
在OracleServicesforMTS中配置端口,这里直接使用默认端口,点击下一步:
OracleServicesforMicrosoftTransactionServer
OracleServicesforMTS允许客户在MTS协调事务中使用Oracle数据库作为资源管理器,从而提供了Oracle解决方案和MTS之间的强大集成。
OracleServicesforMTS用作Oracle数据库到MTS分布式交易协同器的代理。
因此,这些服务负责提供与MTS的客户端连接合并,并允许COM组件通过Oracle参与MTS交易。
此外,OracleServicesforMTS也可以操作运行在任何操作系统上的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->
配置和移植工具下找到NetManager点击打开,弹出如下窗口:
点击服务命名,选择编辑–>
创建弹出网络服务名向导:
在网络服务名中输入要连接的Oracle实例名。
点击下一步:
默认选择[TCP/IP(Internet协议)]点击下一步:
输入要连接的主机名,端口号为1521,Oracle的默认端口,点击下一步:
输入服务名(关于Oracle服务名与实例名,请参考Oracle服务名与实例名.doc),点击下一步:
点击测试中的[测试]按钮,进行服务器连接测试,注意要输入正确的用户名和密码,可以直接点击完成跳过测试步骤。
1、“MSDAORA”访问接口是由MicrosoftOLEDBProviderforOracle提供的,建议不使用此接口进行链接。
通过该接口建立的链接服务器在进行查询Oracle表时会报错,在带数据类型CLOB、BLOB字段时。
错误提示如下:
“链接服务器"
"
的OLEDB访问接口"
MSDAORA"
返回了消息"
发生了一个Oracle错误,但无法从Oracle中检索错误信息。
。
链接服务器"
数据类型不被支持。
2、“OraOLEDB.Oracle”访问接口是由Oracle的OracleProviderforOLEDB驱动提供的。
它解决了两个数据库类型不一致的问题。
而且如果需要使用分布式事务,必须使用它来创建链接服务器。
在创建之前,在SQLServer中,链接服务器->
访问接口->
OraOLEDB.Oracle->
右键属性,选中“允许进程内”。
这一步是使我们选择的OraOLEDB.Oracle接口打开执行操作。
如未设置会报如下错误:
“无法初始化链接服务器"
null"
的OLEDB访问接口"
OraOLEDB.Oracle"
的数据源对象"
使用OracleProviderforOLEDB驱动创建sqlserver链接服务器的代码:
--建立数据库链接服务器
EXECSp_addlinkedserver
@server=N'
ORACLEDB'
--要创建的链接服务器别名
@srvproduct=N'
Oracle'
--产品名称
@provider=N'
OraOLEDB.Oracle'
--OLEDB驱动名称
@datasrc=N'
ORCL'
--数据源Oracle->
ora11g->
network->
admin->
tnsnames.ora查看
EXECSp_addlinkedsrvlogin
'
--已建立的链接服务器名
false'
--固定*/
NULL,--为每个登陆SQLSERVER的用户使用此链接服务器,则写用户名*/
scott'
--帐号(Oracle)
tiger'
--密码
EXECSp_serveroption
rpcout'
true'
rpc'
--这两个是打开rpc,rpcout的,默认为False,打开后可以支持远程更改分布式事务。
(如有分布式事务操作必须要设置)
这样我们就建好了链接服务器,已经可以通过它对Oracle数据库进行查询。
三、链接服务器的查询
查询的两种方式:
1)链接服务器别名..Oracle名.oracle表,注意使用大写;
SELECT*FROM[ORACLEDB]..[SCOTT].[EMP]
这种方式可以进行操作,优点是使用简单,一目了然,而缺点是性能太差,查询大数据量表很慢。
效率太差。
2)使用OPENQUERY;
对给定的链接服务器执行指定的传递查询。
该服务器是OLEDB数据源。
OPENQUERY可以在查询的FROM子句中引用,就象它是一个表名。
OPENQUERY也可以作为INSERT、UPDATE或DELETE语句的目标表进行引用。
但这要取决于OLEDB访问接口的功能。
尽管查询可能返回多个结果集,但是OPENQUERY只返回第一个。
示例:
A.执行SELECT传递查询
SELECT*
FROMOPENQUERY(ORACLEDB,'
SELECT*FROMSCOTT.EMP'
)
B.执行UPDATE传递查询
UPDATEOPENQUERY(ORACLEDB,'
SELECTENAMEFROMSCOTT.EMPWHEREEMPNO=7369'
)
SETENAME='
SMITH'
;
C.执行INSERT传递查询
INSERTOPENQUERY(ORACLEDB,'
VALUES(8888,'
JIAO'
'
MANAGER'
NULL,'
1990-12-1700:
00:
00.0000000'
5000.00,5000.00,10);
D.执行DELETE传递查询
DELETEOPENQUERY(ORACLEDB,'
SELECTENAMEFROMSCOTT.EMPWHEREEMPNO=8888'
);
查询方式速度几乎和在Oralce中一样快。
并且我们可以将openquery()当做表来用。
四、SQLServer链接服务器实现分布式查询
启用条件:
1、必须安装OracleServicesforMicrosoftTransactionServer;
2、必须用OracleProviderforOLEDB驱动提供的OraOLEDB.Oracle访问接口来创建链接服务;
3、必须双方启动并配置MSDTC服务,关于MSDTC服务的配置请参考:
SQLServer分布式事务配置.doc。
SETXACT_ABORTON
BEGINTRAN
UPDATEOpenquery(ORACLEDB,'
SELECT*FROMEMPWHEREEMPNO=7369'
SETCOMM=200
INSERTtest_yiyanhua.dbo.EMP
FROMtest_yiyanhua.dbo.EMP
WHEREEMPNO=7499
IF@@ERROR<
>
0
ROLLBACKTRAN
ELSE
COMMITTRAN