Запретить Oracle LogMiner создавать архивные журналы в области мгновенного восстановления

Я пытаюсь использовать Oracle LogMiner (пакет DBMS_LOGMNR) для реализации функций контрольных журналов на основе журналов повторного выполнения. Но каждый раз, когда я запрашиваю V$LOGMNR_CONTENTS, он создает несколько больших (до 50M) файлов архивных журналов в области флэш-восстановления (SELECT NAME FROM V$RECOVERY_FILE_DEST), несмотря на то, что в моей тестовой БД было всего несколько транзакций в час. После нескольких раз использования Oracle LogMiner все пространство в области флэш-восстановления становится занятым, и Oracle перестает работать.

Есть ли способ запретить Oracle LogMiner создавать архивные журналы в области мгновенного восстановления?

Я инициализирую Oracle LogMiner следующим образом:

SYS.DBMS_LOGMNR_D.BUILD(options => SYS.DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);

SYS.DBMS_LOGMNR.START_LOGMNR(startScn => PREV_SCN, endScn => NEXT_SCN,
      options =>
                 SYS.DBMS_LOGMNR.COMMITTED_DATA_ONLY +
                 SYS.DBMS_LOGMNR.DICT_FROM_REDO_LOGS +
                 SYS.DBMS_LOGMNR.SKIP_CORRUPTION +
                 SYS.DBMS_LOGMNR.CONTINUOUS_MINE
   );

Расстояние между PREV_SCN и NEXT_SCN в моем случае всегда небольшое и охватывает только несколько транзакций.

Когда я использую ALTER DATABASE NOARCHIVELOG; для отключения архивных журналов, DBMS_LOGMNR_D.BUILD вызывает ORA-01325: режим архивного журнала должен быть включен для встраивания в поток журналов.


person Volodymyr Frolov    schedule 08.12.2010    source источник
comment
Хотя ваш вопрос интересен сам по себе (почему LogMiner создает повтор/отмену?), мне интересно, почему вы не используете команду AUDIT для своего контрольного журнала?   -  person Vincent Malgrat    schedule 08.12.2010
comment
Винсент, AFAIK Oracle Audits позволяет мне видеть только операторы, которые были выполнены с их переменными связывания. Но я должен отображать старые и новые значения полей для каждой строки в моем отчете о контрольном журнале. Пожалуйста, поправьте меня, если я ошибаюсь в отношении Oracle Audits.   -  person Volodymyr Frolov    schedule 08.12.2010
comment
Вы правы, команда AUDIT не записывает значения :new и :old. Подробный аудит (функция Enterprise Ed.) может иметь больше параметров.   -  person Vincent Malgrat    schedule 08.12.2010
comment
Oracle FGA также не предоставляет информацию о значениях :new и :old, но похоже, что ее можно получить с помощью FGA + Oracle Flashback Queries. Спасибо.   -  person Volodymyr Frolov    schedule 08.12.2010
comment
Винсент, Oracle FGA в любом случае не подходит для моего случая. Даже при использовании Flashback Queries нет подходящего способа определить, что было изменено, за исключением двух полных выборок по проверенной таблице: SELECT * FROM MY_TABLE AS OF SCN AUDIT_SCN MINUS SELECT * FROM MY_TABLE AS OF SCN AUDIT_SCN +1; Где AUDIT_SCN — значение SCN из журналов аудита FGA.   -  person Volodymyr Frolov    schedule 08.12.2010


Ответы (1)


Причина, по которой Logminer создает записи в журнале повторов, заключается в том, что вы специально спросили:

 SYS.DBMS_LOGMNR_D.BUILD(options => SYS.DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
                                                      ^^^^^^^^^^^^^^^^^^

Если вы не хотите, чтобы logminer сохранял свои данные в журналах повторов, используйте вместо этого DBMS_LOGMNR_D.STORE_IN_FLAT_FILE. См. эту заметку в блоге, например, пошаговое руководство по настройке logminer с использованием плоских файлов.

person Vincent Malgrat    schedule 08.12.2010
comment
Спасибо! Я думал, что опция STORE_IN_REDO_LOGS хранит журналы в одном месте и перезаписывает их каждый раз, когда я вызываю DBMS_LOGMNR_D.BUILD, но это не так. Словарь создается заново каждый раз, когда я вызываю DBMS_LOGMNR_D.BUILD, а старый не удаляется. Вместо этого я буду использовать STORE_IN_FLAT_FILE. - person Volodymyr Frolov; 08.12.2010