• 技术文章 >数据库 >Oracle

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

    长期闲置长期闲置2022-03-30 11:16:55转载308
    本篇文章给大家带来了关于Oracle的相关知识,其中主要介绍了关于通过LogMiner实现Oracle数据同步迁移的相关问题,下面就来介绍一下怎么实现oracle的数据同步,希望对大家有帮助。

    推荐教程:《Oracle教程

    写在前面

    最近在研究如何实现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)此时在查询语句中需要为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数据同步迁移的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:Oracle
    上一篇:oracle怎么将时间日期转换成时间戳 下一篇:oracle11g忘记用户名怎么办
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 怎么判断oracle安装是否成功• oracle怎么查询表的外键• oracle列转行的SQL语句是什么• oracle去除空格的函数有哪些• oracle怎么查询角色
    1/1

    PHP中文网