数据库
首页 > 数据库> > 记录一次通过Navicat迁移MySQL到Oracle数据库的过程问题

记录一次通过Navicat迁移MySQL到Oracle数据库的过程问题

作者:互联网

工作中遇到的很多问题,记录下来以后再次遇到不至于再耗费很多事件在百度上面,也可以大家一起分享,这也是我写下来的原因之一。虽然他人遇到的问题可能与我遇到的问题并不完全相同,但是有一部分相同并能解决这一部分问题就也足够了。
最近项目都用到了ArcGIS,而ArcGIS只能使用Oracle数据库,数据库最开始选用的是MySQL,为了部署统一数据库,所以需要从MySQL迁移到Oracle上面,过程中遇到了一些问题,记录如下:

1. Oracle数据库表空间 用户创建授权

至此Oracle准备完成。

2. 通过Navicat进行数据传输
选择“工具”——>“数据传输”,选择配置数据传输的源及目标库,如图:

在这里插入图片描述
点击下一步,选择数据库对象,如图:在这里插入图片描述
点击下一步,开始传输数据,我传输的时候用了十几分钟,看数据大小而定。传输完成后,就会在Oracle数据库看到传输的数据表。

3. 传输完后遇到的问题

- 数据库表名、字段名均为小写

Oracle表和字段是有大小写的区别。Oracle默认是大写,如果我们用双引号括起来的就区分大小写,如果没有,系统会自动转成大写。
Navicat传输数据时按照MySQL中的表名大小写状态进行传输,导致在Oracle中必须通过加双引号的方式进行操作。

解决方案:navicat数据传输工具的选项卡中提供了“转换对象名为小写/大写”的选项,勾选为大写再次进行数据传输即可。或者也可以登录用户空间后执行语句将表名及字段名统一改为大写(我使用的该方式,亲测可行):

begin
   for t in (select table_name tn from user_tables where table_name <> upper(table_name)) loop
       begin
          for c in (select column_name cn from user_tab_columns where table_name=t.tn) loop
              begin
                 execute immediate 'alter table "'||t.tn||'" rename column "'||c.cn||'" to '||c.cn;
              exception
                 when others then
                    dbms_output.put_line(t.tn||'.'||c.cn||'已经存在');
              end;
          end loop;

          execute immediate 'alter table "'||t.tn||'" rename to '||t.tn;
          exception
             when others then
                dbms_output.put_line(t.tn||'已存在');
       end;
   end loop;
end;

- Oracle方言问题
我使用的jpa改了yml文件配置datasource由MySQL改为了Oracle后项目启动报错:在这里插入图片描述
解决方案: yml文件配置Oracle方言:
在这里插入图片描述

- 数据类型导致的“无法转为内部表示”错误

这个问题是由于数据类型导致的错误,因为Boolean类型在MySQL中为bit类型,转到Oracle后为varchar2类型了,且数据内容异常乱码,导致与Java实体类型无法对应导致报错。

解决方案: 我没找到比较好的解决方案,是在Oracle中将数据类型改为number后又将相关字段内容从MySQL复制了一遍。因为Boolean类型字段相对较少,所以操作起来倒没有耗用太多时间。

以上为过程整理信息,欢迎有相关操作经历的小伙伴评论。

标签:farmland,Navicat,tn,user,MySQL,Oracle,table
来源: https://blog.csdn.net/weixin_43241706/article/details/121969217