Программирование >>  Oracle 

1 ... 405 406 407 [ 408 ] 409 410 411 ... 469


Пакет DBMS LOGMNR 1647

ERROR at line 1:

ORA-01309 : specified dictionary file cannot be opened ORA-06510: PL/SQL: unhandleduser-defined exception ORA-06512: at SYS.DBMS LOGMNR D , line 793

ORA-06512: at line 1

значит, указанный каталог не указан в параметре инициализации utl file dir. Пакет DBMS LOGMNR состоит из трех процедур.

ADD LOGFILE. Зарегистрировать набор файлов журнала для анализа.

START LOGMNR. Заполнить данными представление V$LOGMNR CONTENTS.

END LOGMNR. Освободить все ресурсы, выделенные при работе LogMiner. Эта процедура вызывается для корректного освобождения ресурсов перед завершением сеанса или при окончании работы с пакетами LogMiner.

Процедура ADD LOGFILE, как было сказано ранее, вызывается еще до запуска LogMiner. Она создает список файлов журнала, которые будут обрабатываться при выполнении процедуры START LOGMNR для заполнения представления VSLOGMNR CONTENTS. Процедура ADD LOGFILE принимает следующие параметры:

LOGFILENAME. Полное имя файла архивного журнала повторного выполнения, который необходимо проанализировать.

OPTIONS. Задает, добавлять указанный файл или удалять. В качестве значения задаются следующие константы пакета DBMS LOGMNR:

DBMS LOGMNR.NEW. Начать новый список. Если список уже существует, он очищается.

DBMS LOGMNR.ADD. Добавить файл в уже существующий или пустой список.

DBMS LOGMNR.REMOVEFILE. Удалить файл из списка.

Если необходимо проанализировать последние два архивных файла журнала повторного выполнения, процедура ADD LOGFILE вызывается дважды. Например:

tkyte@TKYTE816> declare

2 l cnt number default 0;

3 begin

4 for x in (select name

5 from v$archived log

6 order by completion time desc)

7 loop

8 l cnt := l cnt+l;

9 exit when (l cnt > 2); 10

11 sys.dbms logmnr.add logfile(x.name);

12 end loop;

14 sys.dbms logmnr.start logmnr

15 (dictFileName => c:\temp\miner dictionary.dat.



1648

Приложение А

16 options => sys.dhms logmnr.USE COLMAP);

17 end;

18 /

PL/SQL procedure successfully completed.

В одном сеансе после запуска LogMiner можно вызывать процедуру ADD LOGFILE для добавления дополнительных файлов журнала, удаления тех из них, которые больше не представляют интереса, или (если указана опция DBMS LOGMNR.NEW) для сброса списка файлов журнала так, чтобы он включал только один указанный новый файл. При вызове DBMS LOGMNR.START LOGMNR после изменения списка файлов содержимое представления V$LOGMNR CONTENTS, по сути, сбрасывается и создается заново на основе информации в журнальных файлах, входящих в список.

Процедура DBMS LOGMNR.START LOGMNR принимает много параметров. В

рассмотренных ранее примерах мы использовали только два из шести имеющихся. Мы задавали имя файла словаря и опции (чтобы указать, что необходимо использовать файл colmap). В общем случае поддерживаются следующие параметры:

STARTSCN и ENDSCN. Если точно известен диапазон интересующих номеров системных изменений, можно поместить в представление V$LOGMNR CONTENTS только соответствующие строки. Это пригодится после загрузки всего файла журнала и определения максимального и минимального номера системных изменений, которые представляют интерес. Можно перезапустить LogMiner, указав этот диапазон, чтобы уменьшить объем даннгх в представлении V$LOGMNR CONTENTS. По умолчанию эти параметры имеют значение 0 и не используются.

STARTTIME и ENDTIME. Вместо указания диапазона SCN можно задать отрезок времени. Только записи журнала, попадающие в указанный отрезок времени, окажутся в представлении V$LOGMNR CONTENTS. Эти значения игнорируются, если указаны значения STARTSCN и ENDSCN. По умолчанию используется отрезок времени с 1 января 1988 года по 1 января 2988 года.

DICTFILENAME. Полное имя файла словаря, созданного процедурой

DBMS LOGMNR D.BUILD.

OPTIONS. B настоящее время поддерживается только одна опция процедуры

DBMS LOGMNR.START LOGMNR - опция DBMS LOGMNR.USE COLMAP.

Она задает поиск файла logmnr.opt в том же каталоге, что и файл DICTFILENAME. Важно помнить, что файл colmap может иметь только имя logmnr.opt и должен находиться в том же каталоге, что и файл словаря.

Последняя процедура в пакете DBMS LOGMNR-DBMS LOGMNR.END LOGMNR

Она завершает сеанс LogMiner и очищает представление V$LOGMNR CONTENTS. После вызова DBMS LOGMNR.END LOGMNR любые попытки обратиться к этому представлению дадут следующий результат:

tkyte@TKYTE816> exec dbms logmnr.end logmnr;

PL/SQL procedure successfully completed.

tkyte@TKYTE816> select count(*) from v$logmnr contents; select count(*) from v$logmnr contents



Пакет DBMS LOGMNR 1649

ERROR at line 1:

ORA-01306: dbms logmnr.start logmnr() must be invoked before selecting from v$logmnr contents

Определение с помощью LogMiner, когда...

Это наиболее типичный вариант использования пакетов LogMiner. Кто-то удалил таблицу. Надо восстановить ее или выяснить, кто это сделал. Другой пример: изменены данные в важной таблице, виновник не признается. Это произошло при отключенной проверке, но база данных работала в режиме архивирования журналов, и все резервные копии доступны. Хотелось бы восстановить данные из резервной копии до момента непосредственно перед определенным изменением (например, перед выполнением DROP TABLE). Можно восстановить таблицу, прекратив восстановление в нужный момент (чтобы таблица не была удалена снова), экспортировать эту таблицу в восстановленной базе данных, а затем импортировать в текущей. Это позволит восстановить таблицу и оставить в силе остальные изменения.

Для этого необходимо знать либо точное время, либо значение SCN для оператора DROP TABLE. Поскольку часы у всех обычно показывают время неточно, а пользователи паникуют, они могут предоставить неверную информацию. Можно загрузить ар-хивн1е файлы журнала за тот период, когда б1л выполнен оператор DROP TABLE, и найти точное значение SCN, до которого должно выполняться восстановление.

Рассмотрим еще один небольшой пример, показывающий, какие операторы может вгдать LogMiner при удалении таблицы. Я использую локально управляемые табличные пространства, так что, если вы используете табличные пространства, управляемые по словарю, у вас может получиться больше SQL-операторов, чем показано далее. Появление дополнительных SQL-операторов в случае управляемых по словарю табличных пространств связано с возвратом экстентов системе и освобождению выделенного таблице пространства. Итак, переходим к удалению таблицы:

tkyte@TKYTE816> alter system archive log current; System altered.

tkyte@TKYTE816> drop table dept; Table dropped.

tkyte@TKYTE816> alter system archive log current; Systemaltered.

Теперь необходимо найти значение в столбце SQL REDO, представляющее удаление таблицы (оператор DROP TABLE). Если помните, LogMiner в]дает неточный список выполненных SQL-операторов. Выдаются эквивалентные по действию SQL-операторы. Оператор DROP TABLE в результатах работы LogMiner отсутствует: мы увидим только изменения в словаре данных. В частности, нас интересует оператор DELETE, примененный к таблице SYS.OBJ$ - базовой для всех объектов. При удалении таблицы необходимо удалить соответствующую строку из таблицы SYS.OBJ$. K счастью, при создании значения столбца SQL REDO для оператора DELETE LogMiner включает в



1 ... 405 406 407 [ 408 ] 409 410 411 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика