分享
 
 
 

Oracle 数据库向 MS SQL Server 7.0 的迁移(6)

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

迁移数据和应用程序

本节阐述了,将数据从 Oracle 数据库迁移到 Microsoft SQL Server 数据库所使用的各种方法。

在 Oracle 和 SQL Server 之间迁移的最简单的方法是,使用 Microsoft SQL Server 7.0 中的数据转换服务 (DTS) 功能。DTS 向导指导您将数据移到 SQL Server。

假如应用程序是使用 Oracle 调用接口写成的,则可考虑使用 ODBC 重写。OCI 是 Oracle RDBMS 特有的,不能用于 Microsoft SQL Server 或其它数据库。

在大多数情况下,可以用相应 ODBC 函数代替 OCI 函数,并对支持程序代码进行相关的修改。剩下的非 OCI 程序代码应该只需要较小的修改。下例给出了,建立到 Oracle 数据库连接所需 OCI 和 ODBC 语句的对比。

该表建议了下面 Oracle OCI 函数调用和 ODBC 函数之间的转换。这些建议的转换是近似的。可能并不存在转换过程的精确匹配。要获得类似的功能,可能需要对程序代码作进一步修改。

许多应用程序是使用 Oracle 编程接口(PRo*C、Pro*Cobol 等等)写成的。这些接口支持 SQL-92 标准嵌入式 SQL。它们还包括非标准的 Oracle 编程扩展。

可以使用 Microsoft 用于 C 语言的嵌入式 SQL (ESQL) 开发环境,将 Oracle 嵌入式 SQL 应用程序迁移到 SQL Server。与 ODBC 应用程序相比,这个环境对性能和 SQL Server 功能的使用提供了充分的、但绝非最优的控制。

有些 Oracle Pro*C 功能在 Microsoft ESQL 预编译器中不予支持。假如 Oracle 应用程序要广泛使用这些功能,重写为 ODBC 可能是一个较好的迁移选择。这些功能包括:

宿主数组变量。

将数据类型同等化的 VAR 和 TYPE 语句。

C++ 模块中对嵌入式 SQL 的支持。

对嵌入式 PL/SQL 或 Transact-SQL 块的支持。

游标变量。

多线程应用程序支持。

Oracle 通信区域 (ORACA) 支持。

假如应用程序是用 Cobol 开发的,可以从 Micro Focus 迁移到用于 Cobol 语言的嵌入式 SQL。在 Cobol 中,可能会碰到与用于 C 语言的 Microsoft ESQL 预编译器相同的一些限制。

可以把 Oracle 嵌入式 SQL 应用程序转换到 ODBC 环境。这一迁移过程很简单,并且提供许多优势。ODBC 像嵌入式 SQL 一样,不需要使用预编译器。因此,就节省了许多与程序开发有关的费用。

下表给出了嵌入式 SQL 语句和 ODBC 函数的近似关系。

将嵌入式 SQL 程序转换为 ODBC 时,最大的改动是有关 SQL 语句错误的处理。开发嵌入式 SQL 程序时,经常使用 MODE=ORACLE 选项。当使用这个选项时,SQL 通信区域 (SQLCA) 通常用于错误处理操作。

SQLCA 结构提供:

Oracle 错误代码。

Oracle 错误信息。

警告标志。

关于程序事件的信息。

最近一个 SQL 语句处理的行数。

在大多数情况下,在每个 SQL 语句执行后,应该检查 sqlca.sqlcode 变量中的值。假如值小于 0,就出现错误。假如值大于 0,请求语句执行,但带有警告。可从 sqlca.sqlerrm.sqlerrmc 变量,检索 Oracle 错误信息文本。

在 ODBC 中,函数在请求操作之后,返回一个指示其成功或失败的数字状态代码。状态代码被定义为字符串文字,包括 SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_NEED_DATA、SQL_ERROR 等等。每次函数调用后,应检查这些返回值。

通过调用 SQLError 函数,可以获得关联的 SQLSTATE 值。此函数返回 SQLSTATE 错误代码、原本的错误代码(它是数据源所特有的错误代码)和错误信息文本。

当上一个 ODBC 函数调用返回 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 时,应用程序通常调用这个函数。但是,每次调用时,任何 ODBC 函数可能不发布错误或发布更多的错误,因此每次 ODBC 函数调用之后,应用程序可调用 SQLError。

以下是每种环境中错误处理的示例。

假如应用程序是使用 Oracle Developer 2000 开发的,并且要在 SQL Server 上运行,则考虑将其转换到 Microsoft Visual Basic。Visual Basic 是一个功能强大的开发系统,可很好地用于这两种数据库。也应考虑其它平台上的开发工具,如 Microsoft Visual Studio、PowerBuilder、SQL Windows 等等。

假如不能直接从 Developer 2000 迁移,则考虑使用 Oracle Gateway to SQL Server。它可以作为从 Oracle 向 SQL Server 迁移的中间步骤。这个“通路”答应 Oracle RDBMS 连接到 SQL Server。所有的 SQL Server 数据请求都经由这个“通路”自动地转换。从 Developer 2000 应用程序的角度看,这个连接是透明的。SQL Server 数据被视作 Oracle 数据处理。几乎不需要对应用程序代码进行修改。

