0

我有一个我管理的 Oracle RDS 数据库,我需要能够从数据库中提取更改以复制到另一个系统。一旦连接到数据库,下面是我运行的命令。

EXEC rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'logminerlogs');
set heading off;
set echo off;
set space 0;
set pagesize 0;
set linesize 10000;
set termout off;
set trimout on;
SET TRIMSPOOL ON;
set feedback off;
set newpage NONE;
set define on;
exec dbms_stats.gather_dictionary_stats;
EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','UNIQUE');
BEGIN
dbms_logmnr.add_logfile(
logfilename=> 'rdsdbdata/db/ORCL_A/arch?redolog-99999-9-9999999999.arc');
*** REPEAT for all redo logs ***
END
/
EXECUTE dbms_logmnr.start_logmnr(STARTTIME=>SYSDATE-1,ENDDATE=>SYSDATE,OPTIONS=>DBMS_LOGMNR.DICT_FROM_REDO_LOGS+DBMS_LOGMNR.COMMITTED_DATA_ONLY+DBMS_LOGMNR.PRINT_PRETTY_SQL);

做所有这一切给了我错误

ORA-01291: missing log file
ORA-06512: at "SYS.DBMS_LOGMNR", line 72
ORA-06512: at line 1

我通过查询获得所有“弧”文件

SELECT name FROM v$archived_log WHERE first_time > SYSDATE-1 and first_time < systdate ORDER BY 1;

我运行了所有这些脚本一次,并且能够查询v$logmnr_contents并获得我想要的结果。当我打开另一个 SQLPlus 窗口并再次运行所有脚本时,我收到上面提到的 Missing Log File 错误。

我不确定我在这里做错了什么。我也试过

DBMS_LOGMNR_D.BUILD(dictionary_filename=>'lgmnrdict.ora',dictionary_location=>'LOGMNRLOGS');

LOGMNRLOGS我之前创建的字典文件夹在哪里,然后在调用时add_logfile我指向数据库中存在的 4 个 onlinelogs .log 文件而不是 redologs ,然后运行命令

EXECUTE DBMS_LOGMNR.START_LOGMNR(dictfilename=>'/rdsdbdata/userdirs/o1/logmnrdict.ora');

这将启动 Logminer,但是当我进行任何更改并提交到数据库时,当我查询v$logmnr_contents这些更改时不会返回。

我意识到我可能在这一点上漫无边际,但我觉得我非常接近解决方案;我只是想念一些东西。任何帮助表示赞赏。

4

1 回答 1

0

问题在于,对于每个 add_logfile 命令,我都在为每个命令设置 dbms_logmnr.new 选项,而不是使用 dbms_logmnr.addfile 为第一个和所有剩余的重做日志设置选项。

于 2022-02-01T21:35:44.927 回答