转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
把Oracle数据库移植到Microsoft SQL Server 7.0         ★★★★

把Oracle数据库移植到Microsoft SQL Server 7.0

作者:闵涛 文章来源:闵涛的学习笔记 点击数:8582 更新时间:2009/4/22 22:06:51
 

把Oracle数据库移植到Microsoft SQL Server 7.0


摘要:本文是为那些想把自己的Oracle应用程序转换为Microsoft SQL Server应用程序的开发人员编写的。本文描述了一个成功的转换所需要的工具、过程和技术。同时强调了建立高性能、高度并行的SQL Server应用程序的基本的设计要素。

本文的读者应该具有:

  • Oracle关系型数据管理系统(RDBMS)的坚实基础。
  • 普通数据库管理知识。
  • 熟悉Oracle SQL和PL/SQL语言。
  • C/C++编程语言的工作经验。
  • 在sysadmin组中设定服务器规则的成员资格

本文假定你熟悉Oracle RDBMS的术语、概念和工具。如果想要了解关于Oracle RDBMS以及它的结构的更多信息,请参考Oracle 7 Server Concepts Manual。对于使用Oracle脚本和示例,仍然假定你熟悉Oracle Server Manager和Oracle SQL*Plus工具。要得到更详细的信息,请参看Oracle文档。


目录

  • 开发和应用程序平台
  • 概述
  • 本文的组织形式
  • 结构和术语
  • 安装和配置Microsoft SQL Server
  • 定义数据库对象
  • 加强数据完整性和商业规则
  • 事务、锁定和并行
  • 死锁
  • SQL语言支持
  • 实现游标
  • 调整SQL语句
  • 使用ODBC
  • 开发和管理数据库复制
  • 移植你的数据和应用程序
  • 数据库示例


开发和应用程序平台
为了便于清楚的表述,本文参照的开发和应用程序平台假定为Microsoft Visual Studio version 6.0、Microsoft Windows NT version 4 (Service Pack 4)、SQL Server 7.0、Oracle 7.3。Oracle 7.3使用Visigenic Software ODBC(版本2.00.0300)驱动,SQL Server 7.0使用Microsoft Corporation ODBC(版本3.70)驱动。Microsoft SQL Server 7.0包括针对Oracle的OLE DB驱动,但是该驱动程序在本章中并没有广泛的讨论。

概述
应用程序的移植似乎非常复杂。在不同的关系数据管理系统之间有太多的结构差异。用来描述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在数据库级别使用文件组来控制表和索引的物理放置。文件组是一个或者多个文件的逻辑容器,一个文件组中的数据按比例填充属于该文件组的全部文件。
如果没有显明的定义和使用文件组,数据库对象将放置在一个缺省的文件组中,该文件组是在数据库的创建过程中隐含定义的。文件组允许你进行下列操作:
把大的表分布在多个文件中以提高I/O吞吐量。
把索引存储在不同的文件中,而不是放在各自的表中,再一次提高I/O吞吐量以及实现磁盘并行操作。
把text、ntext、和image columns(大对象)储存在一个表的不同文件中。
把数据库对象放置在特定的磁盘锭(disk spindles)上。
在一个文件组中备份和恢复个别表和表的设置。

SQL Server把文件格式化为叫做页(pages)的单位。页的大小固定为8192字节(即8K)。页按固定为8个连续页大小的格式组织为长度。当创建表或者索引时,SQL Server自动为其分配一页,比起分配一个长度来说,储存较小的表和索引,这种方法要更有效些。

标记数据(Striping Data)
(译注:Strip--在海量存储系统(MSS)中,可由给定磁头位置访问的数据盒式磁带中的那部分)
Oracle类型的段对于大多数Microsoft SQL Server安装来说都不需要。取而代之的是,SQL Server可以利用基于硬件的RAID或者Windows NT软件RAID来较好的完成数据的分布或者标记。基于硬件的RAID或者Windows NT软件RAID可以设置一个由多个硬盘组成的标记装置,使它们看起来就像一个逻辑驱动器一样。如果数据库文件是在这个标记装置上创建的,磁盘子系统就假定为负责通过多个磁盘来进行分布式的I/O装载。建议管理员使用RAID来将数据分布在多个物理磁盘上。

针对SQL Server的RAID推荐配置是RAID 1(镜象)或者RAID 5(拥有一个作为冗余的额外的驱动器的标记设备)。RAID 10(对有奇偶的标记设备的镜象)也是推荐的,但它比起前两个来要昂贵的多。标记设备在分散数据库文件上通常的随机I/O来说是很好的。

如果不能使用RAID,文件组就是一个很有吸引力的选择了,它提供了RAID可以提供的某些同样的好处。此外,对于那些可能跨越多个物理RAID阵列的非常大的数据库来说,文件组可能是一个很好的选择,它可以通过一种受控制的方式将I/O分布在多个RAID阵列上。

必须优化事务日志文件(Transaction log files),使之适应连续的I/O,并且必须保护该文件以防止单点失败。因此,建议采用RAID1(镜象)来做事务日志。该驱动器的大小至少应该和在线恢复日志(online redo logs)以及反转段表空间两者加起来的大小一样才行。创建一个或者更多个日志文件,把逻辑驱动器上定义的空间占满。和存储在文件组中的数据不同,事务日志条目总是按顺序写入的,而不是按比例填充的。

欲获得关于RAID的更多信息,请参看SQL Server联机图书,你的Windows NT服务器文档,以及Microsoft Windows NT资源指南。

事务日志和自动恢复(Transaction Logs and Automatic Recovery)
Oracle RDBMS在每次启动时执行自动修复。它检查表空间文件的目录与在线恢复日志文件中的目录是否一样。如果不一样,Oracle就使用在线恢复日志文件覆盖表空间文件(roll forward、前滚),然后去掉它在后滚段中发现的所有未完成的事务(roll back,后滚)。如果Oracle不能从在线恢复日志中得到需要的信息,则Oracle就求助于存档的恢复日志文件。
Microsoft SQL Server 7.0同样在每次启动时通过检查系统中的每个数据库来执行自动恢复。它首先检查master数据库,然后启动线程以覆盖系统中的所有数据库。对于每一个SQL Server数据库,自动修复机制将检查事务日志。如果事务日志中包含任何未完成的事务,则该事务后滚。然后自动修复机制再检查事务日志以找出那些还没有写入数据库的未完成事务。如果找到,则执行该事务,前滚。

SQL Server事务日志包含了Oracle后滚段和Oracle在线恢复日志两者总的功能。每个数据库都有自己的事务日志,该日志记录了数据库发生的任何改变,并且日志由数据库的所有用户共享。当一个事务开始并且发生

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 


[Access]sql随机抽取记录  [Access]ASP&SQL让select查询结果随机排序的实现方法
[聊天工具]企业邮件系统的利器----FoxMail Server  [系统软件]OPEN SERVER 5.0.5安装EXP300阵列柜
[系统软件]SQL语句性能优化--LECCO SQL Expert  [系统软件]关于Windows2000Server的灾难恢复
[常用软件][网络]下载服务革命性风暴Poco Server评测  [C语言系列]动态创建SQL Server数据库、表、存储过程等架构信…
[C语言系列]SQL Server到DB2连接服务器的实现  [C语言系列]SQL Server到SYBASE连接服务器的实现
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台