All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
C#,类型基础_[Asp.Net教程]
ASP.NET中根据XML动态创建使用WEB组件_[Asp.Net教程]
asp.net2.0推荐一个功能强大的图片选择控件_[Asp.Net教程]
PHP教程:在PHP中将图片存放ORACLE中_[PHP教程]
DataGrid行单击和双击事件实现代码_[Asp.Net教程]
c#.net连接access操作类_[Asp.Net教程]
c#中GDI+图形图像:GDI+中的画笔使用方法
.net中如何给数据表实体类赋值的方法_.net资料_编程技术
ASP.NET程序实现三色交替的下拉列表框_[Asp.Net教程]
第四篇:使用Visual,Studio,2008实现用户注册页面_[Asp.Net教程]
Reading number is top 10 pictures
Go to the national museum2
The money of more than 100 countries and regions10
Look for from human art net, is good1
银行20年后可能消失
Summer is most suitable for young people to travel in China4
擦地板的大叔太好了
9.3阅兵全景图7-指挥系统和后勤保障系统梯队
大四女生借债隆胸成功
西游日记2
Fierce! China's special forces training the devil2
Download software ranking
SP4 for SQL2000
Tram sex maniac 2 (H) rar bag3
Ashlynn Video2
尖东毒玫瑰A
Desire a peach blossom
Red cliff
Detective task-the top secret prostitution files
SP3 for SQL2000
Love the forty days
VeryCD电驴(EasyMule) V1.1.9 Build09081
归海一刀 published in(发表于) 2014/2/1 0:11:50 Edit(编辑)
SQL,Server与Oracle链接服务器应用_[SQL,Server教程]

SQL,Server与Oracle链接服务器应用_[SQL,Server教程]

SQL Server与Oracle链接服务器应用_[SQL Server教程]

最近要把.net开发的CMS系统跟JAVA开发的系统数据打通。由于N个系统用的数据库有SQL-Server和Oracle两种,之间的数据读取成了最大的难题。

我准备了两种实行方案,进行了技术验证。方案一:改写底层数据层和逻辑层。方案二:把Oracle数据做定时导向,无需让Cms做太大的改变。


我做的CMS是基于模板的系统架构,底层规则已经写得比较死,要改换底层数据库链接或者存在多个数据库链接简直根重写系统没有太大的区别,从开发成本上分析,决定使用第二方案,做数据采集工程。


但是Oracle那边的系统存在N个库(即用户),其中的读取规则各不相同,要如何开发统一导表程序也是个大问题。其中逻辑非常复杂。风险难以控制。在想了几天之后,发现了MSSQL和Oracle互通的功能,大喜。接着就开始着手开发。于是有了这文章。


在MSSQL中有个叫做链接服务器的功能(这个在Oracle里称为透明网关)。能把不同的异类数据库附加链接到MSSQL中,做为一个“虚库”(我给的名称)使用。比如Oracle,DB2,Sybase,access等等,基本上MS能提供驱动程序的都能做。


  架好服务器,开通个Job,就实现了定时导数据的功能。


  具体实现:


首先,在Oracle上创建View,给MsSql提供必要的数据源。


在MsSql的服务器上安装Oracle10g的客户端。在ODBC创建好数据源。之后在MsSql上架设链接服务器。


test一下。'SELECT id,title,thedate,summary,lid,city,ptype FROM {0}..{1}.{2}' --0,为数据源名称;1,为用户名;2为表名。格式要依照PL/SQL语法。 ok~


但是发现,这样读取View出错。所以换了一种写法:


select * from openquery(***,'SELECT id,title,thedate,summary,lid,city,ptype FROM ***.***')


  这样是利用MsSql的分布式方法去读取Oracle。


  接着,创建采集的存储过程。


  SET QUOTED_IDENTIFIER ON


  GO


  SET ANSI_NULLS ON


  GO


  CREATE PROCEDURE [dbo].[usp_tranDigital] AS


  select * from openquery(***,'SELECT id,title,thedate,summary,lid,city,ptype FROM ***.***')


  用游标获取结果集的行。这个方法在Oracle比较常用


  OPEN authors_cursor


  FETCH NEXT FROM authors_cursor into @ID,@TITLE,@THEDATE,@SUMMARY,@LID,@CITY,@PTYPE


  WHILE @@FETCH_STATUS = 0


  BEGIN


  execute Digital_Insert


  调用存储过程插入。


  FETCH NEXT FROM authors_cursor into


  @ID,@TITLE,@THEDATE,@SUMMARY,@LID,@CITY,@PTYPE


  END


  CLOSE authors_cursor


  DEALLOCATE authors_cursor


  GO


  SET QUOTED_IDENTIFIER OFF


  GO


  SET ANSI_NULLS ON


  GO


  在Job里调用该存储过程。任务完结。


  这样,我在不要任何程序修改的情况下,把不同数据库上的数据都挪到同一个地方。


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.