如何从oracle迁移数据到sql server

 我来答
greystar_cn
2018-08-03 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
前阵做了下数据库迁移,从Sql Server2005迁移到Oracle
10g,这里说一下迁移的方法。
Sql
Server和Oracle区别比较大,包括语法,字段类型,数据库机制,配置管理方法等等,区别是全方位的,做迁移需要注意很多问题,在迁移过程中也会遇到问题,需要细细处理之。这里说一下数据库结构的迁移,和迁移过程中注意的一些问题。(当然具体的数据库迁移过程中可能问题是不一样的,具体问题具体分析了)
迁移的方法是从Sql Server已有数据库中生成出Oracle的建库脚本,然后在Oracle数据库上执行。用到的生成工具是Power
Designer。
1、打开PD(Power
Designer简称,以下均使用PD),新建一个PDM(物理数据模型),DBMS选择Microsoft SQL
Server2005,Model name起名叫做mssdb。
2、通过逆向工程将现有Sql
Server数据库生成PDM
(1)选择Database->Reverse
Engineer Database,配置数据源,选择要迁移的数据库,输入用户名、密码。
(2)选择数据库,选择用户dbo下的所有表、视图、存储过程、方法、触发器、序列等(由于Sql Server与oracle,数据库概念上的区别,这里不需选择用户、角色)。
点击OK,生成PDM。已经建立过PDM的情况,这一步可以省略。
3、生成Oracle物理数据模型
选择Tools->Generate Physical Data Model
(1)DBMS选择Oracle
10g,输入名称:oradb。
(2)在Configure Model
Options配置中, Model Settings的Table&View界面中,勾选Ignore
identifying owner。Oracle中用户的概念与Sql Server不同,这里忽略owner。
(3)Selection标签,选择需要生成的所有表、视图、外键、存储过程、方法、触发器、序列等。
点击确定,即生成了oracle 的PDM。
注意,在生成PDM的过程中可能不会一帆风顺,有可能会报错(比如提示对象长度超限),这会导致生成失败。这时需要根据具体错误提示做相应修改(可能需要多次调整,没有办法,谁让两者差别这么大的呢)。
4、生成Oracle脚本
与Sql
Server不同的是,在Oracle里表名、字段名全部为大写,若要单独处理为小写,需加上双引号。而PD生成的脚本默认是有双引号的,这里需要修改默认配置,去掉双引号。
然后选择oradb,然后选择Database->Generate
Database,进入数据库生成界面
在Format标签下,去掉勾选Owner prefix,它将省掉建表语句前“dbo.”所带来的麻烦;
在Selection标签下,选择要生成脚本的各对象;
在Preview标签下,可以预览预生成的脚本(表较多时,切换会比较慢)。
点击确定,即得到生成的脚本。
5、检查与调整
脚本是PD自动生成的,因为表比较多,在oracle上直接去执行难免会有错误。所以在执行之前需要检查下脚本的正确性。这里提几点需要注意的地方。
(1)Oracle要求表名、字段名等长度最多是30位,而Sql Server没有这个限制,所以可能会有在Sql
Server创建正常的表而在Oracle下会创建失败。
(2)检查一下主键、外键的名称,它们有可能是随机生成的名称。可根据相应规范进行修改。
(3)检查字段名是否用到了Oracle的关键字。比如Sql
Server命名“备注”字段可能会用“comment”、标题用“title”,但comment、title在Oracle中是关键字,不可以做为字段名称。
(4)存储过程、方法是否符合Oracle语法。
(5)Sql
Server有自增字段,而Oracle没有。要实现此功能,需要相应创建序列、触发器。
(6)Sql
Server中字段类型为text的情况,如果是存二进制数据需要在Oracle中选用Blob字段类型。
(7)Sql
Server有外键的情况,主表记录删除,从表记录也会跟着删除;而Oracle默认情况是当从表有记录时,所对应的主表记录不允许删除。所以这种情况下外键需要添加外键级联删除。
(8)生成的表、视图等个数是否正确,缺失的情况可单独生成脚本。
系统不一样,出现问题的点可能也不一样,具体问题具体分析。
6、建库
在Oracle数据库服务(当然要先安装好Oracle服务端、并建立数据库)orcl实例下,使用用户sys登陆并创建用户orauser,并将resource、connect角色赋给orauser(这里,orauser使用默认表空间、默认临时表空间)。
用刚创建的用户orauser登陆orcl数据库服务,执行前面已经生成的脚本,若干分钟后脚本执行完毕,观察一下执行过程中有无错误产生,也可以记录执行的日志以便日后查看;检查看表、视图等个数与Sql
Server数据库中是否一致。如果都正确,那么,数据库结构从Sql
Server到Oracle的迁移到此结束。当然,迁移的是否正确还需要在之后的使用中检查,发现错误及时修改即可。
小新说人事
2017-10-30 · TA获得超过1万个赞
知道大有可为答主
回答量:5196
采纳率:76%
帮助的人:2002万
展开全部
迁移主要有两个工作:
1. 根据Sql Server数据库生成创建Oracle数据库的脚本
2. 修改代码中的SQL语句
根据Sql Server数据库生成创建Oracle数据库的脚本
1. 用PowerDesiner将Sql Server数据库反向工程生成物理数据模型
2. 根据反向工程生成的物理数据模型创建逻辑模型
3. 再根据逻辑模型生成Oracle数据库版本的物理模型
4. 根据Oracle数据库版本的物理模型生成Oracle数据库创建脚本
5. 按照Oracle命名规则和数据类型定义修改Oracle数据库创建脚本
6. 在PL/SQL Developer中执行以检验其正确性
修改代码中的SQL语句
1. Sql Server中经常用方括号把表名和字段名括起来, 到Oracle中要把这些方括号都去掉
2. 将参数变更前的"@"符号改为":"符号
3. 将Sql Server专有的方法和函数替换成Oracle相应的方法和函数
4. 在PL/SQL Developer中执行SQL语句以检验其正确性
转换过程中的常见问题
1. 表名和字段名使用了Oracle中的关键字
2. Sql Server中的NVARCHAR数据类型可存4000个汉字, Oracle中的NVARCHAR/NVARCHAR2数据类型只能存2000个汉字
3. 索引名称和外键名称超过了30个字符
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式