欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

通过LogMiner实现数据同步迁移

程序员文章站 2022-05-07 16:28:18
...

1、手动创建LogMiner文件夹E:\ora_logminer\utl

2、以DBA用户登陆,配置LogMiner文件夹

conn /as sysdba;
CREATE DIRECTORY utlfile AS 'E:\ora_logminer\utl';
alter system set utl_file_dir='E:\ora_logminer\utl' scope=spfile;

 注意:由于utl_file_dir只存在于文件当中,所以scope是以文件方式"spfile"写入,而不是both。

开启日志文件追加模式,只有开启后才能看到DML操作记录,否则只能看见DML

alter database add supplemental log data;

 修改后需要重新启动数据库

SHUTDOWN IMMEDIATE;
STARTUP;

 3、创建数据同步用户,如果已经有可以跳过,直接赋予权限

GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO LOGMINER;

 4、切换到你要同步数据用户,以DBA登陆,创建数据=字典文件

conn scott/tiger@orcl as sysdba;
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'E:\ora_logminer\utl');

5、加入需要分析的日志文件

BEGIN
dbms_logmnr.add_logfile(logfilename=>'D:\oracle\product\10.2.0\oradata\orcl\REDO02.LOG',options=>dbms_logmnr.NEW);
dbms_logmnr.add_logfile(logfilename=>'D:\oracle\product\10.2.0\oradata\orcl\REDO01.LOG',options=>dbms_logmnr.ADDFILE);
dbms_logmnr.add_logfile(logfilename=>'D:\oracle\product\10.2.0\oradata\orcl\REDO03.LOG',options=>dbms_logmnr.ADDFILE);
END;
/

 可以通过

SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;

 查看正在使用的日志文件,status为CURRENT的为当前正在使用的日志文件

6、开始使用LogMiner分析

EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'E:\ora_logminer\utl\dictionary.ora');

 7、观察分析结果

SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SCOTT';

 需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在,如果要查看新的日志,需要再重新加入分析日志文件、使用LogMiner分析。

 

常见问题:

1、如果出现“必须声明标识符 'SYS.DBMS_LOGMNR'”异常,需要赋予EXECUTE_CATALOG_ROLE权限

2、当在查询v$logmnr_logs时提示“表或视图不存在”,是因为没有查询v$logmnr_logs的权限。至少怎样单独把v$logmnr_logs赋予用户我不知道,知道的朋友说下。