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

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 14:00:18
 迁移数据和应用程序
  本节阐述了,将数据从 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 结构提供:
  Oracle 错误代码。
  Oracle 错误信息。
  警告标志。
  关于程序事件的信息。
  最近一个 SQL 语句处理的行数。
  在大多数情况下,在每个 SQL 语句执行后,应该检查 sqlca.sqlcode 变量中的值。如
果值小于 0,就出现错误。如果值大于 0,请求语句执行,但带有警告。可从
sqlca.sqlerrm.sqlerrmc 变量,检索 Oracle 错误信息文本。
  在 ODBC 中,函数在请求操作之后,返回一个指示其成功或失败的数字状态代码。状态代
码被定义为字符串文字,包括 SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_NEED_DATA、
  通过调用 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、
  如果不能直接从 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 特有的,
  必须修改用于标识每行数据的键模式。当使用 Oracle 作为数据源时,用 ROWID 标识每
行数据。当使用 SQL Server 时,必须使用唯一主键值,来保证行值的唯一性。
  锁定模式也必须更改。使用 Oracle 时,在对行进行任何更改后,Developer 2000 就会
试图立即锁定那行数据。使用 SQL Server 时,锁定模式应该被设定为延迟的,这样,记录只
  还有许多其它要解决的问题,包括在 PL/SQL 程序块中,如果一个表上的多个插入访问同
一页数据,就会有产生死锁的可能性。有关详细信息,请参见本章前面介绍的“事务、锁定和
  Microsoft SQL Sever 包括 SQL Server Web 助手,它是一个从 SQL Server 数据中生成
标准 HTML 文件的向导。此向导可以将 Web 页配置为静态的、定期更新的或当数据更新时更
  数据库示例
  一个示例的大学 RDBMS 应用程序已经创建,用于支持本章中通篇引用的示例应用程序和
代码。这个应用程序是专门创建的,用于阐述将 Oracle 7 应用程序转换到 SQL Server 7.0
  这个示例应用程序使用四个表,记录大学中的所有活动。DEPT 表用于记录大学所设的系
。CLASS 表用于记录每个系开设的课程。STUDENT 表用于记录大学中每个学生的情况。GRADE
表用于记录每门课登记的学生。
  
  在此示例应用程序中,社会安全号码 (ssn) 用作 STUDENT 表的主键。DEPT 表用系代码
(dept) 作为主键;而课程代码 (ccode) 用作 CLASS 表的主键。社会安全号码 (ssn) 和课程
  列 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 命令和过程。这个程序
  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.cpp 程序需的所有其它 Oracle 数据库对象。
  Oradata.sql
  将示例应用程序数据加载到示例 Oracle 程序所需的表中。
  Ssuser.sql
  创建示例 SQL Server 程序所需的用户帐户和数据库角色。
  Sstable.sql
  创建示例 SQL Server 程序所需的 SQL Server 表和视图。
  Ssproc.sql
  创建示例 SQL Server 程序所需的存储过程。
  Sscommon.sql
  创建支持 Common.cpp 应用程序所需的所有其它 SQL Server 数据库对象。
  Ssdata.sql
  将示例应用程序数据加载到示例 SQL Server 程序所需的表中。
  要在目标 RDBMS 平台上创建示例应用程序,示例脚本必须按照下面的顺序运行。
  
  对于 SQL Server 数据库,运行这些脚本之前,要使这些脚本和示例 SQL Server 程序能
够工作,必须创建一个应用程序数据库(称为 USER_DB)。可以使用 SQL Server
Enterprise Manager 或 Transact-SQL CREATE DATABASE 语句,来创建该数据库。数据库创
建后,以系统管理员(sa SQL Server 用户,或 sysadmin 固定服务器角色的成员)身份登录
到 SQL Server 7.0,使用 SQL Server 查询分析器并按照指定顺序运行这些脚本。
  在为 Oracle 7.3 数据库运行这些脚本前,示例脚本假定 USER_DATA 和
TEMPORARY_DATA 表空间存在。它们通常是在 Oracle 7.3 的默认安装过程中创建的。如果这
些表空间不存在,必须添加它们;或者修改提供的示例脚本,以使用其它表空间。
  检验并确认这些表空间存在后,使用 SYSTEM 帐户登录到 SQL*Plus。如果密码不是默认
值 MANAGER,则在 Oracle SQL 脚本中更改密码。
  为此应用程序创建了三个用户帐户:
  STUDENT_ADMIN
  该帐户是 STUDENT 和 GRADE 表的管理所有者。
  DEPT_ADMIN
  该帐户是 DEPT 和 CLASS 表的管理所有者。
  ENDUSER1
  该帐户是一个只查询帐户,可以访问 STUDENT、GRADE、DEPT 和 CLASS 表。

Tags:

作者:佚名
分享到: 微信 更多