本篇文章给大家带来了关于Oracle的相关知识,其中主要介绍了关于通过LogMiner实现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/nologconn/assysdba
接下来,创建字典文件夹配置,如下所示。
CREATEDIRECTORYutlfileAS'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR';altersystemsetutl_file_dir='/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR'scope=spfile;
注意:由于utl_file_dir只存在于文件当中,所以scope是以文件方式"spfile"写入,而不是both。
3.开启日志追加模式
alterdatabaseaddsupplementallogdata;
只有开启后才能看到DML操作记录,否则只能看见DML
4.重启数据库
SHUTDOWNIMMEDIATE;STARTUP;
5.创建数据同步用户
创建数据同步用户,如果已经有可以跳过,直接赋予权限。
createuserSYNCidentifiedbySYNC;#如果存在用户,则不需要再次创建,直接授权即可GRANTCONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLETOSYNC;
6.创建数据字典
切换到要同步数据的用户,以DBA身份登录,创建数据字典文件,如下所示。
connSYNC/SYNC@orclassysdba;EXECUTEdbms_logmnr_d.build(dictionary_filename=>'dictionary.ora',dictionary_location=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');
创建数据字典的命令也可以通过Java代码来实现,如果使用Java代码实现的话,首先可以通过JDBC连接到Oracle数据库,然后执行如下命令。
BEGINdbms_logmnr_d.build(dictionary_filename=>'dictionary.ora',dictionary_location=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');END;
7.加入需要分析的日志文件
此步骤可以在Oracle命令行执行,也可以使用Java代码实现。
使用SQL语句实现如下所示。
EXECUTEdbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO01.LOG',options=>dbms_logmnr.NEW);EXECUTEdbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO02.LOG',options=>dbms_logmnr.ADDFILE);EXECUTEdbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO03.LOG',options=>dbms_logmnr.ADDFILE);
使用Java代码分析时,使用的SQL语句如下所示。
BEGINdbms_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.查看正在使用的日志文件
SELECTgroup#,sequence#,status,first_change#,first_timeFROMV$logORDERBYfirst_change#;
status为CURRENT的为当前正在使用的日志文件
9.使用Lominer分析日志
EXECUTEdbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR/dictionary.ora');
使用Java代码分析时,使用的SQL语句如下所示。
BEGINdbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR/dictionary.ora');END;
10.查看分析结果
SELECTsql_redo,sql_undo,seg_ownerFROMv$logmnr_contentsWHEREseg_name='EMP'ANDseg_owner='SYNC';
注意:视图v$logmnr_contents中的分析结果仅在我们运行过程’dbms_logmrn.start_logmnr’这个会话的生命期中存在,如果要查看新的日志,需要再重新加入分析日志文件、使用LogMiner分析。
11.常见问题
(1)如果出现“必须声明标识符 ‘SYS.DBMS_LOGMNR’”异常,则需要在创建用户后,为用户赋予EXECUTE_CATALOG_ROLE权限,如下所示。
GRANTCONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLETOSYNC;
(2)此时在查询语句中需要为seg_owner指定相应的用户,例如,我这里使用SYNC用户通过LogMiner进行分析,则需要将seg_owner指定为SYNC用户,如下所示。
SELECTsql_redo,sql_undo,seg_ownerFROMv$logmnr_contentsWHEREseg_name='EMP'ANDseg_owner='SYNC';
产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;
日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉;
本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;
部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入;
如若转载,请注明出处:https://www.chanpinyuan.cn/30529.html;