【网学网提醒】:网学会员,鉴于大家对SQL连接Oracle方法十分关注,会员在此为大家搜集整理了“SQL连接Oracle方法”一文,供大家参考学习!
USE[master]
GO
EXEC--添加服务
master.dbo.sp_addlinkedserver--命令名称
@server=N'TEST',--参数1,连接oracle的数据源名称
@srvproduct=N'ORACLE',--参数2,连接的数据源的产品名称
@provider=N'MSDAORA',--参数3,访问的接口方式
@datasrc=N'ERPORA'--参数4,被访问的数据源名称
GO
EXEC--添加用户
master.dbo.sp_addlinkedsrvlogin--命令名称
@rmtsrvname=N'TEST',--数据源名称
@locallogin=NULL,--本地登陆
@useself=N'False',--指定用用户名和密码登陆
@rmtuser=N'SCOTT',--用户名称
@rmtpassword=N'a123456'--用户密码
go
select*fromTEST..ERP.BAS_DEPT--测试结果
USE[master]
GO
EXEC--从本地SQLServer实例中的已知远程服务器和链接服务器的列表中删除服务器。
master.dbo.sp_dropserver
@server=N'TEST',
@droplogins='droplogins'
GO
前提条件
1)在SQL_SERVER2005服务器上安装Oracle9i的客户端。
假设安装到D:\99.88.66.software\02.oracle目录。
注意需将ORACLE安装后的目录设为Everyone权限。
2)配置D:\99.88.66.software\02.oracle\02.Ora92I\network\admin\tnsnames.ora文件。
配置示例
HAODAIFU=
(DESCRIPTION=
(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.119)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=haodaifu))
)
3)在DOS模式下运行以下命令以便确认ORACLE客户端安装无误。
a:sqlplusscott/a123456@haodaifu
b:tnspinghaodaifu
C:\DocumentsandSettings\Administrator>tnspinghaodaifu
TNSPingUtilityfor32-bitWindows:Version11.1.0.6.0-Productionon13-12月-200704:36:15
Copyright(c)1997,2007,Oracle.Allrightsreserved.
已使用的参数文件:
D:\99.88.66.software\02.oracle\DB11G\11G\network\admin\sqlnet.ora
已使用TNSNAMES适配器来解析别名
Attemptingtocontact(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
(HOST=192.168.8.122)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=haodaifu))
)
OK(10毫秒)
4)打开控制面板-服务,确认DistributedTransactionCoordinator服务已经启动。
5)修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI
OracleOciLib=oci.dll
OracleSqlLib=orasql9.dll
OracleXaLib=oraclient9.dll
6)重启SQL_SERVER服务器
7)图形创建链接服务器方法--〉
A)打开SQLSERVERManagementStudio,新建链接服务器。
B)链接服务器:写上链接服务器的名字,如:test
C)访问接口:选择MicrosoftOLEDBProviderforOracle
D)产品名称:写上Oracle
E)数据源:写上tnsnames.ora文件中配置的服务名,如:haodaifu
F)访问接口字符串:userid=用户名;password=口令(可以省略)
G)选择安全性选项页,使用此安装上下文建立连接:
a.远程登录:scott
b.使用密码:a
123456
H)确定
8)SQL的写法有两种
a)使用T-SQL语法:
SELECT*FROMLNK1..用户名.表名--注意用户名称,表名称要大写
b)使用PLSQL语法:
select*fromopenquery(LNK1,'select*from用户名.表名')
第二种访问方式比第一种约快50%;第二种访问方式跟直连ORACLE的速度相当;
第一种访问方式可能会导致一些意外错误,如:该表不存在,或者当前用户没有访问该表的权限。
如果需要访问的column中使用没有精度的数据类型,这两种查询方式都可能会报错,这是ORACLE的BUG,
无法修正,只能通过查询语句的特殊处理规避这一问题:
OLEDB提供程序'OraOLEDB.Oracle'为列提供的元数据不一致。执行时更改了元数据信息。
1、对远程表执行UPDATE、INSERT,或DELETET示列
updateopenquery(linked1,'selectssnfromtestlinkedwheressn=2')
setssn=ssn+1
insertopenquery(linked1,'selectssnfromtestlinkedwhere1=0')values(1000)
deleteopenquery(linked1,'selectssnfromtestlinkedwheressn>100')