前置知识

SQL Server

SQL Server数据库是微软官方出品的一款数据库,官方指定的数据库连接工具为Microsoft SQL Server Management Studio xx(简称SSMS,xx为版本代码,如11、12、13等),界面如下图。

Oracle

Oracle数据库为甲骨文公司出品的数据库,官方指定的数据库连接工具为sql developer,界面如下图。

可选方案

方案一:由SSMS提供的导出工具

工具入口

登录SQL Server数据库后,右键想要导出的数据库。

导出流程

选择要导出的数据源配置:

选择要导入的数据源配置:

接下来的流程我没有在电脑上成功执行,报错如上图 经过多种方法尝试后我放弃了这个方案,如果读者没有在这里报错的话可以继续执行后续流程

后续流程来自于该文章:【SQLServer】sqlserver数据库导入oracle,仅供参考。

方案二:由sql developer提供的工具

参考文章:通过Oracle sql developer从sqlserver迁移数据到oracle

前置工作

1.设置驱动

向sql server中新增第三方连接驱动,用于连接SQL Server数据库。

2.连接SQL Server数据库

如果驱动被成功识别,在新建连接的时候应该会有SQLServer的选项。 (没有的话可尝试重启软件)

3.连接Oracle数据库

情况1: 如果Oracle数据库版本低于12c,按照正常方式连接Oracle数据库即可。

情况2: 当Oracle数据库版本大于12c的时候,需要注意的是迁移到的库应当在pdb库中,不应该在cdb库。所以新建Oracle数据库连接时应当连接pdb库中的账户。 如果你不知道cdb与pdb的区别,可以查看官方文档。 如果你不知道如何创建pdb数据库,可查看参考文章:创建可插拔数据库PDB。 因为需要将SQLServer库中的内容迁移到一个Oracle中一个全新的库中,所以需要先创建表空间和用户。

## 切换至pdb库中,使用dba用户执行

## 创建pdb2_admin表空间及用户

create BIGFILE tablespace pdb2_admin

datafile 'E:/H/Oracle/data_folder/pdb2_admin.dbf' size 1024m

autoextend on next 1024m maxsize unlimited;

drop user pdb2_admin cascade;

create user pdb2_admin identified by pdb2_admin

default tablespace pdb2_admin;

grant connect,resource,dba to pdb2_admin;

到此,已经创建了pdb库、pdb库的pdb2_admin用户,可以正式创建数据库连接了。

导入流程

右键SQLServer数据库,找到“迁移到Oracle”选项。

点击完成之后就开始执行迁移任务了。

迁移结果确认

迁移任务执行结果的日志在你设定的“迁移临时文件夹中”,类似于:

迁移完毕之后会创建跟SQLServer源库同名的用户账户,在日志的考前的位置中可以看到账户的名称及密码信息:

假如你看到的是 “创建用户失败”等字样,那么大概率你是在cdb库中进行的迁移工作,请回到前置工作的步骤3尝试重新设置Oracle数据库连接。

迁移结果的确认是重点,你需要分析日志,查看哪些语句执行失败。 首先登录生成的新用户,如果登录失败,请检查账户锁定情况及密码过期情况。

– 查看用户信息 SELECT * FROM dba_users; – 解锁用户 ALTER USER asrs_wms ACCOUNT UNLOCK; – 修改用户密码 ALTER USER asrs_wms identified by asrs_wms;

常见迁移问题

根据迁移工具及数据库版本的不同,最终迁移生成的Oracle库表可能会存在以下问题。

字段类型转换异常

如:create_time本是datetime类型,转换失败后可能识别为varchar类型

排查方案

使用如下sql语句查看可能存在问题的表字段数据。

SELECT * FROM USER_TAB_COLUMNS WHERE COLUMN_NAME LIKE '%TIME%';

解决方案

解除对应字段的非空限制,清空字段数据,修改字段类型为date,赋值(可选)

字段长度异常

如:nvarchar(4000)超出了Oracle中varchar2类型的最大长度2000,会导致转换失败。

排查方案

查看转换日志或手动对比迁移表差异,定位到未成功转换的表。

解决方案

可以的话,暂时修改源数据表中的字段类型至nvarchar(2000),然后重新执行转换。

已有数据自增主键异常

源表中的主键可能存在自增设置,在转换为Oracle表时会生成唯一约束和自增序列,然而自增序列的初始值可能并不是表数据中“最大主键的下一位”,这会导致程序在新增数据时出现“违反唯一约束条件”的错误。

排查方案

对存在数据的表的主键进行检查,通过如下语句查询一次下一个主键的生成值,确保生成值大于已有主键的最大值。

select 序列名.nextval from dual;

解决方案

方法1:修改步长快速增加序列值到想要的数值。

-- 如已有主键为20000+,序列值为100,可通过临时修改步长

alter sequence 序列名 increment by 20000;

-- 执行一次取值,此时取出的值应当为:20100

select 序列名.nextval from dual;

-- 修改成功后恢复步长为1

alter sequence 序列名 increment by 1;

但这种方法可能会出现“禁止修改”的错误,此时可以尝试方法2。

方法2:修改表主键中对应序列的初始值。 此方法通过DataGrip实现,流程如下图。

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: