迁移你的数据和应用程序这一部分提供了几种不同的方法用于从Oracle数据库迁移数据到Microsoft SQL Server数据库 使用数据转换服务(DTS)的数据迁移 在Oracle和SQL Server之间迁移的最简单的方法是使用Microsoft SQL Server 7.0中的数据转换服务(DTS)特征。DTS向导将引导你迁移数据到SQL Server。 Oracle调用接口(OCI) 如果你有一个以前用Oracle调用接口(OCI)写的应用程序,你也许会考虑用ODBC重写它们。OCI是专门用于Oracle数据库的,不能用于Microsoft SQL Server或者任何其他数据库。 在大多数情况下,你可以用适当的ODBC函数替代OCI函数,加上对支持的程序代码的适当的修改。而剩下的非OCI程序代码只需要做最小的修改。下面的示例说明了建立到Oracle数据库的连接所需要的OCI和ODBC语句的比较。
此表给出了在Oracle OCI函数调用和ODBC函数之间的转换的建议。这些建议的转换是近似的。在转换处理上也许没有一个确切的匹配。你的程序也许需要一些额外的修正以获得相似的功能。
嵌入的SQL 许多应用程序是用Oracle编程接口(Oracle Programmatic Interfaces)编写的(Pro*C、Pro*Cobol、等等)。这些接口支持SQL-92标准的嵌入式SQL的使用。它们还包括非标准的Oracle编程扩展。 Oracle嵌入式SQL应用程序可以用针对C开发环境的微软嵌入式SQL迁移到SQL Server。同一个ODBC应用程序相比,这个环境提供了足够的但不是最佳的性能控制和SQL Server特征的使用。 在微软的ESQL预编译器中,有一些Oracle Pro*C特征不被支持。如果你的Oracle应用程序广泛的应用了这些特征,为ODBC重写可能是一个比较好的迁移选择。这些特征包括:
如果你的Oracle应用程序是用Cobol开发的,可以通过Micro Focus迁移到Embedded SQL for Cobol。你也许会在Cobol中碰到一些同Microsoft ESQL for C precompiler一样的限制。 你可以把你的Oracle嵌入式SQL应用程序转换到ODBC环境。这个迁移过程非常容易,并且有许多优点。在处理嵌入式SQL时,ODBC不需要使用预编译器。因此,许多同程序开发相关的管理开销被省掉了。 下表显示了嵌入式SQL语句和ODBC函数之间大致的关系。
把嵌入式SQL程序转换到ODBC的最明显的改变是处理SQL语句错误。MODE = ORACLE选项经常在开发嵌入式SQL程序时使用。当使用这个选项时,SQL通信域(SQL Communications Area ,SQLCA)典型的被用做错误处理操作。 SQLCA 结构提供了:
在大多数情况下,你要跟在每一个执行的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,则应用程序将调用这个函数(SQLError)。但是,热和ODBC函数都能在每次调用的时候传递0个或者更多的错误,因此应用程序必须在每次ODBC函数调用之后调用SQLError。 这是一个在各自环境中进行错误处理的例子。
开发者2000(Developer 2000)和第三方应用程序 如果你用Oracle开发者2000开发过应用程序,并且希望把它用于SQL Server,考虑把它转换到Microsoft Visual Basic。Visual Basic是一个强有力的开发工具,并且能在两种数据库很好的工作。你还可以考虑使用Microsoft Visual Studio中的其它开发工具、或者PowerBuilder、SQL Windows,以及其它工具。 如果你不能立即从开发者2000上迁移,考虑使用到SQL Server的Oracle Gateway。它可以用做从Oracle到SQL Server的一个中间步骤。该网关允许Oracle RDBMS连接到SQL Server。所有请求的SQL Server数据被网关自动转换。从开发者2000应用程序的角度看,连接是透明的。SQL Server数据看起来是Oracle数据。在应用程序代码上只需要做很少的修改。 另一个中间步骤是直接在SQL Server上直接使用开发者2000应用程序。开发者2000可以同Oracle开放客户适配器(Oracle Open Client Adapter,OCA)直接访问SQL Server。OCA是ODBC一级兼容,并且有限兼容ODBC二级函数。 OCA建立一个到SQL Server ODBC驱动程序的连接。当连接开发者2000工具到SQL Server时,你必须指定一个ODBC数据源名字作为数据库连接字串的一部分。当你结束开发者2000连接时,到ODBC数据源的连接同时断开。 下面这个例子说明了登录连接字串的语法。在这个例子中,用户登录到SQL Server STUDENT_ADMIN账号。SQL Server ODBC数据源的名字是STUDENT_DATA:
使用ODBC驱动程序并不能确保一个开发者2000应用程序能在SQL Server上正确的工作。应用程序代码必须修正以同一个非Oracle数据源工作。例如,专门用于Oracle的列安全性属性在SQL Server中不起作用。 你必须修改用于标识每行数据的键模式。如果使用Oracle作为数据源,将用一个ROWID来标识每一行。当使用SQL Server时,你必须用唯一主键值(unique primary key)以确保唯一行值。 锁定模式也必须修改。当使用Oracle时,开发者2000试图在每次行改变以后立即锁定一行数据。而使用SQL Server,锁定模式可以设定一个延迟,以便只在记录要写入数据库时锁定它。 还有许多其他问题需要解决,包括如果在一个PL/SQL程序块中访问同一页数据时对同一个表的多个输入发生时,潜在的死锁的可能。要了解更多信息,请参看本文的“事务、锁定和并行”部分。 互联网应用程序 Microsoft SQL Server包括SQL Server Web Assistant,这是一个从SQL Server数据生成标准HTML文件的向导。该向导可以配置你的Web页,使它是静态的、周期性更新的或者一旦数据被更新就立即更新。向导将引导你完成创建Web页的全部过程。 |