企业级商业程序的运行环境,越来越多地转到分布式计算环境里。除了把程序分布到网络上的工作站、服务器、老式主机系统外,公司还要把程序分发到地理上的不同地点和时区。因为公司在不断发展扩大,所以经常会形成一种混杂的异种计算环境,环境里包括各种不同的计算机、网络和数据库。
所以,这些公司需要访问企业当中分散在不同程序里的信息和数据。比如,公司需要一种对于最终用户来说比较透明的方法,来访问保存在UNIX工作站上的数据,或者访问Oracle数据库。要想开发出强大的、能够让公司对市场及时做出响应的分布式解决方案,透明访问是关键。微软的解决方法是:通用数据访问(Universe Data Access)架构:
图1. UDA 架构
这篇文章将说明,在异种计算环境下,透明地访问数据所需要的策略和技术。微软® SQL Server™ 7.0基于UDA架构,通过OLE DB实现。OLE DB是一个接口标准,它为分布式数据访问提供了一个接口方式,利用这个接口,无需考虑数据源或数据格式。相比较而言,Oracle采用的技术是通过服务器进行的,它要求所有的数据必须保存在单一的仓库,只能使用单一的访问语言访问数据。
SQL Server 7.0的基本目标是:充分利用UDA架构提供的性能优势。UDA架构允许数据以不同的格式存储,可以使用多种不同访问方法访问数据。随着SQL Server 7.0的发行,微软不仅提供了更加强大的关系数据库管理系统(RDBMS),而且提供了一个机制,这个机制能够搜集完全不同的信息仓库;而且无需把异种数据迁移或转化到单一数据仓库,就能用一种一致的、有用的方式把数据表示出来。
除了支持UDA, SQL Server 7.0 还提供了这些新技术,用在异种计算环境里处理数据:
所有这些功能都是SQL Server 7.0的本身自带的组成部分,不需要花费额外费用。而且,众多的向导使用户能够更加容易地利用 SQL Server建立异种数据解决方案。
利用下面的一些场景,我们来说明SQL Server和Oracle需要并存的一些可能情况:
在这个场景里,一家书店正在使用Oracle跟踪图书订单和存货。书店目前要引入一个利用Internet的在线订单系统。他们考虑使用Windows NT® 服务器内置的Web服务器—Internet Information 服务 (IIS) 4.0,以及SQL Server 7.0 来接收、处理订单。除非他们用SQL Server代替Oracle处理订单和存货,否则两个系统就必须共存。
在线定单先由SQL Server处理,然后发布到 Oracle。不必使用任何附加软件,就能完成这项操作。因为SQL Server提供的 Oracle OLE DB 驱动程序,包含在SQL Server的发行版里。这个驱动程序能够支持Oracle作为一个订户,接受SQL Server的数据。而且,使用远程链接服务器和存储过程,SQL Server可以直接访问或修改保存在Oracle里的存货数据。使用SQL Server 7.0提供的异种数据查询支持,建立的报告既可以访问Oracle数据库,也可以访问SQL Server 数据库。
Windows NT 和 IIS 的应用数量正迅速增长,而且微软产品维护起来很简易。那么,如果现在使用Oracle 数据库的用户能够很方便的访问他们原有的Oracle系统中的数据,那么就有可能采用微软的 Internet 解决方案。
在这个场景里,一家公司既运行Oracle 服务器,又运行SQL Server服务器。Oracle是公司某个项目包里,一起打包购买的。SQL Server 则用来满足部门计算的需求。在这个场景里,部门系统的尺寸和复杂性已经增长,而且包含了对部门和企业来说都很重要的数据。可以对 Oracle 系统进行修改,把企业数据库提供给部门,满足日益增长的部门级需求;也可以把部门系统的数据迁移到一个集中的数据仓库。这两种方法都会带来很大的工作量,但同时却极有可能什么效果也达不到。
图 2. SQL Server 和 Oracle 作为对等数据库
另一个方法是:两套系统共享数据,彼此是对等的关系。例如,考虑这么一个情况:有一家培训公司,他们的合同管理、课程、学生和订单保存在SQL Server 7.0 数据库里,同时他们的财务数据保存在Oracle 数据库里。当在SQL Server里生成新的订单时,Oracle数据库必须要开出一张发票。
使用微软事务服务器 (MTS, Windows NT 服务器的一部分),能够在Oracle 数据库里建立合适的条目。如果取消了订单,MTS 事务处理既能更新SQL Server,也能更新Oracle 数据库。
必须建立中间层,用它来定义商业规则和过程。而且必须要顾及,所有用户都要通过中间层来执行商业功能。
这个对等方法,不会触动现有的数据,也不会干扰现有系统。开发人员可以把精力集中在增强程序的功能上,而不是浪费在整理数据上。