开发和应用程序平台 为了清楚和便于表述,假定开发和应用程序平台是 Microsoft Visual Studio 6.0 版、Microsoft Windows NT 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 驱动程序,但在本章中不予具体讨论。
概述 应用程序迁移过程似乎很复杂。两种 RDBMS 之间有很多体系结构方面的差异。描述 Oracle 体系结构的词汇和术语在 Microsoft SQL Server 中,其含义经常完全不同。此外,Oracle 和 SQL Server 都有许多专有的 SQL-92 标准扩展。
从应用程序开发人员的角度来看,Oracle 和 SQL Server 治理数据的方式是相似的。但是,Oracle 和 SQL Server 之间内部的差异是相当大的,假如治理得当,它对迁移应用程序造成的影响就会微乎其微。
一致的 API 是指,不论程序与 Oracle 还是与 SQL Server 交互,它在建立连接、执行命令和检索结果时所调用的函数是相同的。
ODBC 还定义了一个标准调用级接口,并使用标准转义序列,指定执行公用任务的 SQL 函数,但该函数在不同的数据库中语法不同。不需要修改任何程序代码,ODBC 驱动程序就可以自动地把 ODBC 语法转换成原本的 Oracle 或 Microsoft SQL Server SQL 语法。在某些情况中,最好的方法是编写一个程序,使 ODBC 在运行时进行转换。
ODBC 并不是一个神奇的解决方案,不能对所有的数据库均实现完全的数据库独立性、完备的功能以及较高的性能。不同的数据库和第三方厂商提供不同级别的 ODBC 支持。一些驱动程序只实现了映射在其它接口库顶层的核心 API 函数。其它驱动程序,例如 Microsoft SQL Server 驱动程序,在原本的、高性能的驱动程序中提供全面的级别 2 支持。
假如程序只使用核心 ODBC API,它可能放弃了一些数据库带有的功能和性能。再者,并不是所有原本的 SQL 扩展都可以用 ODBC 转义序列表示,例如 Oracle DECODE 和 SQL Server CASE 表达式就是这样。
OLE DB 是下一代的数据访问技术。Microsoft SQL Server 7.0 利用了 SQL Server 自身组件中的 OLE DB。此外,应用程序开发人员在 SQL Server 新的开发过程中,应考虑使用 OLE DB。Microsoft 在 SQL Server 7.0 中加入了用于 Oracle 7.3 的 OLE DB 提供程序。
OLE DB 是 Microsoft 的一个战略性系统级编程接口,用于治理整个组织内的数据。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 的逐步迁移,每节都包括一个 Oracle 7.3 和 Microsoft SQL 7.0 之间相关差异的概述。此外,还包括转换时要考虑的因素、SQL Server 7.0 的优势以及多个示例。
体系结构和术语 要成功地迁移,开始之前应该了解与 Microsoft SQL Server 7.0 有关的基础体系结构和术语。本节中的许多例子均取自 Oracle 和 SQL Server 应用程序示例(附在文中)。
在 Oracle 中,“数据库”指整个 Oracle RDBMS 环境,并包括以下组件:
Oracle 数据库进程和缓冲区(实例)。 包含一个集中系统编录的 SYSTEM 表空间。 其它由 DBA 定义的表空间(可选)。 两个或多个在线重做日志。 存档的重做日志(可选)。 各种其它文件(控制文件,Init.ora 等等)。 Microsoft SQL Server 数据库从逻辑上将数据、应用程序和安全机制分离,这一点与表空间非常相似。Oracle 支持多个表空间;SQL Server 则支持多个数据库。表空间还可用于支持数据的物理存放;SQL Server 使用文件组提供相同的功能。
Microsoft SQL Server 还默认安装下列数据库:
model 数据库是所有新创建的用户数据库的模板。 tempdb 数据库与 Oracle 临时表空间相似,它用于临时工作存储和排序操作。与 Oracle 临时表空间不同的是,用户可以创建临时表,并在用户注销时自动删除。 msdb 支持 SQL Server 代理及其计划的作业、警报和复制信息。 pubs 和 Northwind 数据库作为培训示例数据库提供。
有关默认数据库的具体信息,请参见 SQL Server Books Online。
每个 Oracle 数据库均在一个集中系统编录或数据字典上运行,它驻留在 SYSTEM 表空间中。每个 Microsoft SQL Server 7.0 数据库均维护其自身的系统编录,它包含下列信息: