文档库

最新最全的文档下载
当前位置:文档库 > sql与oracle接口摸索

sql与oracle接口摸索

S q l与Oracle接口摸索

前言

不得不说,这次的工作,很具有创新性和挑战性,不了解oracle,不理解接口,不了解具体的操作步骤,一切的一切,都需要自己摸索。查资料,找方法,问同学,加班到深夜。。。即便这个过程很辛苦,成功的喜悦和幸福总会让你忘掉之前的种种,觉得付出都是值得的,很有成就感,哈。。。同时,也感谢帮助我的赵童鞋,一起钻研的日子还是挺有有意思的,哈哈。。。

下面,我将自己的方法及碰见的种种BUG总结出来,供大家参考和指导。

工作环境:三台服务器,一台(简称A)win2008 32位,sql2008;一台(简称B)win2008 64位,sql2008;另一台(简称C) win64,oracle10g数据库

工作任务:A中执行表单,查询出B的数据,然后将查出的数据插入C数据库中。

难点:oraoledb.oracle访问接口创建、sql数据库与oracle数据库接口的实现、分布式插入语句的调试

第一步:安装oracle客户端。

特别提示的是:一定记得安装在那台从oracle取数据的那台,不然你白忙乎了,通不了。。。针对我的内容,就要装在B台服务上,因为我取出的数据,要插入oracle数据库,是从B中sql数据库中取的,A服务器只是执行运行我的程序。(因为我就犯了这个错误。。。)

安装和配置方法,自己网上查吧,很多。

第二步:检查sql里链接服务器:在Microsoft SQL Server Management Studio中--本地服务器—服务器对象—访问接口中,有没有oraoledb.oracle 访问接口。

这一步一定要查看,不然下面的链接服务器创建都会失败。一般情况下,win32位的服务器,装完oracle客户端后,都会有oraoledb.oracle访问接口,win32位的服务器基本可以跳过此步。但是随着服务器的发展,win64位服务器正在占领主流,所以,以后的服务器都会碰见此问题。

解决办法:安装ODAC,即oracle数据库访问组件。

我安装的是64-bit ODAC 11.2 Release 5 (11.2.0.3.20) for Windows x64下载地址:

http://www.wendangku.net/doc/901521c505087632311212a8.html/technetwork/database/windows/downloads/index-09 0165.html

第三步:创建sqlserver链接服务(sqlserver链接oracle)

首先sql链接oracle可以通过两个访问接口“MSDAORA” 和“OraOLEDB.Oracle”。

MSDAORA访问接口是由Microsoft OLE DB Provider for Oracle提供的,这里建议不使用此接口进行链接。使用此接口,调试过程中会报很多错。OraOLEDB.Oracle访问接口是由oracle 的Oracle Probider for OLE DB 驱动提供的。它解决了两个数据库类型不一致的的问题。而且如果需要使用分布式事务,必须使用它来创建链接服务器。

以下采用第2种方法。

创建方法:

第一种:在Microsoft SQL Server Management Studio,执行以下语句:

--建立数据库链接服务器

EXEC sp_addlinkedserver

@server =N'CLMP', --要创建的链接服务器别名

@srvproduct=N'Oracle', --产品名称

@provider=N'OraOLEDB.Oracle', --OLE DB 驱动名称

@datasrc=N'ORCL' --数据源oracle"ora10g"network"admin"tnsnames.ora查看

EXEC sp_addlinkedsrvlogin

'CLMP', --已建立的链接服务器名

'false', -- 固定 */

NULL, --为每个登陆SQL SERVER的用户使用此链接服务器,则写用户名*/

'TESTDB', --帐号(oracle)

'TESTDB123' --密码

exec sp_serveroption 'CLMP','rpc out','true'

exec sp_serveroption 'CLMP','rpc','true'

--这两个是打开rpc,rpc out的,默认为False,打开后可以支持远程更改分布式事务。(如有分布式事务操作必须要设置)

