好记性不如烂笔头
---------------------------
背景:
公司的一个项目需要与易拓ERP做接口(我们用的是SQL SERVER),我恰好被安排负责这个事情,要完成这个任务主要有2方面的事情要做:
1. 业务接口,主要是内容及流程方面的一些事情,这里就不多说了。
2. 技术实现,以前接口这方面也没做过,想了一些也就2种方法吧,要么写个单独的程序负责oracle和SQL SERVER之间的读写,要么就直接数据库和数据库之间自己处理,最后决定直接在SQL SERVER里建链接服务全权处理oracle数据库的读写,因此才有了这篇文章。
另用的是oracle10g和SQL SERVER2005。
主要步骤:
假设oracle数据库在A电脑上,SQL SERVER数据库在B电脑上。
1. B电脑上安装oracle客户端,SQL SERVER链接服务需要通过ODBC连接oracle,但需要安装SQL SERVER连接oracle的ODBC驱动(oracle客户端包含了这个驱动)。
2. 在B上用oracle本地NET创建向导工具创建一个本地NET服务名,这个东西主要用于远程访问oracle的,相当于用一个本地服务名XX(一般和要链接的oracle服务名一样)来映射A电脑的IP地址和oracle服务名(重要,除非oracle和sql server在同一台电脑上,则不需要此步骤)。
3. SQL SERVER里建立链接服务:
exec sp_addlinkedserver 'LINK_TIPTOP','Oracle','MSDAORA','XE'
-------------------------新建链接服务,XE是oracle的服务名(上文提到的本地服务名)
exec sp_addlinkedsrvlogin @rmtsrvname = N'LINK_TIPTOP',
@locallogin = NULL , @useself = N'False',
@rmtuser = N'SYSTEM', @rmtpassword = N'1234'
-------------------------新建链接服务登陆账号,SYSTEM,1234是oracle用户名和密码。
--以上XE、SYSTEM、1234需要根据具体情况修改。
以上也可在sql server客户端上界面操作
最后可以测试一下是否连接成功
select * from openquery(LINK_TIPTOP,'select * from SYSTEM.HELP')
需要注意的地方:
1. 如果安装oracle客户端的时候把服务端也安装了(都有本地NET服务名配置工具),此时只有用服务端的工具才有效(可能解析的时候服务端的那个优先,网上也有看到类似的问题,通过改系统环境变量和卸载掉一个解决的)。