sqlserver2008迁移到oracle11gR2

来源:互联网 发布:淘宝一键复制怎么用 编辑:程序博客网 时间:2024/04/28 21:04
背景:最近做了SQLSERVER数据导入到ORACLE数据库,现在迁移后软件运行已经正常,说明数据迁移已经成功,现将经验分享一下。
迁移思想:这里主要使用的是ORACLE SQL DEVELOPER工具建立连接MSSQL与oracle的连接,再导入到oracle数据库
详细步骤:
一、转换工具安装

(1)Oracle Sql Developer官方下载页面里面可以直接下载到。最新版本是SQL Developer 4.1.3 (December 22, 2015发布)。Oracle Sql Developer需要JDK的支持,所以请注意下载包含JDK的下载包,还有请注意对应的操作系统。提供一个下载地址:http://www.oracle.com/technetwor ... ownloads/index.html

(2)JDK下载,这里提供一个地址:http://www.oracle.com/technetwor ... nloads-2133151.html

(3)JTDS下载,这里提供一个地址:http://sourceforge.net/projects/jtds/

(4)加载JTDS: 打开Oracle Sql Developer,工具—>首选项—>数据库—>第三方JDBC驱动程序——添加条目把刚才解压的.jar添加进来

二、建立资料档案库(Migration Repository)
(1)、连接到Oracle
在程序左边的连接窗口中,点击加号按钮,添加一个到Oracle数据库的连接(RIS是要目标库的dba用户),如下图:

配置完成后,点击连接按钮,连接到数据库。
(2)连接到SQLSERVER用户

3、数据库移植向导
A、启动数据库移植向导
建立到SqlServer的连接后,开始对数据库进行移植。有两个地方可以启动数据库移植向导,一个是在新建的SqlServer连接上点击右键,选择移植到Oracle,另一个是在菜单工具-移植-移植,启动向导后,第一页当然是向导的简介,通过简介,我们可以知道整个移植过程有7步,并且有两个先决条件,如下图:

直接点击下一步。
B、选择资料档案库

这里截断的意思是将资料档案库清空,我们建立一个移植项目后,所有抓取的数据库结构信息、统计信息还有转换记录等都保存在这个资料档案库中,只要项目名称不同,即使不清空资料档案库也不会影响到移植工作,建立资料档案库有一个很重要的原因就是:资料档案库中会存储SQLSERVER数据库中的所有数据库对象,例如,视图,索引,约束,过程,函数,触发器等都会在资料档案库中存放信息,也就相当于oracle中的数据字典信息。
C、为转换项目命名

选择好资料档案库后,点击下一步,为我们的转换项目输入名称和备注,以便识别。另外,还需要指定脚本生成目录,用于存放向导执行过程中生成的脚本。
D、选择源数据库连接

然后继续下一步,选择源数据库,在这里有联机和离线两种模式,联机即是直接连接到源数据进行抓取,而离线则是在SqlDeveloper不直接连接到源数据库的情况下,通过SqlDeveloper提供的脚本预先捕获数据库,得到数据库结构文件后,通过向导导入,我们一般选择联机模式。
这里是选择我们刚才建立的SqlServer连接。
E、选择捕获源数据库
在这一步中,显示为两个多选框,左边列出Sql Server中所有可选的数据库,通过中间的按钮将数据库移动到右边的已选数据库中。如下图:

F、数据类型转换选项
在这一页中,列出了所有系统内置的数据类型转换对应关系。可以其进行修改,一般不作修改直接下一步。如下图:

G、选择目标数据库

与源数据库的选择一样,目标数据库的选择同样也有联机和离线两种方式。仍旧选择联机。选择orcl(ris)连接。
H、移动数据选项

这个页面中,也提供了联机或离线两种方式进行数据移动。所谓联机虽然“据说”可以直接以联机的方式从源数据库中移动数据到Oracle中,可我试过几次没有成功,查了好多官方资料都说原因不明,无解了我就随便选了一个,后面再通过手工导入表结构和数据。
I、选项完毕,开始执行
在向导的最后,是一个用于确认的“概要”页面。确认无误后,点击完成。移植将会开始执行。

三、复制表结构和数据
在sqlserver的数据库下选中所有需要复制的表点击右键复制到oracle,接着选择目标连接名称为:RIS,点击应用,将所有表结构和数据复制到oracle数据库。

四、约束、索引的创建
(1)、不知道什么原因sqlserver的主键键复制到oracle后全部变成了check约束且名字也错误(为sys_),所以这里就我就自己写了一个脚本,在资料库中查询,然后再手工创建约束和索引。
select 'ALTER TABLE '||a.table_name||' ADD CONSTRAINT '||c.name||' PRIMARY KEY('||b.column_name||');'
from md_tables a,md_columns b,MD_CONSTRAINTS c,MD_CONSTRAINT_DETAILS d
where a.id=b.table_id_fk
and b.table_id_fk=c.table_id_fk
and d.column_id_fk=b.id
and a.schema_id_fk=1128051
order by b.id
(2)创建unique和非unique约束
select to_char('CREATE UNIQUE INDEX '||a.index_name||' on '||b.table_name ||'('||  wm_concat(d.column_name)||');')
from md_indexes a,md_tables b,md_index_details c,md_columns d
where a.table_id_fk=b.id
and schema_id_fk=1128051
and c.index_id_fk=a.id
and c.column_id_fk=d.id
and a.index_type='UNIQUE'
group by a.index_name,b.table_name

select to_char('CREATE  INDEX '||a.index_name||' on '||b.table_name ||'('||  wm_concat(d.column_name)||');')
from md_indexes a,md_tables b,md_index_details c,md_columns d
where a.table_id_fk=b.id
and schema_id_fk=1128051
and c.index_id_fk=a.id
and c.column_id_fk=d.id
and a.index_type!='UNIQUE'
group by a.index_name,b.table_name
五、视图与过程的创建
视图和过程的创建在移植项目下的-》转换后的对象中点开直接执行创建,里面有很多关于utils 的错误,原因是utils是oracle development转oracle自动创建的一个包,里面定了自己的一些过程名字。但是里面没有写内容,所以这里的这些函数都要替换成oracle系统自带的才行。
注意下面三个例子举例:
1、    UTILS.CONVERT_TO_VARCHAR2转换成to_char
2、WHILE utils.fetch_status(PLACE_LIST%FOUND) <> -1
转换成 WHILE PLACE_LIST%FOUND
3、EXCEPTION WHEN OTHERS THEN utils.handleerror(SQLCODE,SQLERRM);
转换成EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20101,'Error in P_SER_STUNO' || SQLCODE );






























0 0
原创粉丝点击