分享
 
 
 

Oracle数据库向MSSQLServer7.0的迁移(1)

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

摘要:本文是为希望将其应用程序转为 Microsoft SQL Server 应用程序的 Oracle 应用程序开发人员所写的。文中讲述了成功地进行转换所需要的工具、过程和技巧。并突出强调了创建高性能、高并发性 SQL Server 应用程序的基本设计原则。

本文的目标读者应该具有:

坚实的 Oracle RDBMS 基础知识背景。

全面的数据库管理知识。

熟悉 Oracle SQL 和 PL/SQL 语言。

实际使用 C/C++ 编程语言的知识。

sysadmin 固定服务器角色的成员身份。

本文假定,您熟悉与 Oracle RDBMS 有关的术语、概念和工具。有关 Oracle RDBMS 及其体系结构的详细信息,请参见 Oracle 7 Server Concepts Manual(Oracle 7 Server概念手册)。至于使用 Oracle 脚本和示例,还假定您熟悉 Oracle Server Manager 和 Oracle SQL*Plus 工具。有关这些工具的详细信息,请参见 Oracle 文档。

目录

开发和应用程序平台

概述

本文组织结构

体系结构和术语

安装和配置 Microsoft SQL Server

定义数据库对象

实施数据完整性和业务规则

事务、锁定和并发性

死锁

SQL 语言支持

游标的实现

优化 SQL 语句

使用 ODBC

开发和管理数据库复制

迁移数据和应用程序

数据库示例

开发和应用程序平台

为了清楚和便于表述,假定开发和应用程序平台是 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 之间内部的差异是相当大的,如果管理得当,它对迁移应用程序造成的影响就会微乎其微。

开发人员面临的最严峻迁移问题是:SQL-92 SQL 语言标准的实现和每种 RDBMS 提供的扩展。一些开发人员只使用标准的 SQL 语言语句,并倾向于使其程序代码尽可能通用。通常,这意味着把程序代码限定在初级 SQL-92 标准,该标准在许多数据库产品中均得到了一致的实现,其中包括 Oracle 和 SQL Server。

这种方法可能给程序代码带来不必要的复杂性,并显著影响程序性能。例如,Oracle 的 DECODE 函数是 Oracle 特有的非标准 SQL 扩展。Microsoft SQL Server 的 CASE 表达式已不止是初级 SQL-92 的扩展,并未在所有的数据库产品上实现。

如果不使用这两个函数,则可以编程方式实现其功能,但可能需要从 RDBMS 检索更多的数据。

此外,SQL 语言的过程扩展也可能带来困难。Oracle PL/SQL 和 SQL Server Transact-SQL 语言功能相似,但语法不同。各 RDBMS 及其过程扩展之间不存在精确的对等关系。因此,您可能会放弃使用存储程序,例如过程和触发器。这是令人遗憾的,因为这些程序能够提供极好的性能和安全性,而这些用任何其它方式均无法实现。

使用专用的开发接口也会带来其它的问题。使用 Oracle OCI(Oracle 调用接口)转换程序,通常需要大量的资源投入。当开发的应用程序可能使用多个 RDBMS 时,应考虑使用开放式数据库连接 (ODBC) 接口。

ODBC 是专为使用多种数据库管理系统而设计的。ODBC 提供一致的应用程序编程接口 (API),它通过数据库特有驱动程序的服务,与不同的数据库一同工作。

一致的 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 表达式就是这样。

此外,通过编写 SQL 语句使用数据库优化程序也是通常的做法。在 Oracle 中用来提高性能的技巧和方法,在 SQL Server 中并不一定最好。ODBC 接口无法将技巧从一个 RDBMS 转化到另一个 RDBMS 中。

ODBC 并不禁止应用程序使用数据库特有的功能,也不禁止优化性能,但是应用程序需要一些数据库特有的代码部分。有了 ODBC,要使程序结构和绝大部分程序代码在多个数据库上保持一致,就变得十分简单。

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 数据库均维护其自身的系统编录,它包含下列信息:

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

约束。

用户和权限。

用户定义的数据类型。

复制定义。

数据库使用的文件。

在 master 数据库中,SQL Server 还加入了一个集中系统编录,它包括系统编录以及有关每个数据库的一些信息:

数据库名称和每个数据库的主文件位置。

SQL Server 登录帐户。

系统消息。

数据库配置值。

远程和/或链接的服务器。

当前活动信息。

系统存储过程。

与 Oracle 中的 SYSTEM 表空间一样,要访问任何其它数据库,SQL Server master 数据库必须可用。因此,当 master 数据库做重大修

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有