同步Oracle数据库数据到mysql数据库(如何同步Oracle数据库备份dmp到mysql)
oracle数据库dmp转mysql格式 1,背景 第一个项目的客户是oracle数据库,需要将一个表数据导入到自研系统的mysql数据库中。甲方给出了oracle格式的dmp文件! 治疗思路: 1 .安装 Oracle 数据库。 2 将甲方提供的Oracle格式的dmp文件导入到我们自建的oracle中。 3 安装 MySQL 数据库或使用现有的 MySQL 数据库。 4 使用 Navicat
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的同步了!
更多推荐
所有评论(0)