另外一个中间步骤是,将 Developer 2000 应用程序直接用于 SQL Server。Developer 2000 可以使用 Oracle 开放客户适配器 (OCA) 直接访问 SQL Server。OCA 符合 ODBC Level 1 规范,并有限支持 ODBC Level 2 功能。

OCA 建立一个与 SQL Server ODBC 驱动程序的连接。当把 Developer 2000 工具连接到 SQL Server 时,必须将 ODBC 数据源名称指定为数据库连接字符串的一部分。当退出 Developer 2000 应用程序时,OCA 与 ODBC 数据源的连接被断开。

下面的示例给出了登录连接字符串的语法。在此例中,用户登录到 SQL Server STUDENT_ADMIN 帐户。SQL Server ODBC 数据源的名称是 STUDENT_DATA。

STUDENT_ADMIN/STUDENT_ADMIN@ODBC:STUDENT_DATA

使用 ODBC 驱动程序并不保证,Developer 2000 应用程序在 SQL Server 上使用正常。要处理非 Oracle 数据源,必须修改应用程序代码。例如,列的安全属性是 Oracle 特有的,对 SQL Server 无效。

必须修改用于标识每行数据的键模式。当使用 Oracle 作为数据源时,用 ROWID 标识每行数据。当使用 SQL Server 时,必须使用唯一主键值,来保证行值的唯一性。

锁定模式也必须更改。使用 Oracle 时,在对行进行任何更改后,Developer 2000 就会试图立即锁定那行数据。使用 SQL Server 时,锁定模式应该被设定为延迟的,这样,记录只在被写入数据库时才被锁定。

还有许多其它要解决的问题,包括在 PL/SQL 程序块中,假如一个表上的多个插入访问同一页数据,就会有产生死锁的可能性。有关具体信息,请参见本章前面介绍的“事务、锁定和并发性”部分。

Microsoft SQL Sever 包括 SQL Server Web 助手,它是一个从 SQL Server 数据中生成标准 Html 文件的向导。此向导可以将 Web 页配置为静态的、定期更新的或当数据更新时更新。向导帮助您创建 Web 页。

数据库示例

一个示例的大学 RDBMS 应用程序已经创建,用于支持本章中通篇引用的示例应用程序和代码。这个应用程序是专门创建的,用于阐述将 Oracle 7 应用程序转换到 SQL Server 7.0 应用程序所涉及的要点、问题和窍门。

这个示例应用程序使用四个表,记录大学中的所有活动。DEPT 表用于记录大学所设的系。CLASS 表用于记录每个系开设的课程。STUDENT 表用于记录大学中每个学生的情况。GRADE 表用于记录每门课登记的学生。

在此示例应用程序中,社会安全号码 (ssn) 用作 STUDENT 表的主键。DEPT 表用系代码 (dept) 作为主键;而课程代码 (ccode) 用作 CLASS 表的主键。社会安全号码 (ssn) 和课程代码 (ccode) 组成 GRADE 表的主键。

列 major 定义为 STUDENT 表的外键。选择专业 (major) 时,学生必须从 DEPT 表中选择一个有效的系代码 (dept)。 CLASS 表中的系别 (dept) 一列也被定义为外键。当一门课程插入这个表中时,它必须和 DEPT 表中有效的系别 (dept) 联系起来。

GRADE 表有两个外键。当一个学生登记一门课程时,在 STUDENT 表中必须有其社会安全号码 (ssn);在 CLASS 表中必须有课程代码 (ccode)。

这就保证了,学生不会登记表中不存在的课程,也不会答应表中不存在的学生来登记课程。

在本章中,对这些示例应用程序通篇引用。

Orademo.cpp

访问 Oracle 7.3 数据库中示例大学表的 Oracle ODBC 应用程序。这个程序是转换过程的起点。它答应用户对示例大学应用程序进行数据输入和制作报告。

Ssdemo.cpp

使用 ODBC 写成的 SQL Server 应用程序。这个程序是转换过程的终点。所有的 Oracle SQL 命令、过程、包和函数都已被转化为 SQL Server Transact-SQL 命令和过程。这个程序例证了许多和 SQL Server 7.0 有关的优点。

Common.cpp

可用于 Oracle 和 SQL Server 的 ODBC 应用程序。要连接到 Oracle 或 SQL Server,用户只要提供 ODBC 数据源名称 (DSN) 即可。该程序然后登录到请求的 RDBMS。该程序包括编程技巧方面的一些极好示例,可供开发多 RDBMS 程序时使用。

Orauser.sql

创建示例 Oracle 程序所需的数据库用户帐户和数据库角色。

Oratable.sql

创建示例 Oracle 程序所需的表和视图。

Oraproc.sql

创建示例 Oracle 程序所需的存储过程、函数和包。

Oracommn.sql

创建支持 Common.

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