Oracle数据库导入mysql、oracle导入导出数据库
本文目录:
- 1、Oracle导入数据到mysql(脚本方式)
- 2、如何将Oracle数据导入MySQL?
- 3、如何将oracle表中的数据导入到mysql中
- 4、如何将Oracle数据导入MySQL
oracle导入数据到mysql(脚本方法)
spool /home/oracle/XXX.sql,后跟导出路径和所需的导出文件名。最好以txt结尾。否则,您需要在导入完成后更改名称。
后面跟着一个 select 语句。列名和表名根据实际情况更改,日期要使用to_char转换。
/data01/zhu/XXX.txt 是您的 oracle 导出文件的位置。仅支持 txt 文件。以“,”结尾的列表示各列之间的分隔符。一般来说,如果没有中国人,就使用utf8字符集,如果有中国人,就使用gb2312字符集,如果有错误。
PS:导入180万条数据,耗时约2分钟。然而700万条数据已经四个多小时没有导入了。建议拆分以提高效率。
如何将Oracle数据导入MySQL?
OGG,全称Oracle GoldenGate,是Oracle官方提供的一款商业工具,用于处理异构数据环境下的数据复制。相比其他迁移工具,OGG的优势在于它可以直接解析Oracle源的重做日志,这样就可以完成额外部分数据的迁移,而不需要对原有的Table结构做太多的调整。本文将重点介绍如何使用OGG实现Oracle到MySQL数据的平滑迁移,以及个人在迁移过程中遇到的问题的解决方案。
(一)OGG逻辑架构
见上图简单介绍一下OGG逻辑架构,方便大家了解OGG数据同步流程。后续章节将详细演示如何配置合适的进程,并在 OGG 中使用。 进程主要包括以下进程和文件:
进程管理器:源端和目标端必须一起运行。 。其主要功能是监控和管理其他进程、报告错误、分配和清理数据存储空间、发布阈值报告等。
Extract进程:运行在数据库源上,主要用于捕获数据变化,负责提取完整的附加数据
文件踪迹:数据文件临时存储在磁盘上
Data Pump进程:运行在数据库源上最后,这是Extract过程的一个附加过程。如果没有配置Data Pump,Extract进程会将提取的数据直接发送到最终目标的Trail文件中。如果配置了Data Pump,Extract进程会将数据提取到本地Trail文件,然后通过Data Pump Process将数据发送到目标。 Data Pump 进程配置的主要好处是,即使从源到目标的网络中断,Extract 进程也不会停止
Collector 进程:接收从源发送的数据更改并将其写入
本地Trail文件中的Replica流程:读取Trail文件中记录的数据变化,创建对应的DML语句并在目标后面重放
2.迁移计划
(1)环境信息
OGG Version OGG 12.2.0.2.2 对于 Oracle OGG 12.2.0.2.2 对于 MySQL
Oracle 数据库版本 11.2.0.4 MySQL 5.7.21
OGG_HOME /home/oracle/ogg/ogg ) 表结构迁移
表结构迁移是一个简单的步骤,但相对有趣。在迁移表结构时,我们使用一个名为 sqlines 的开源工具。对于MySQL端创建失败、不符合预期表结构的sqllines工具,我们进行了特殊处理,以提高表结构的转换效率。
注意:OGG在MySQL迁移Oracle场景下不支持DDL语句的同步,所以表结构迁移完成后数据库开启前尽量不要修改表结构。
(3)数据迁移
所有数据同步操作均通过OGG工具进行。考虑到全量数据和附加数据之间的联系,OGG必须启动第一次增量同步提取过程,从数据库中检索重做日志。全量提取完成后,开始增量数据回放,应用全量和增量期间产生的日志数据。 OGG可以根据参数配置进行重复的数据处理,因此在使用OGG时,优先配置并启用附加数据。另外,为了避免本章太长,OGG 参数将不再解释。有需要的朋友可以查看官方Reference文档询问未知参数。
1。源OGG配置
(1)Oracle数据库配置
对于Oracle数据库,OGG要求数据库开启归档模式,并添加额外的附加日志、强制记录日志等,以保证OGG能够检索到完整的日志信息
确保目前的环境符合要求。输出结果如下图所示:
(2)Oracle数据库OGG创建用户
OGG需要有操作数据库中相关对象的权限的用户。以下是参与许可。本示例将创建用户名和密码 来自 ogg 的所有 Oracle 数据库用户,并赋予以下权限
(3)源端 OGG 管理进程(MGR)的配置
(4)源端 OGG 表-配置日志完成level (trandata)
表级别的补充 Full log 仅在最小附加日志开启时才起作用。以前,最小附加日志记录仅在数据库级别启用(更改数据库会添加附加日志数据;)。 redolog记录的信息不够完整,所以要重新使用添加tradata。启用表级完成日志记录以捕获所需的信息。
(5)源端OGG提取进程(extract)配置
Extract进程运行在数据库源端,负责从源数据表或日志中检索数据。 Extract进程使用现有的检查点机制来检查并记录读写的位置,通常写入本地trail文件。这个机制是为了保证如果Extract进程结束或者操作系统崩溃,我们重新启动Extract进程后,GoldenGate可以回到之前的状态,从之前的断点处继续运行,而不会丢失数据。
(6)源端OGG传输进程(pump)的配置
pump进程运行在数据库源端,功能非常简单。如果源端的Extract提取进程使用本地trail文件,则pump进程会将trail文件通过TCP/IP协议以数据块的形式发送到目标。泵过程本质上是提取过程的一种特殊形式。如果不使用跟踪文件,Extract 进程会在提取数据后立即将数据发送到目标。
补充:pump进程启动时,必须连接目标端的mgr进程,所以必须先配置目标端的mgr进程,否则会报错,连接被拒绝,并且提取的日志文件无法传输到目标端对应目录
(7)源端OGG异构映射文件(defgen)生成
该文件列出了源库要复制的表的表结构定义信息。源库生成文件后,必须将其复制到目标库的dirdef目录中。当目标库副本进程应用传输到目标库的数据时应该读取它。写这个文件。对于同构数据库不需要此操作。
2。目标端 OGG 配置
(1)目标端 MySQL 数据库配置
确认 MySQL 端表结构已存在
MySQL OGG 数据库创建用户
mysql 创建用户 'ogg'@'% ' identified by 'ogg';
mysql将*.*中的所有内容赋予'ogg'@'%';
####提前创建ogg存储检查点表的数据库
mysql创建ogg数据库;
(2)目标端OGG管理进程配置(MGR)
目标端MGR进程与源端配置相同。您可以立即在目标端重复源端配置方法。本节不再赘述,binlog的GTID或者点位置也一样。
#### 切换到ogg软件目录,运行ggsci进入命令行终端
cd shell $OGG_HOME
shell ggsci
ggsci edit param ./GLOBALScheckpoint ogg.
ggsci dblogin sourcedb ogg@17X.1X.84.121:3306 userid ogg
ggsci add checkpointtable ogg.ggs_checkpoint
(4) 目标端 OGG 播放线程(副本)配置目标运行 副本端和 Station 数据交付端负责读取目标Trail文件中的内容,解析为DML语句,然后应用到目标数据库。
#### 切换到ogg软件目录,运行ggsci进入命令行终端
cd shell $OGG_HOME
shell ggsci
#### 添加播放线程,并与源pump进程传输过来的Trail文件关联起来,并利用检查点表保证数据不丢失
ggsci addreplica r_cms, exttrail /opt/ogg/dirdat /ms,检查点表 ogg。 ggs_checkpoint
#### 添加/修改播放进程配置文件
ggsci edit params r_cms
replica r_cms
targetdb cms@17X.1X.84.121:3306,def source ogg6。 /opt/ogg/dirdef/cms.def
discardfile /opt/ogg/dirrpt/r_cms.dsc,add,megabyte 1024
HANDLECOLLISIONS
MAP cms.*, target cms;:副本进程应该只需配置即可,无需初始化。它将在完全提取完成后开始。
现已完成源环境的配置
完整的数据提取完成后,启动目标端的播放流程,完成准真实的数据同步。
3。完整的同步配置
完整的数据同步是一次性操作。当 OGG 软件部署完成并且配置并启动其他提取进程时,可以配置自定义提取进程以从表中提取数据。数据存储在目标端生成文件,目标端也启动一次复制回放流程,将数据解析回放到目标数据库。
(1)配置完整的提取流程(提取)源端OGG
#### 切换到ogg软件目录,运行ggsci进入命令行终端
cd Shell $OGG_HOME
shell ggsci
####添加/编辑完整的提取过程配置文件
####将RMTFILE指定的提取数据直接传输到对应的远程目录
####注:该文件通过参数指定 RMTFILE 只支持2个字符,超过copy就无法识别
ggsci编辑params ei_cms
SOURCEISTABLE
SETENV (NLS_LANG = "AMERICAN_AMERICA.AL328")SETENV (ORACLE_SID=cms)
SETENV (ORACLE_HOME=/data/oracle/11.2/db_1)
用户 ID ogg@appdb,密码 ogg
RMTHOST 17MGR.12X,84MGR.12X。 TFI LE / opt /ogg/dirdat/ms,maxfiles 100,megabyte 1024,purge
TABLE cms.*;
####启动并检查提取过程是否正常
shell nohup ./extract参数文件 ./dirprm/ei_cms. prm reportfile ./dirrpt/ei_cms.rpt
## 确保日志正常,进行全量提取
shell tail -f ./dirrpt/ei_cms.rpt
(2) OGG 全量播放的结束目标进程(副本)配置
#### 切换到ogg软件目录,运行ggsci进入命令行终端
cd Shell $OGG_HOME
shell ggsci
ggsci edit params ri_cmsSPECIAL
结束执行时间
TARGETDB cms@17X.1X.84.121:3306,用户ID ogg,密码ogg
EXTFILE /opt/ogg/dirdat/ms
/cmrptFILE/DISCARD。 MAP cms.*, TARGET cms.*;
####启动并检查播放进程是否正常
shell nohup ./replicat paramfile ./dirprm/ri_cms.prm reportfile ./dirrpt/ri_cms. rpt
#### 查看日志是否正常播放
shell tail -f ./dirrpt/ri_cms.rpt
3.数据验证
数据验证是数据迁移过程中的重要组成部分。本章提出了一些具有不同参数的数据验证的想法。验证方法可以从以下角度实现:
1、通过OGG日志查看整个过程中记录是否丢0,并判断数据是否丢失;
2。通过对源表和目标表进行计数来判断数据量是否一致;
3。编写一个类似于pt-table-checksum验证原理的程序,实现行级一致性验证。这种方法的优点和缺点都特别明显。优点是可以完整、准确地验证数据内容。缺点是必须遍历每一行数据进行验证。验证成本较高;
4。一种比较折衷的数据验证方法是,从业务角度写几十条前面快速出结果的SQL,从业务角度进行抽样验证。
4。处理迁移问题
本章将解释迁移过程中遇到的一些问题及其相应的解决方案。 ? (4000)数据类型,导致迁移到MySQL后超出行数限制,无法创建表结构。由于MySQL自身数据结构的限制,一个16K的数据页必须至少存储两行数据,因此一行数据不能超过65535字节。因此,针对这种情况有两种解决方案:
根据存储数据的实际长度,尽量减少varchar列过长;
对于无法进行哈希处理的字段,将数据类型转换为文本,但这在使用时可能会带来一些性能问题;
2。与第一点类似,在Innodb存储引擎中,索引前缀长度限制为767字节。如果使用DYNAMIC和COMPRESSED行格式并且打开innodblargeprefix,则限制为3072字节。即使使用utf8mb4字符集,最多也只能在varchar(768)列上创建索引;
3。使用ogg进行完全初始化同步时,如果存在外键问题,且批量导入时各表的插入顺序不唯一,则数据可以插入到第一个子表中,但不能插入到主表中,从而导致错误。依赖子表的记录不存在,因此建议在数据迁移阶段关闭主约束和外约束,迁移完成后再打开。
mysqlset globalforeign_key_checks=off;
(2)全连接和附加连接
HANDLECOLLISIONS参数是实现OGG全量数据和附加数据连接的关键。实现原理是在全量提取之前启动增量提取过程,取出全量应用过程中产生的重放日志,在全量应用完成后启动增量回放。使用整个期间的附加数据进行处理。使用该参数后重放DML语句时的主要场景和处理逻辑如下:
目标端没有删除语句的记录。这个问题被忽略,不会记录在discardfile中
目标端丢失更新记录
-更新的是主键值,更新转为插入
-更新的键值是非主键。忽略这个问题,不要记录在discardfile中
目标重复插入现有主键值,该值将被复制过程修改用现有主键值UPDATE行
(3)OGG版本选项
在OGG版本选择上,我们也根据用户场景多次更改OGG版本。首先,客户的Oracle数据库版本是11.2.0.4,所以我们在选择OGG版本时优先考虑版本11。但在使用时,我们发现每次数据提取创建的trace文件达到2G时,OGG就会报错,连接中断。查看RMTFILE参数的详细描述,了解trail文件的默认限制。是2G的。后来我们将OGG版本改为12.3,并使用MAXFILES参数来控制生成指定大小的trail文件。在播放过程中,Replika进程还可以自动轮流读取trace文件,最终解决了问题。但如果不幸的是Oracle环境使用Linux版本5,那么你的OGG必须降级到较小的版本,最高版本只能是OGG 12.2。
(四)无主键表的处理
迁移过程中遇到的另一个难题是,目前Oracle端有很多无主键的表。 MySQL 中的表没有主键,这几乎是不允许的,因为它会导致性能问题和主从延迟。同时,在OGG迁移过程中,没有主键的表也会造成一些隐患。例如,对于没有主键的表,OGG默认将数据行中的所有列连接为唯一键。但仍然存在重复数据,导致数据同步异常。 ,Oracle官方也为此提供了解决方案,通过在没有主键的表中添加GUID列作为行的唯一标识符。具体操作方法可以搜索文档ID MOS 1271578.1查看。
(5) OGG 安全规则
错误消息
2019-03-08 06:15:22 ERROR OGG-01201 Error reporting by MGR: Access Denied.
该错误消息意味着源报告的错误表明提取进程应与目标 mgr 进程通信,但它被否决。特殊操作问题是:源端的提取进程需要与目标mgr通信,远程启动目标副本,但由于安全问题连接被拒绝。
错误原因
Oracle OGG版本11之后,增加了新的功能安全要求。如果需要在目标端远程启动replica进程,需要在mgr节点添加访问控制参数以允许远程调用
解决方案
在源和目标mgr节点上添加访问控制规则并重启
# #表示mgr节点允许(ALLOW)10.186(IPADDR)网段内所有类型的程序(PROG*)连接访问ACCESSRULE、PROG*、IPADDR 10.186.*.*、Allow
(6)数据提取方法
错误消息
2019-03-15 14:49:04 ERROR OGG-01192 尝试在可写入为 LOB 块的数据类型上使用 RMTTASK(表: 'UNIONPAYCMS.CMS_RTF_CON' ) .
报错原因
根据官方文档,目前通过Oracle数据库直接提取数据写入MySQL的初始加载方式不支持LOBs数据类型。 ,并且UNIONPAYCMS.CMSOTCONTENT_RTF表包含CLOB列,无法传输,且该方法不支持超过4k的字段数据类型
解决方案
将提取过程中的RMTTASK更改为RMTFILE参数。官方建议是先将数据提取到文件,然后根据文件数据分析开始导入

如何将oracle表中的数据导入到mysql
1。运行MySQL Migration Toolkit,“下一步”一直到“源数据库”,在数据库系统中选择Oracle数据库服务器。如果第一次使用,会提示加载ojdbc14.jar驱动。
加载驱动程序后,界面将变为如下形式。填写Oracle数据库连接信息,然后按“下一步”继续。
2。在目标数据库中,默认的数据库系统是MySQL Server。在连接参数中填写适当的MySQL数据库连接信息,然后按“下一步”继续。
3。执行数据库连接测试。通过测试后,按“下一步”进入源架构选项。选择要移动的方案,然后按“下一步”继续。
4。在“对象类型选择”中,点击“详细选择”按钮,在下方左侧列表中选择不会移动的表,将其放入右侧列表中,即左侧列表中剩余的表将进行数据迁移。选择后,按“下一步”继续。
5。在迁移对象映射类型的Oracle架构中,如果需要设置参数,请单击“设置参数”按钮。如果默认数据库表是UTF8,选择多语言;如果标准数据库表是GBK,则必须选择User Defined,并在下面填写charset=gbk、collation=gbk_general_ci。要设置“Oracle 表迁移”类型中的参数,请单击“设置参数”按钮。如果默认数据库表是UTF8,选择数据一致性/多语言;如果标准数据库表是GBK,则必须选择User Defined,并在下面填写addAutoincrement = yes,charset = gbk,collation = gbk_general_ci,engine = INNODB。选择后,按“下一步”继续。
6. 进入手动编辑,您可以在其中编辑建表脚本。由于Oracle和MySQL的语法规则不同,通常需要设置脚本的数据类型和默认值。例如,Oracle通常为Timestamp类型的数据设置默认值sysdate,但MySQL不识别这一点。选择“在过滤器中显示所有对象”,然后在“迁移的对象”中选择要编辑脚本的表,然后单击左下角的“高级”以编辑脚本。修改完成后,点击右侧的Apply Changes按钮保存,然后按“Next”继续。
7。然后一路点击“下一步”。如果没有错误,就可以将表中的数据导入到MySQL中。如果出现错误消息,您应该返回手动编辑并再次编辑脚本。
需要补充的是,在导入大容量数据,尤其是CLOB数据时,可能会出现异常:“Packets Larger than max_allowed_packet are not allowed”。这是因为MySQL数据库有一个max_allowed_packet系统参数,其默认值为1048576(1M)。可以通过以下语句查询数据库中的值:
show VARIABLES like '%max_allowed_packet%';
修改这个参数如何找到mysql文件夹中的my.ini文件,并在my中添加一行.ini文件[mysqld]:
max_allowed_packet=16777216
重启MySQL,这样就不能导入超过16M的数据。当然,如果需要的话,这个值是可以调整的。
如何将Oracle数据导入MySQL
如何将Oracle数据导入MySQL:
先将oracle表中的数据保存在excel表中,然后将excel表中的数据导入到mysql中。
这里我们需要将Oracle中的eventlogs表的数据导入到mysql中。
步骤如下:
1.在PL/SQL中使用select *搜索eventlogs表中的所有数据,然后右键“复制到Excel”;就像下图:
2。将数据保存为同名Excel表格;如下:
3、打开mysql可视化工具,这里是Navicat,选择表,点击导入向导;就像下图:
4。上图中“导入类型”选择“execel文件”,然后点击“下一步”;如下图所示:
5。接下来,会要求你选择一个文件,选择保存的excel文件,然后选择“SQL结果”,如下图:
6。然后继续点击下一步,最后一步点击开始。将出现“sql results”表,只需将其重命名为所需的表即可。如图:
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网