写在前面

最近在研究如何实现Oracle数据库之间的数据同步,网上的资料确实比较少。最好用的Oracle数据库同步工具是:GoldenGate ,而GoldenGate是要收费的。那么还有什么好的办法来同步Oracle的数据吗?没错,就是使用LogMiner来实现Oracle数据同步迁移。

实现过程

1.创建目录

在服务器上创建/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR目录来存储数据库的字典信息,如下所示。

mkdir -p /home/oracle/tools/oracle11g/oradata/orcl/LOGMNR

2.配置LogMiner

以oracle用户身份登录服务器,并以DBA身份登录Oracle数据库,如下所示。

sqlplus /nolog
conn / as sysdba

接下来,创建字典文件夹配置,如下所示。

CREATE DIRECTORY utlfile AS '/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR';
alter system set utl_file_dir='/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR' scope=spfile;

注意:由于utl_file_dir只存在于文件当中,所以scope是以文件方式"spfile"写入,而不是both。

3.开启日志追加模式

alter database add supplemental log data;

只有开启后才能看到DML操作记录,否则只能看见DML

4.重启数据库

SHUTDOWN IMMEDIATE;
STARTUP;

5.创建数据同步用户

创建数据同步用户,如果已经有可以跳过,直接赋予权限。

create user SYNC identified by SYNC;  #如果存在用户,则不需要再次创建,直接授权即可
GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;

6.创建数据字典

切换到要同步数据的用户,以DBA身份登录,创建数据字典文件,如下所示。

conn SYNC/SYNC@orcl as sysdba;
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');

创建数据字典的命令也可以通过Java代码来实现,如果使用Java代码实现的话,首先可以通过JDBC连接到Oracle数据库,然后执行如下命令。

BEGIN
dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');
END;

7.加入需要分析的日志文件

此步骤可以在Oracle命令行执行,也可以使用Java代码实现。

使用SQL语句实现如下所示。

EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO01.LOG',options=>dbms_logmnr.NEW);
EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO02.LOG',options=>dbms_logmnr.ADDFILE);
EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO03.LOG',options=>dbms_logmnr.ADDFILE);

使用Java代码分析时,使用的SQL语句如下所示。

BEGIN
dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO01.LOG',options=>dbms_logmnr.NEW);
dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO02.LOG',options=>dbms_logmnr.ADDFILE);
dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO03.LOG',options=>dbms_logmnr.ADDFILE);
END;

8.查看正在使用的日志文件

SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;

status为CURRENT的为当前正在使用的日志文件

9.使用Lominer分析日志

EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR/dictionary.ora');

使用Java代码分析时,使用的SQL语句如下所示。

BEGIN
dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR/dictionary.ora');
END;

10.查看分析结果

SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC';

注意:视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在,如果要查看新的日志,需要再重新加入分析日志文件、使用LogMiner分析。

11.常见问题

(1)如果出现“必须声明标识符 'SYS.DBMS_LOGMNR'”异常,则需要在创建用户后,为用户赋予EXECUTE_CATALOG_ROLE权限,如下所示。

GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;

(2)当在查询v$logmnr_logs时提示“表或视图不存在”,是因为没有查询v$logmnr_logs的权限。此时在查询语句中需要为seg_owner指定相应的用户,例如,我这里使用SYNC用户通过LogMiner进行分析,则需要将seg_owner指定为SYNC用户,如下所示。

SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC';

写在最后

如果觉得文章对你有点帮助,请扫描下方二维码或微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习互联网编程技术。公众号回复“oracle”关键字领取Oracle数据库安装包下载链接。

