使用OracleLogminer同步Demo1Demo介绍-博客园
使用Oracle Logminer 同步Demo
1 Demo 介绍
1.1 Demo 设想
前面介绍了Oracle LogMiner 配置使用以及使用LogMiner 进行解析日志文件性能,在这
篇文章中将利用 LogMiner 进行数据同步,实现从源目标数据库到目标数据库之间的数据同步。
由于LogMiner 支持的版本是8.1 及以上,所以进行数据同步的Oracle 数据库版本也必须是8.1
及以上。
当然在本文中介绍的是LogMiner进行数据同步例子,也可以利用LogMiner进行数据审计、
数据操作追踪等功能,由于这些从操作原理来说是一致,在本文不做讨论。
1.2 框架图
第 1 页 共 9 页 出自石山园主,博客地址:/shishanyuan
1.3 流程图
配置阶段
1、控制端:指定源端、目标端数据库信息、LOGMINER 同步时间等配置信息;
获取源端同步数据
2、控制台:通过定时轮询的方式检测是否到达数据同步时间,如果是则进行数据同步,否
则继续进行轮询;
3、源数据库 :定时加载数据库归档日志文件到动态表v$logmnr_contents 中;
4、源数据库:根据条件读取指定sql 语句;
目标端数据入库
5、源数据库:执行sql 语句。
2 代码分析
2.1 目录及环境配置
在该 Demo 项目中需要引入Oracle JDBC 驱动包,具体项目分为四个类 :
第 2 页 共 9 页 出自石山园主,博客地址:/shishanyuan
1. Start.java :程序入口方法;
2. SyncTask.java :数据同步Demo 核心,生成字典文件和读取日志文件、目标数据库执
行SQL 语句等;
3. DataBase.java :数据库操作基础类;
4. Constants.java :源数据库、目标数据库配置、字典文件和归档文件路径。
2.2 代码分析
2.2.1 Constants.java
在该类中设置了数据同步开始SCN 号、源数据库配置、目标数据库配置以及字典文件/ 日志
文件路径。需要注意的是在源数据库配置中有两个用户:一个是调用 LogMiner 用户,该用户
需要拥有dbms_logmnr、dbms_logmnr_d 两个过程权限,在该Demo 中该用为为sync ;另
外一个为 LogMiner 读取该用户操作SQL 语句,在该Demo 中该用为为LOGMINER。
package com.constants;
/**
* [Constants]|描述:Logminer配置参数
* @作者: ***
* @日期: 2013-1-15 下午01:53:57
* @修改历史:
*/
public class Constants {
/** 上次数据同步最后SCN号 */
public static String LAST_SCN = "0";
第 3 页 共 9 页 出自石山园主,博客地址:/shishanyuan
/** 源数据库配置 */
public static String DATABASE_DRIVER="oracle.jdbc.driver.OracleDriver";
public static String
SOURCE_DATABASE_URL="jdbc:oracle:thin:@:1521:practice";
public static String SOURCE_DATABASE_USERNAME="sync";
public static String SOURCE_DATABASE_PASSWORD="sync";
public static String SOURCE_CLIENT_USERNAME = "LOGMINER";
/** 目标数据库配置 */
public static String SOURCE_TARGET_URL="jdbc:oracle:thin:@:1521:target";
public static String SOURCE_TARGET_USERNAME="target";
public