Oracle通过LogMiner实现数据同步迁移

写在前面

最近在研究如何实现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; 

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通过LogMiner实现数据同步迁移的详细内容,更多关于Oracle数据同步迁移的资料请关注我们其它相关文章!

(0)

相关推荐

  • oracle 数据库数据迁移解决方案

    去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,有一些心得体会,与大家分享. 首先说说迁移流程,在迁移之前,写好方案,特别是实施的方案步骤一定要写清楚,然后进行完整的测试.我们在迁移时,有的系统测试了四五次,通过测试来完善方案和流程. 针对物理迁移,也即通过RMAN备份来进行还原并应用归档的方式(这里不讨论通过dd方式进行的冷迁移),虽然注意的是要将数据库设为force logging的方式,在用RMAN做全备之前,一定要执行: 否则可能会产

  • Oracle 日志挖掘(LogMiner)使用详解

    Logminer依赖于2个包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g默认已安装 Logminer 基本使用步骤 <1>. Specify a LogMiner dictionary.   指定Logminer字典 <2>. Specify a list of redo log files for analysis.   指定需要挖掘的redo或者archivelog日志文件 <3>. Start LogMiner.    开始日志挖掘

  • Oracle数据库升级或数据迁移方法研究

    一.数据库升级的必要性 数据库升级是数据库管理员经常要面对的问题,如果你的应用要使用新版本数据库的新特性:如果数据库运行负载过重,而通过软硬件调整又不能有根本性的改善:如果要更换操作系统平台:如果要增强数据库的安全性:还有一个原因是随着新版本数据库的出现与成熟,oracle停止了对旧版本数据库的技术支持,升级到高版本,可以继续获得oracle的支持,还可以利用新版本数据库的新特新,可以改善系统的性能,健壮性,可扩张性和可用性,等等,面对这些问题,需要通过数据库升级才得以解决.不过,如果你的系统运

  • oracle数据迁移到db2数据库的实现方法(分享)

    1.表结构迁移 在plsql中选择表----->dbmsMetadata----->ddl 注意:这时表的创建.约束等信息将会显示在窗口中.可以将创建表的语句直接拷贝值sqldbx(连接db2数据库的工具)中修改字段的类型,如varchar2转化为varchar,number转化为integer.还有primary key.unique的变化. 2.表数据迁移 在Plsql中选择表------>右键------>qurey data(显示出所有数据)---->选择需要迁移的数

  • Oracle LogMiner的使用实例代码

    LogMiner介绍 LogMiner是用于Oracle日志挖掘的利器. 百科解释: LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重做日志文件(归档日志文件)中的具体内容,LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图组成,它作为Oracle数据库的一部分来发布,是oracle公司提供的一个完全免费的工具. 本文主要演示LogMiner的使用,直观展示LogMiner的作用. 环境:Oracle 11

  • 理解和使用Oracle 8i分析工具LogMiner

    正在看的ORACLE教程是:理解和使用Oracle 8i分析工具LogMiner.Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重作日志文件(归档日志文件)中的具体内容,特别是,该工具可以分析出所有对于数据库操作的DML(insert.update.delete等)语句,另外还可分析得到一些必要的回滚SQL语句.该工具特别适用于调试.审计或者回退某个特定的事务. LogMiner分析工具实际上是由一组PL/S

  • 直接拷贝数据文件实现Oracle数据迁移

    背景介绍 由于机房服务器变更,需要将 Oracle 迁移到一台新服务器上去. 以下是环境说明: 原服务器地址: 192.168.1.15 新服务器地址: 192.168.1.18 操作系统:都是 CentOS 6.5 数据库版本: 都是 11.2.0.1 新服务器上安装和配置 Oracle 192.168.1.18 在新服务器(192.168.1.18)上安装了Oracle,为了保险,主机名.数据库实例名.安装目录都和原数据库保持一致.具体安装方法可参考:centos 6.5下安装oracle

  • mysql数据迁移到Oracle的正确方法

    在mysql数据库里有一个表student,它的结构如下: 在Oracle数据库里有一个表from_mysql,它的结构如下: 现在要把数据从mysql的student转移到Oracle的from_mysql中去,这里笔者借助kettle的spoon工具,可以快速的实现这个功能. 首先,打开spoon,新建一个转换,命名为表输入到表输出.然后在核心对象中的输入那里找到表输入,拖到编辑界面中,再从输出那里找到输出拖到编辑界面中,连接表输入和表输出,如图所示: 右击表输入,选择编辑步骤,弹出如下窗口

  • Oracle通过LogMiner实现数据同步迁移

    写在前面 最近在研究如何实现Oracle数据库之间的数据同步,网上的资料确实比较少.最好用的Oracle数据库同步工具是:GoldenGate ,而GoldenGate是要收费的.那么还有什么好的办法来同步Oracle的数据吗?没错,就是使用LogMiner来实现Oracle数据同步迁移. 实现过程 1.创建目录 在服务器上创建/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR目录来存储数据库的字典信息,如下所示. mkdir -p /home/or

  • 通过LogMiner实现Oracle数据库同步迁移

    目录 通过LogMiner实现Oracle数据同步迁移 一.实现过程 1.创建目录 2.配置LogMiner 3.开启日志追加模式 4.重启数据库 5.创建数据同步用户 6.创建数据字典 7.加入需要分析的日志文件 8.查看正在使用的日志文件 9.使用Lominer分析日志 10.查看分析结果 11.常见问题 通过LogMiner实现Oracle数据同步迁移 为了实现Oracle数据库之间的数据同步,网上的资料比较少的时候.最好用的Oracle数据库同步工具是:GoldenGate ,而Gold

  • 如何将Oracle的一个大数据表快速迁移到 Sqlserver2008数据库(图文教程)

    oracle 服务器  版本  11.2.0.1.0 Sqlserver2008  R2 前提条件是 SQLSERVER服务器上安装了Oracle客户端并且进行了配置 不会配置的请参照 这个链接 1  登录MSSM 工具 2 选中其中一个数据库  右键⇒任务⇒导入数据 3   打开窗口 Sqlserver导入和导出向导   点击下一步 4 进入选择数据源画面 a: 数据源 选择  Microsoft OLE DB Provider for Oracle  然后 点击 右侧的 属性 按钮 5  数

  • Oracle 10g DG 数据文件迁移的实现

    背景:某客户Oracle 10g 的DG由于空间不足,之前将部分数据文件迁移到其他目录,如今原目录扩容成功,要将之前迁移的数据文件再次迁移回来. 环境:Oracle 10.2.0.5 DG 单机 首先想到的是10gDG是在mount模式下应用的,在测试环境可以很容易的模拟下这个需求实现的过程: 1.查询当前DG的状态 2.停止DG应用 3.备份copy副本到新目录并切换 4.删除之前的目录并开启应用 1.查询当前DG的状态 查询当前DG的状态: Connected to: Oracle Data

  • MySQL 到Oracle 实时数据同步

    目录 第一步:配置MySQL 连接 第二步:配置 Oracle连接 第四步:进行数据校验 其他数据库的同步操作 摘要:很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.本文亲测了一种方式,可以非常方便地完成 MySQL 数据实时同步到Oracle,跟大家分享一下,希望对你有帮助. 本次 MySQL 数据实时同步到 Oracle大概只花了几分钟就完成.使用的工具是Tapdata Cloud ,这个工具是永久免费

  • MySQL 到Oracle 实时数据同步

    目录 第一步:配置MySQL 连接 第二步:配置 Oracle连接 第四步:进行数据校验 其他数据库的同步操作 摘要:很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.本文亲测了一种方式,可以非常方便地完成 MySQL 数据实时同步到Oracle,跟大家分享一下,希望对你有帮助. 本次 MySQL 数据实时同步到 Oracle大概只花了几分钟就完成.使用的工具是Tapdata Cloud ,这个工具是永久免费

  • 基于C# 写一个 Redis 数据同步小工具

    概念 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文

  • MySQL 到 ClickHouse 实时数据同步实操

    摘要: 很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.我自己亲测了一种方式,可以非常方便地完成 MySQL 数据实时同步到ClickHouse,跟大家分享一下,希望对你有帮助. MySQL 到 ClickHouse 实时数据同步实操分享 本次 MySQL 数据实时同步到ClickHouse大概只花了几分钟就完成.使用的工具是Tapdata Cloud ,这个工具是永久免费的. @[TOC](MySQL 到

  • 高效的数据同步工具DataX的使用及实现示例

    目录 前言 一.DataX 简介 1.DataX3.0 框架设计 2.DataX3.0 核心架构 二.使用 DataX 实现数据同步 1.Linux 上安装 DataX 软件 2.DataX 基本使用 3.安装 MySQL 数据库 4.通过 DataX 实 MySQL 数据同步 5.使用 DataX 进行增量同步 前言 我们公司有个项目的数据量高达五千万,但是因为报表那块数据不太准确,业务库和报表库又是跨库操作,所以并不能使用 SQL 来进行同步.当时的打算是通过 mysqldump 或者存储的

  • 如何把Oracle 数据库从 RAC 集群迁移到单机环境

    目录 一.系统环境 二.源数据库的操作 三.目标数据库的操作 四.开始恢复数据库 五.启动数据库 把 Oracle 数据库从 RAC 集群迁移到单机环境 一.系统环境 1.源数据库 db_name:hisdb SID:hisdb1.hisdb2 IP: 192.168.1.101.192.168.1.102 os:CentOS Linux release 7.3.1611 (Core) 2.目标数据库 IP: 192.168.1.15 os:CentOS Linux release 7.3.16

随机推荐