第二种:手动配置

假设Oracle数据库的用户名为clmp,密码为clmp,在SQL Server数据库所在服务器上建立的指向Oracle数据库的服务命名为hisorcl.

1在SQL Server的企业管理器中的对象资源管理器中,展开“服务器对象”,在“链接服务器”上右击,选“新建链接服务器”。如下图所示进行配置。

2 配置方法:链接服务器:写上链接服务器的名字,可以随便定,如:ORACLE

服务器类型,选择其他数据源

访问接口:选择 Microsoft OLE DB Provider for Oracle

如果安装了数据库,用Oracle Provider for OLE DB也可以

产品名称:写上 Oracle 这个是固定的

数据源:写上数据库的实例名如:CLMP

访问接口字符串:user id=clmp;password= clmp

也可以用提供的访问接口名如:OraOLEDB.Oracle

(用Oracle Provider for OLE DB时可不填)

sql与oracle接口摸索

执行完后,进入在Microsoft SQL Server Management Studio--本地服务器—服务器对象,访问接口并列的列下面,有没有你建的链接服务器。点击链接服务器—右键—测试连接,如果提示测试连接成功,那么恭喜你,你现在可以在Microsoft SQL Server Management Studio中执行sql语句了。

到此步,实际上你的sql已经与oracle服务器连接通了。

第四步:调试分布式查询语句。Openquery

1、通过连接查询Oracle数据库中的数据

select * from openquery(CLMP 'SELECT * FROM COMPANY')

使用下面的这个方法会报“……为列提供的元数据不一致……”的错误信息。SELECT * FROM TEST_ORA..CLMP. COMPANY

2、通过连接向Oracle中的表插入数据

insert into openquery(CLMP,SELECT

prli_code,prli_name,prli_model,prli_quantity,prli_unit,prli_plan_pric e,prli_need_by_date,

prli_buy_type,prli_create_date,prli_last_update_date FROM prline_interface')

SELECT QG002,QG003,QG004,QG005,QG006,QG007,QG008,QG009,GetDate() as date1,GetDate() as date2 FROM QGD_GROUP_YUE where LEFT(QG001,4) = '"&nian&"' and RIGHT(QG001,2) = '"&yue&"' order by QG001

这种插入语句,很值得研究啊,从sql数据库,按“条件”查询出数据,字段名都不一样,然后插入oracle数据库。而且还插入sql服务器当前时间,GetDate() 这种取系统时间的方法大家也许很熟,但是以上这种写法还是手创,关键点是直接select GetDate() 会报错,一定要加上as date1(自己随便名字)网上还没查询到利用这种分布式查询法,插入oracle数据库的写法。

附:.asp文件中实现接口代码

Dim connStr

connStr="Provider=OraOLEDB.Oracle;DataSource=clmp;User

Id=clmp;Password=welcome; "

Dim conn

Set conn = server.createobject("ADODB.Connection")

conn.open connStr

引文:

1、此文中还有几种不常见的链接oracle接口,但只是介绍理论

http://www.wendangku.net/doc/901521c505087632311212a8.html/zhaoguo435/archive/2010/01/13/1646603.html

2、ODAC安装介绍

http://www.wendangku.net/doc/901521c505087632311212a8.html/gisdream/archive/2012/05/19/2508993.html

3、http://www.wendangku.net/doc/901521c505087632311212a8.html/view/2c59d18371fe910ef12df836.html

4、着重推荐此文,好好读读,比较收益的

http://www.wendangku.net/doc/901521c505087632311212a8.html/s/blog_517cae3c01017n2s.html

5、这个也比较详细,推荐

http://www.wendangku.net/doc/901521c505087632311212a8.html/view/392cf188cc22bcd126ff0cc8.html

6、Oracle11g安装方法

http://www.wendangku.net/doc/901521c505087632311212a8.html/p-901591270534.html