【Oracle】通过LogMiner实现Oracle数据同步迁移的更多相关文章

  1. ORACLE和SQL SERVER的数据同步常用方法

    ORACLE和SQL SERVER的数据同步常用方法 1. 自己编程,或者第三方工具2. 在sqlserver中,使用linkedserver,访问oracle,然后编写job进行数据同步3. 在or ...

  2. 基于TreeSoft实现mysql、oracle、sql server的数据同步

    一.为了解决数据同步汇聚,数据分发,数据转换,数据维护需求,TreeSoft推出了数据同步,数据处理等丰富功能 . TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之间架起沟通的桥 ...

  3. datax 数据同步迁移

    https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md https://github.com/aliba ...

  4. Oracle和Elasticsearch数据同步

    Python编写Oracle和Elasticsearch数据同步脚本 标签: elasticsearchoraclecx_Oraclepython数据同步    Python知识库 一.版本 Pyth ...

  5. SQLite与MySQL、SQLServer等异构数据库之间的数据同步

    SQLite DBSync是开源嵌入式数据库SQLite的数据同步引擎,实现了SQLite与SQLite数据库之间以及SQLite与异构数据库(Oracle.MySQL.SQLServer)之间的增量 ...

  6. 4、总结:基于Oracle Logminer数据同步

    最近开发Oracle数据同步功能,做了些调研和验证,这个工作过去有段时间,怕时间长了忘记,故用博客共享出来.在这系列中共写了三篇文章,第一篇是写LogMiner配置及使用,第二篇是测试了LogMine ...

  7. 总结:基于Oracle Logminer数据同步

    第 1 页 共 20 页 出自石山园主,博客地址:http://www.cnblogs.com/shishanyuan LogMiner 配置使用手册 1 Logminer 简介 1.1 LogMin ...

  8. Oracle数据逻辑迁移综合实战篇

    本文适合迁移大量表和数据的复杂需求. 如果你的需求只是简单的迁移少量表,可直接参考这两篇文章即可完成需求: Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(上) Oracle简 ...

  9. Oracle 数据同步系列--触发器

    现在随着项目集成的越来越深入,异构的数据多起来,数据同步的场景也用的多起来,我甚至在考虑是否忽悠用户上Oracle GoldenGate了,这样就可以不用考虑采用哪种同步方案了. 简单的介绍一下我们数 ...

  10. 将SQLServer2005中的数据同步到Oracle中

    有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据.不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现. ...

随机推荐

  1. NC23051 华华和月月种树

    题目链接 题目 题目描述 华华看书了解到,一起玩养成类的游戏有助于两人培养感情.所以他决定和月月一起种一棵树.因为华华现在也是信息学高手了,所以他们种的树是信息学意义下的. 华华和月月一起维护了一棵动 ...

  2. 二进制文件转Hex和Wav文件转Hex的Java代码

    二进制文件转Hex 对于需要将二进制数据写入固件的场景(例如mp3文件), 需要将二进制文件表示为byte数组 import java.io.File; import java.io.FileInpu ...

  3. 升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等

    烧录后 Reset And Run 重启失效 存在于 MDK ARM 5.28 之后包括 5.37 的版本. 这些版本即使勾选 Reset And Run, 在烧录后也不会自动重启执行 需要做以下设置 ...

  4. Swoole从入门到入土(28)——协程[核心API]

    本节专门介绍swoole提供的协程机制中核心的API 类方法: 1) set():协程设置,设置协程相关选项. Swoole\Coroutine::set(array $options); 2) ge ...

  5. 在SpringBoot中实践AOP编程

    具体实践 Spring AOP是Spring框架中一个支持实现面向切面编程的模块,由于Spring Boot已经把Spring框架组合得非常好用,所以在基于Spring Boot框架的项目中实现AOP ...

  6. React 组件之属性

    如果你想要实现自己的梦想,就必须先拥有勇气去追求它. 1. React Props 属性 props 主要解决两个问题:复用性问题以及可以让组件之间通信. 属性 props 正常是外部传入的,组件内部 ...

  7. 【LeetCode二叉树#02】二叉树层序遍历(广度优先搜索),十合一专题

    二叉树层序遍历(广度优先搜索) 102 二叉树的层序遍历 力扣题目链接(opens new window) 给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点). ...

  8. 【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App

    问题描述 如图上,是App Services在Windows环境中,系统自带了MySQL In App功能.而在,Linux环境中,没有发现Mysql in App功能,是不是无法在Linux中使用呢 ...

  9. Java 常用类 String的使用---测试

    1 package com.bytezero.stringclass; 2 3 import org.junit.Test; 4 5 /** 6 * 7 * 8 * 9 * @author Bytez ...

  10. offline RL | D4RL:最常用的 offline 数据集之一

    pdf:https://arxiv.org/pdf/2004.07219.pdf html:https://ar5iv.labs.arxiv.org/html/2004.07219 GitHub:ht ...