分享
 
 
 

把Oracle数据库移植到MicrosoftSQLServer7.0(1)

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

应用程序的移植似乎非常复杂。在不同的关系数据管理系统之间有太多的结构差异。用来描述Oracle结构的

用词和术语通常与该词在Microsoft SQL Server中的意思完全不同。另外,Oracle和SQL Server都对SQL-92

标准做了许多自有的扩展。

从一个应用程序开发人员的观点来看,Oracle和SQL Server是以相似的方法来管理数据的。在Oracle和SQL

Server之间有着重大的内部区别,但是如果管理得当,可以把这些区别对移植的影响减到最小。

SQL语言扩展

开发人员面临的最重要的移植问题是执行SQL-92语言标准和每一个关系数据管理系统提供的语言扩展。有一

些开发人员只使用标准的SQL语法,喜欢尽可能的保持他们的程序代码的普遍性。通常,这种方法把程序代

码限制在SQL-92标准的登录级别(entry-level)上,而这个级别是被许多的数据库产品实现了的,包括

Oracle和SQL Server。

这种方法将会产生一些不必要的程序代码复杂性而且还会对程序的性能造成很大的影响。例如,Oracle的

DECODE函数是一个非标准的SQL扩展。Microsoft SQL Server的CASE表达式是一个超越了登录级别的SQL-92

扩展,而且在所有其他的数据库产品中都没有实现。

Oracle的DECODE和SQL Server的CASE都是可选的,你可以不用这两个函数而实现它们的功能,而这需要从关

系数据管理系统中提取更多的数据。

还有,对SQL语言的程序扩展也会造成困难。Oracle的PL/SQL和SQL Server的Transact-SQL语言在函数上是

相似的,但是在语法上不同。在两种数据库和程序扩展中间没有明确的对称性。因此,你可能会决定不使用

想程序和触发器这样的存储的程序。这是很不幸的,因为它们提供了别的任何方式都无法实现的性能和安全

性上的优点。

私有开发接口的使用带来了新的问题。用Oracle OCI(Oracle Call Interface)进行程序转换通常需要很多

资源。开发一个可能用到多个关系数据管理系统的应用程序,最好是考虑使用开放数据库连接(Open

Database Connectivity,ODBC)接口。

ODBC

ODBC是为同多个数据库管理系统协同工作而设计的。ODBC提供了一个一致的应用程序编程接口(application

programming interface,API),该接口使用一个针对数据库的驱动程序同不同的数据库协同工作。

一致的应用程序编程接口意味着程序用来建立连接、执行命令以及获取结果的函数是一样的,无论该程序是和

Oracle还是SQL Server对话。

ODBC同时还定义了一个标准化的调用级别的接口并且针对那些不同数据库里完成同样任务但语法不同的SQL函

数使用标准的出口次序。ODBC驱动器可以自动的把这个ODBC语法转化为Oracle或者SQL Server的本地语法,

这个过程不需要对程序代码做任何的修订。在某些情况下,最好的方法是编写一个程序并且让ODBC在运行时

间执行转换处理。

ODBC并不是一个万能的可以针对任何数据库实现完全独立的、完整功能和高性能的解决方案。不同数据库和

第三方经销商提供了对ODBC不同级别的支持。一些驱动器仅仅实现了核心的API函数,这些函数映射了顶层或

者其他接口库。其他一些驱动器,例如Microsoft SQL Server的驱动器,在一个本地的、高性能的驱动器中

提供了完整的2级支持。

如果一个程序仅使用核心的ODBC API,它很可能会丢弃某些数据库的特征和性能。此外,并不是所有的本地

SQL扩展都可以在ODBC出口次序中描述的(例如Oracle的DECODE和SQL Server的CASE表达式)。

另外,书写SQL语句来利用数据库优化器是意见很自然的事情。但是在Oracle中用来扩展数据库性能的技术和

方法在Microsoft SQL Server 7.0中不一定是最好的。ODBC接口并不能把一个系统所用的技术翻译为另一个

系统的技术。

ODBC并不影响一个应用程序使用数据库专有的特征和调整来提高性能,但是应用程序需要某些数据库专有的

代码部分。ODBC使得在多个数据库间保持程序结构和多数程序代码一致变得容易。

OLE DB

OLE DB是下一代数据访问技术。Microsoft SQL Server 7.0利用包含在其自身的组件之中的OLE DB。这样,

应用程序开发人员可以考虑使用OLE DB来进行新的SQL Server 7.0开发。微软在SQL Server 7.0中还提供了

支持Oracle 7.3的OLE DB。

OLE DB是微软用来管理跨组织的数据的战略性的系统级编程接口。OLE DB是在ODBC特征上建立的具有开放性

的设计。ODBC是设计来访问相关的数据库的,而OLE DB则是设计来访问相关的或者不相关的信息源,例如主

机上的ISAM/VSAM和分层数据库,电子邮件和文件系统存储,文本、图像和地理数据以及定制的业务对象。

OLE DB了一组COM接口以压缩不同的数据库管理服务,同时还允许创建软件组件来实现这些服务.OLE DB组件

包含了数据提供者(保持和显露数据)、数据消费者(使用数据)以及服务组件(处理和传输数据,例如查

询处理器和光标引擎)。

OLE DB接口的设计目的是帮助实现组件的平滑集成,这样的话OLE DB组件提供商就可以迅速的向市场提供高

质量的OLE DB组件了。此外、OLE DB还包含一座连接ODBC的桥梁,如此就可以为今天可以得到的大量的ODBC

相关的数据库驱动程序继续提供支持了。

本文的组织方式

为了帮助你一步一步的实现从Oracle到SQL Server的转换,本文的每一部分都有一个关于Oracle7.3和

Microsoft SQL Server 7.0的不同之处的概述。同时还包括转换的考虑,SQL Server 7.0的优势以及多个实

例。

结构和术语

作为成功移植的开始,你应该掌握Microsoft SQL Server 7.0所用的基本的结构和术语。这一部分中的许多

例子都是从本文包含的Oracle和SQL Server应用程序中截取下来的。

数据库的定义

在Oracle中,数据库是指整个Oracle RDBMS环境,并且包含以下组件。

Oracle数据库处理过程和数据缓存(实例)。

包含一个集中的系统目录的SYSTEM表空间。

DBA定义的其它表空间(可选的)。

两个或者多个Redo日志。

存档的Redo日志(可选)

各种其它文件(控制文件、Init.ora等等)。

一个Microsoft SQL Server数据库提供了数据、应用程序以及安全机制的逻辑区分,更像一个表空间(

tablespaces)。正如Oracle支持多个表空间,SQL Server也支持多个数据库。表空间也用来提供数据的物

理放置,SQL Server通过文件组(filegroups)来提供同样的功能。

Microsoft SQL Server将缺省的安装下列数据库。

model数据库是所有新建用户数据库的模板。

Tempdb数据库跟Oracle中的临时表空间很相象,都是用来进行临时的工作储存以及排序操作。不同的是,当

用户退出登录时,Microsoft SQL Server自动删除其创建的临时表空间。

Msdb数据库支持SQL Server代理以及其预定的工作、警报和复制信息。

Northwind和pubs数据库是用于培训的实例数据库。

如果想获得缺省数据库的更多信息,请参看SQL Server联机图书。

数据库系统目录

每个Oracle数据库都在一个集中系统目录(或者是数据字典(data dictionary))上运行,该目录存在于

SYSTEM表空间中。而每个Microsoft SQL Server 7.0数据库都维护一个自己的系统目录,该目录包含下列

信息:

数据库对象(表、索引、存储程序、视图、触发器等等)。

约束(Constraints)。

用户和许可。

用户定义数据类型。

复制定义。

数据库所用的文件。

SQL Server同时在master数据库中保存一个集中系统目录,该目录包含系统目录和每个数据库的某些信息:

数据库名和每个数据库的初始文件位置。

SQL Server登录账号。

系统消息。

数据库配置值。

远程和/或已连接的服务器。

当前活动信息。

系统存储过程。

像Oracle中的SYSTEM表空间一样,SQL Server的master数据库也必须能访问任何其他数据库。同样,对数

据库做了任何重大的改变以后,通过备份master数据库来防止失败是很重要的。数据库管理员也应该能够

为组成master数据库的文件做镜象。

物理和逻辑存储结构(Physical and Logical Storage Structures)

Oracle RDBMS是由表空间组成的,而表空间又是由数据文件组成的。表空间数据文件被格式化为内部的块

单位。块的大小,是由DBA在Oracle第一次创建的时候设置的,可以在512到8192个字节的范围内变动。当

一个对象在Oracle表空间中创建的时候,用户用叫做长度的单位(初始长度((initial extent)、下一个

长度(next extent)、最小长度(min extents)、以及最大长度(max extents))来标明该对象的空间

大小。一个Oracle长度的大小可以变化,但是要包含一个由至少五个连续的块构成的链。

Microsoft SQL Server在数据库级别使用文件组来控制表和索引的物理放置。文件组是一个或者多个文件的

逻辑容器,一个文件组中的数据按比例填充属于该文件组的全部文件。

如果没有显明的定义和使用文件组,数据库对象将放置在一个缺省的文件组中,该文件组是在数据库的创建

过程中隐含定义的。文件组允许你进行下列操作:

把大的表分布在多个文

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有