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

目录
  • 通过logminer实现oracle数据同步迁移
    • 一、实现过程
      • 1.创建目录
      • 2.配置logminer
      • 3.开启日志追加模式
      • 4.重启数据库
      • 5.创建数据同步用户
      • 6.创建数据字典
      • 7.加入需要分析的日志文件
      • 8.查看正在使用的日志文件
      • 9.使用lominer分析日志
      • 10.查看分析结果
      • 11.常见问题

通过logminer实现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)当在查询vlogmnrlogs时提示“表或视图不存在”,是因为没有查询vlogmnr_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'; 

以上就是通过logminer实现oracle数据同步迁移的详细内容,更多关于logminer实现oracle数据同步迁移的资料请关注www.887551.com其它相关文章!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