mysql迁移到orcale 图文教程[附带官方教程]

场景:mysql 数据库转移到oracle中去,存在数据库类型的差别,还有主键id自增长的不同,如果要手动完成这个事情,工作量大,容易出错 我们借助 SQL Developer

迁移说明: 实现的功能是把mysql上的库迁移到oracle,准备好mysql登陆帐户,在oracle上新建一个用户,这个用户不是用来保存你迁移的数据,而做迁移工作用的,理解成迁移工作的配置 ,迁移后的数据会在oracel的其它用户里,比如你mysql下面有两个库A和B ,那迁移到oracle后,在oracle下会自动新建两个用户A和B(密码是小写的,和用户名相同),数据就在这两个用户下。

1. 准备工作:

2. 添加驱动:

  • 下载好mysql驱动包并解压出来,打开SQL Developer , 工具–首选项–数据库–第三方jdbc驱动程序 , 点击”添加条目” 选择刚才解压开的jar包并确认。
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名1.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名2.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名3.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名4.png

3. 新建oracle用户:

  • 这个新建的用户是用来保存迁移时要用到的配置文件,不是用来保存迁移后的数据 ,其实就是相当于临时用户,迁移完了后你删除此用户也可以。
-- 这里ora_tmp可以为任意名字,反正也只是拿来做迁移配置用的
create user pluxx identified by pluxx ;
-- grant connect,resource to pluxx ;
-- 这里权限要给所有,不然迁移过程可能会失败 
grant ALL PRIVILEGES  to pluxx ;
 

4. 使用SQL Developer 新建数据库连接:

  • 新建一个oracle连接 (这个用户就是刚才新建的那个
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
  • 新建一个mysql连接

    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png

  • 注意:下图中我新建了两个连接,bbd开头的是mysql连接,也是我要迁移的那个库,plu开头的是oracle连接,用于保存迁移配置
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名5.png

5. 初始化oracle连接中的配置用户(plu开头):

  • 选中oracle的连接,右键 移植资料档案库–删除移植资料档案库

    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名6.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名7.png

6. 准备迁移

  • 选中oracle连接 ,点击工具档 工具–移植–移植 。接下来的步骤看图操作

    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名8.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名9.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名10.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名11.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名12.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名13.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名14.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名15.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名16.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名17.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名18.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名19.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名20.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名21.png

7. 验证迁移结果

select username,default_tablespace from dba_users ;

《mysql迁移到orcale 图文教程[附带官方教程]》 QQ五笔截图未命名22.png

8. 错误处理

  1. 执行第二步报错 执行脚本时出现 SQL 错误。 尝试在创建资料档案库之前删除资料档案库。
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
  • 如果点确定,继续操作后面的步骤,到最后一步又会报错 ORA-01400: 无法将NULL 插入 ("XXX"."MD_PROJECTS"."ID")
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
  • 原因是权限不够,解决方法是给oracle用户增加所有权限 grant ALL PRIVILEGES to 用户名 ; 可以看第3步操作
  1. 如果迁移后,oracle 数据库这边表的comment乱码,先按PL/SQL乱码解决方法设置好oracle 客户端和服务端的编码 ,
  • 打开 sql developer , 修改 tools - preferences - Environment 下的encoding(和数据库统一,如果是utf-8 就选择 utf8 ,选择utf-8好像中文还是会出现一小部分乱码)
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
  • 设置搜索 import , 把下图两个地方修改 (和数据库统一,这里用utf8
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
    然后完成以上处理后再重新迁移一次,如果还是乱码,就重迁移一次,选择脱机处理吧
  • 第8步第9步选择脱机,其它步骤不变,
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
  • 完成后会根据你设置的目录生成sql , 只是表结构
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
  • 文本编辑器检查一下 master.sql 里面的中文是不是乱码,如果不是,继续看,如果还是乱码,就跳过这部分内容吧
  • sql developer 打开这个master.sql ,然后点运行脚本的图标
    《mysql迁移到orcale 图文教程[附带官方教程]》 image.png
  • 运行过程中会叫你选择一个连接,此时选择 oracle 的连接,这样就会新建用户并把表建在里面, mysql 的一个库对应 oracle的一个用户,建用户时会提示输入密码,你设置一个即可,直到运行完成。

以上就是迁移的全部流程

迁移后的数据会在oracle的新用户下,用户名对应mysql中的数据库名,密码和用户名一样(这个是小写的) ,如果要把数据从mysql迁移到oracle的指定用户名下,可以先按以上流程迁移数据,然后再把数据导入指定的用户名下。
-- 这里的用户名对应mysql中的库名  ,默认是导出数据和结构,只导出表结构加上 rows=n
exp 用户名/密码@orcl file=e:/ma.dmp log=e:/ma.log  owner=用户名;
-- 导出 record结尾的表
exp 用户名/密码@orcl file=e:/ma.dmp log=e:/ma.log  tables=(%record);
-- 把上面导出的数据重新导入指定用户下
imp 指定的用户名/密码@orcl file=e:/ma.dmp log=e:/ma_imp.log full=y ;

mysql 中每个有表最好保存一条以上的数据,最好不要有空表 ,如果msyql有空表,迁移到oracle后也是空表,这时使用exp导出dmp文件时不会导出空表,处理麻烦,万一你遇到,轻松解决oracle11g 空表不能 exp 导出 的问题。

最终效果: mysql用户userA下有两个库db1和db2 。迁移oracle后,变成用户db1和db2 , 这两个用户下分别保存着db1和db2的数据。

注意:

  • 如果导出时出现如下错误 , 则要给用户加上权限 grant exp_full_database to 用户名
EXP-00032: Non-DBAs may not export other users
EXP-00000: Export terminated unsuccessfully
  • 如果导入时也出现类似错误 , 则要给用户加上权限 `grant imp_full_database to 用户名
附:
-- 创建新用户
create user 用户名 identified by 密码;
-- 赋给用户基本权限
grant connect,resource to 用户名;
-- 赋给用户所有权限
grant all PRIVILEGES from 用户名;
-- 收回用户所有权限
revoke all PRIVILEGES from 用户名;
-- 删除用户,会删除用户的所有数据
drop user 用户名 cascade ;
  1. 常用的系统权限集合有以下三个:
    CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)
  2. 常用的数据对象权限有以下五个:
    ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名,
    DELETE ON 数据对象名, INSERT ON 数据对象名, ALTER ON 数据对象名
  1. CONNECT角色: –是授予最终用户的典型权利,最基本的
    ALTER SESSION –修改会话
    CREATE CLUSTER –建立聚簇
    CREATE DATABASE LINK –建立数据库链接
    CREATE SEQUENCE –建立序列
    CREATE SESSION –建立会话
    CREATE SYNONYM –建立同义词
    CREATE VIEW –建立视图
  1. RESOURCE角色: –是授予开发人员的
    CREATE CLUSTER –建立聚簇
    CREATE PROCEDURE –建立过程
    CREATE SEQUENCE –建立序列
    CREATE TABLE –建表
    CREATE TRIGGER –建立触发器
    CREATE TYPE –建立类型

参考:

    原文作者:else05
    原文地址: https://www.jianshu.com/p/3b8489f43006
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