通过LogMiner实现数据同步迁移

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赋予用户我不知道,知道的朋友说下。

你可能感兴趣的:(oracle,sysdba,LOGMINER)