我目前正在启动一个从 Oracle 到 SQL 2008 的迁移项目。由于我目前正在阅读《从 Oracle 迁移到 SQL Server 2005 的 SSMA 官方指南》,因此我希望获得一些来自个人经验的建议和指点。
如果指南和文章中出现的问题能够以有组织的方式突出,并附有讨论和解决方案,将不胜感激。
谢谢
答案1
从管理和数据库使用角度来看,Oracle 和 SQL Server 有很大不同。
数据库使用情况
准备好花费大量时间进行移植。我首先想到的一些问题如下:
PL/SQL 与 T-SQL
这些语言本身就存在很大差异,因此需要为脚本和存储过程进行大量移植工作。这包括不同的连接运算符(||
vs. +
)、函数名称和细节的变化(NVL
vs. COALESCE
)以及概念差异(异常处理、区分大小写)。其他一些示例:
游标与临时表
在 Oracle 中使用游标所做的大多数操作都是在 SQL Server 中使用临时表完成的。
序列与身份
它们基本上是等效的,但是您必须更改使用它们的任何过程的语法。
数据库管理
它们大多具有相同的功能,有时名称不同,副作用也不同。以下是一些亮点:
- 数据(卸载)加载(数据泵或 sql*loader 或 exp/imp 与 DTS 或 bcp)
- 数据字典(DBA_* 与 INFORMATION_SCHEMA)
- 事务日志设置(存档日志与恢复模型)
- 表类型(索引组织与聚集索引)
- 锁定机制(在 Oracle 中读取不锁定,在 SQL 服务器中则不然)
简而言之,从 Oracle 转到 SQL Server(或反之亦然)时,学习曲线相当长。欢迎随意添加到此列表。
答案2
Oracle 和 SQL Server 之间有一些不重叠的功能,并且它们的工作方式在很多方面有很大不同。例如:
Oracle 没有与标识列直接等效的功能。使用序列可以以不同的方式实现等效功能。
PL/SQL 和 T-SQL 是截然不同的语言。如果您有大量的存储过程代码,请准备好花费大量时间来移植它。此外,T-SQL 习语通常与 PL/SQL 有很大不同。例如,T-
SQL 在设置操作方面比 PL/SQL 好得多,而 PL/SQL 在使用游标(例如并行循环构造)方面则好得多。在 PL/SQL 中迭代完成的某些事情可能最好使用 T-SQL 中的设置操作和临时表来完成。SQL Server 中的比较默认不区分大小写。Oracle 中的比较区分大小写。
在 SQL Server 中使用表分区与使用 Oracle 有很大不同(并且稍微笨拙一些)。
答案3
Microsoft 拥有一套全面的资源,可帮助将应用程序和数据库从 Oracle 迁移到 SQL Server 2008。请查看主迁移页面SQL Server 2008 解决方案 - 迁移- 它包括迁移方法、帮助您的工具以及一些客户推荐。
希望这可以帮助。
答案4
我更喜欢使用第三方应用程序来迁移我的数据,当我将 MS SQL 迁移到 Foxpro 时,我使用数据加载器,它运行良好,并且它可以迁移几乎任何数据库。
免费下载 :http://www.dbload.com