oracle数据库dmp转mysql格式

1,背景

第一个项目的客户是oracle数据库,需要将一个表数据导入到自研系统的mysql数据库中。甲方给出了oracle格式的dmp文件!

治疗思路:

1 .安装 Oracle 数据库。

2 将甲方提供的Oracle格式的dmp文件导入到我们自建的oracle中。

3 安装 MySQL 数据库或使用现有的 MySQL 数据库。

4 使用 Navicat 工具和工具数据传输功能,将 Oracle 数据传输到 mysql!

2、安装Oracle数据库。

忽略这一步,通过一堆安装教程。

大致使用Centos7桌面服务器安装。

参考连接:https://www.cnblogs.com/nmlwh/p/11923553.html#top

3、从Oracle数据库导入dmp备份文件。

备份恢复参考:https://www.cnblogs.com/xiaohuizhenyoucai/p/11100750.html

1 使用 imp 命令导入

[oracle@localhost mnt]$ imp system/*******@abc 文件u003d/mnt/sxgddzhdaochu20220302.dmp 忽略u003dy 满u003dy

系统:oracle用户

*****:代表密码

@abc: 将数据导入 abc 数据库

文件:导入文件的绝对路径。

报告错误:

[oracle@localhost mnt]$ imp 系统/aaaAAA3451@abc 文件u003d/mnt/sxgddzhdaochu20220302.dmp 忽略u003dy 完整u003dy

导入:版本 12.1.0.2.0 - 2022 年 3 月 8 日星期二 21:14:59 生产

版权所有 (c) 1982, 2014,Oracle 和/或其附属公司。版权所有。

连接到:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

使用分区、OLAP、高级分析和真实应用程序测试选项

EXPORT:V11.02.00 通过常规路径创建的导出文件

警告:对象是由 SXGDDZH 导出的,而不是您导出的

以 US7ASCII 字符集和 AL16UTF16 NCHAR 字符集完成导入

导入服务器使用 AL32UTF8 字符集(可能的字符集转换)

导出客户端使用 ZHS16GBK 字符集(可能的字符集转换)

。将 SXGDDZH 的对象导入 SYSTEM

。将 SXGDDZH 的对象导入 SYSTEM

。 .导入表“TO\ORDER”

IMP-00019:行因 ORACLE 错误 12899 而被拒绝

IMP-00003:遇到 ORACLE 错误 12899

ORA-12899: 列 "SYSTEM"."WO_ORDER"."CALLIN_CODE" 的值太大(实际值:33,最大值:30)

原因分析:

大致是dmp文件的字符集和建好的abc数据库的字符集不匹配,所以报错!

和解条款:

SQL>连接用户名/密码为 SYSDBA;

SQL>立即关闭;

SQL>启动挂载;

SQL>ALTER SYSTEM 启用受限会话;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSESu003d0;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSESu003d0;

SQL>更改数据库打开;

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK ;

更改数据库字符集 ZHS16GBK;

*ERROR 在第 1 行:

ORA-12712: 新字符集必须是旧字符集的超集

如果此时报告错误,请不要惊慌。提示新的字符集必须是超集。此时 INTRENAL_USE 指令不检查字符集超集。输入以下命令:

SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;

SQL>立即关闭;

SQL>启动;

修改后再次导入:

[oracle@localhost mnt]$ imp 系统/aaaAAA3451@abc 文件u003d/mnt/sxgddzhdaochu20220302.dmp 忽略u003dy 完整u003dy

导入:版本 12.1.0.2.0 - 2022 年 3 月 8 日星期二 21:45:49 生产

版权所有 (c) 1982, 2014,Oracle 和/或其附属公司。版权所有。

连接到:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

使用分区、OLAP、高级分析和真实应用程序测试选项

EXPORT:V11.02.00 通过常规路径创建的导出文件

警告:对象是由 SXGDDZH 导出的,而不是您导出的

以 US7ASCII 字符集和 AL16UTF16 NCHAR 字符集完成导入

导入服务器使用 ZHS16GBK 字符集(可能的字符集转换)

导出客户端使用 ZHS16GBK 字符集(可能的字符集转换)

。将 SXGDDZH 的对象导入 SYSTEM

。将 SXGDDZH 的对象导入 SYSTEM

。 .导入表“TO\ORDER”1540160行导入

导入成功终止,没有警告。

通过 Navicat 管理工具查看已经有 ON\ORDER 表!

3、通过Docker搭建Mysql数据库。

1 .拉取mysql镜像

[oracle@localhost mnt]$ docker pull mysql:5.7.20

2、运行mysql容器

[root@localhost ~]# docker run -d -p 3306:3306 --name mysql -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/logs:/var/日志/mysql -v /opt/mysql/conf:/etc/mysql/mysql.conf.d -e MYSQL_ROOT_PASSWORDu003d123456 mysql:5.7.20

注意:记得关闭selinux,否则可能会报错。

3。进入mysql容器并授权mysql root用户远程连接

[root@localhost ~]# docker exec -it mysql sh

mysql -uroot -p

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED by '123456' WITH GRANT OPTION;

查询正常,0 行受影响,1 个警告(0.00 秒)

mysql> 刷新权限;

查询正常,0 行受影响(0.00 秒)

至此,使用Navicat工具连接mysql成功。

4、使用Navicat工具的数据传输功能,将Oracle数据库中的指定表传输到mysql数据库。

两个数据库的语法不同,表字段类型也不同。如果Principality Navicat工具导出和导入,会有很多错误!

1 .数据传输

选择传输的来源和目的地

选择要同步的表

开始

报告错误:

[ERR] 1> 1170 - BLOB/TEXT 列“BLANK3”在没有密钥长度的密钥规范中使用

报错原因可以参考:https://blog.csdn.net/helloxiaozhe/article/details/83018347

基本上,建立索引和约束都有问题!

和解条款:

取消索引和外键约束!

取消约束后,数据将从Oracle传输到MySQL!好了,文章到此结束!

剩下的就是mysql导出表数据到项目mysql的同步了!

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