把Oracle数据库移植到Microsoft SQL Server 7.0
本文假定你熟悉Oracle RDBMS的术语、概念和工具。如果想要了解关于Oracle RDBMS以及它的结构的更多信息,请参考Oracle 7 Server Concepts Manual。对于使用Oracle脚本和示例,仍然假定你熟悉Oracle Server Manager和Oracle SQL*Plus工具。要得到更详细的信息,请参看Oracle文档。
Oracle数据库处理过程和数据缓存(实例)。 一个Microsoft SQL Server数据库提供了数据、应用程序以及安全机制的逻辑区分,更像一个表空间(tablespaces)。正如Oracle支持多个表空间,SQL Server也支持多个数据库。表空间也用来提供数据的物理放置,SQL Server通过文件组(filegroups)来提供同样的功能。
SQL Server同时在master数据库中保存一个集中系统目录,该目录包含系统目录和每个数据库的某些信息:
像Oracle中的SYSTEM表空间一样,SQL Server的master数据库也必须能访问任何其他数据库。同样,对数据库做了任何重大的改变以后,通过备份master数据库来防止失败是很重要的。数据库管理员也应该能够为组成master数据库的文件做镜象。 安装和配置Microsoft SQL Server 使用Windows NT基于软件的RAID或者基于硬件的RAID第五级来创建一个足够放下你的所有数据的逻辑驱动器。对空间的估算可以通过计算被Oracle系统、临时文件以及应用程序表空间占用的文件空间大小来进行。 使用Windows NT基于软件的RAID或者基于硬件的RAID第一级创建一个第二逻辑驱动器来放事务日志。该驱动器的大小起码应该和在线恢复以及后滚表空间的总的大小一致。 使用SQL Server Enterprise Manager创建一个和Oracle应用程序表空间名字一样的数据库。(示例应用程序使用的数据库名字叫做USER_DB)标明文件位置,使它们分别和你在第一步以及第二步中为数据和事务创建的磁盘位置一致。如果你使用多个Oracle表空间,不需要也建议你不要创建多个SQL Server数据库,RAID会自动为你分配的。 创建SQL Server登录账号:
Oracle数据库对象(表、视图和索引)可以很容易的移植到Microsoft SQL Server上,这是因为两个数据库都基本遵循SQL-92标准,该标准承认对象定义。把Oracle SQL的表、索引和视图的定义转换为SQL Server的表、索引和视图的定义只需要做相对简单的语法改变。下表指出了Oracle和Microsoft SQL Server之间的数据库对象的某些不同之处。
假设你是从一个Oracle脚本或者程序开始的,该脚本或者程序用来创建你的数据库对象。拷贝你的脚本或者程序并且进行如下修改。这些修改将在本部分的其他地方加以讨论。该例子是从示例应用程序脚本Oratable.sql和Sstable.sql中截取的:
数据对象标识符 下表比较了Oracle和Microsoft SQL Server是如何处理对象标识符的。在许多情况下,当移植到SQL Server上时,你不需要改变对象的名字。
修饰表名 当访问存在于你的用户账号中的表时,该表可以简单的通过未经限制的表名来选中。访问其他Oracle计划中的表就需要把该计划的名字作为前缀加到表名上,两者之间用点号(.)隔开。Oracle同义字可以提供更高的位置透明度。 涉及到表时,Microsoft SQL Server采用一种不同的方法。因为一个SQL Server登录账号可以在多个数据库中用同一个名字创建一个表,所以采用下面的方法来访问表和视图:[[数据库名字]所有者名字]表名]
这是一些为Microsoft SQL Server表和视图命名的指导方针:
同时,这些数据库的其他用户可以有同样名字的对象:
因此,建议你在引用数据库对象时包含所有者的名字。如果应用程序有多个数据库,建议你再把数据库名字也包含在引用中。如果查询跨越多个服务器,还要包括服务器名。 SQL Server的每个连接都有一个当前数据库上下文,这是在登录时用USE语句设置的。例如,假设有下面的场景:
可以在数据库和表名之间加两个点号来省略对象的所有者名。例如,如果应用程序引用STUDENT_DB..STUDENT,SQL Server就做如下搜寻:
如果应用程序一次只使用一个数据库,在做对象引用时省略数据库名字,这样的话,该应用程序可以方便的用于其他数据库。所有的对象引用都隐含的访问当前所用的数据库。这对于你要想在同一台服务器上维持一个测试数据库和一个产品数据库时很有用
创建表 因为Oracle和SQL Server都支持SQL-92条目级(entry-level)的关于标识RDBMS对象的协议,CREATE TABLE的语法是相似的。
Oracle数据库对象名字是不分大小写的。在Microsoft SQL Server中,数据库对象的名字可以是大小写敏感的,这要看安装时的设置。 当SQL Server第一次设置的时候,缺省的排序顺序是字典顺序,区分大小写。(可以用SQL ServerSetup来做不同的设置)因为Oracle对象的名字总是唯一的,你在把数据库对象移植到SQL Server上时不会遇到任何的麻烦。建议你把Oracle和SQL Server中的所有的表和列的名字都写成大写的以避免万一有用户安装了区分大小写的SQL Server时出问题。
表和索引存储参数 对于Microsoft SQL Server,使用RAID通常可以简化数据库对象的放置。在表的结构中集成了一个SQL Server的分簇的索引,就像一个Oracle索引组织表一样。
用SELECT语句创建表 使用Oracle,一个表可以用任何有效的SELECT命令创建。Microsoft SQL Server提供了同样的功能,但是语法不一样。
要SELECT…INTO能够起作用,必须将使用该程序的数据库的选项select into/bulkcopy设定为true。(数据库所有者可以用SQL Server Enterprise Manager或者Transact-SQL的sp_dboption系统存储程序来设置该选项)。用sp_helpdb系统存储过程来检查数据库的状态。如果select into/bulkcopy未设定为true,你仍然可以用SELECT语句拷贝到临时表中,就像下面这样: SELECT * INTO #student_backup FROM user_db.student_admin.student 当用SELECT.. INTO语句来创建新的表时,其参考的完整性定义不会转换到新的表中。 将select into/bulkcopy设定为true的要求可能会使移植的过程变得复杂。如果你必须用SELECT语句拷贝数据到表中,请首先创建表,然后再用INSERT INTO…SELECT语句来载入该表。对于Oracle和SQL Server来说,语法是一样的,也不需要设置任何数据库选项。
视图 在Microsoft SQL Server中创建视图的语法同Oracle一样。
SQL Server视图要求表必须存在,并且视图的所有者必须有访问在SELECT语句中标明的数据库的权限(同Oracle中的FORCE选项相似)。 缺省情况下,不会检查视图上的数据修改语句来判定受影响的行是否在视图的范围内。要检查所有的修改,请使用WITH CHECK OPTION。对于WITH CHECK OPTION主要的不同之处在于,Oracle将其作为约束来定义,而SQL Server不是。此外,两者的功能是一样的。 在定义视图的时候,Oracle提供了一个WITH READ ONLY选项。SQL Server应用程序可以用仅向视图用户提供SELECT权限的方法来达到同样的结果。 SQL Server和Oracle视图都支持派生列、使用数学表达式、函数以及常量表达式。SQL Server的某些特殊的不同之处是:
当一个视图是和一个外部连接一起定义的,并且查询限定在外部接合点的内部表上时,SQL Server和Oracle的结果会有所不同。在大多数情况下,Oracle视图很容易转化为SQL Server视图。
|
把Oracle数据库移植到Microsoft SQL Server 7.0
最新推荐文章于 2019-05-23 21:12:27 发布
<!-- Begin Content -->