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

1 ... 402 403 404 [ 405 ] 406 407 408 ... 469


1638

Приложение А

tkyte@TKYTE816> select utl raw.cast to varchar2(hextoraw(534d495448))

from dual;

UTL RAW.CAST TO VARCHAR2(HEXTORAW(534D495448 ))

SMITH

Читать этот результат практически невозможно. Мы знаем, что изменен столбец 2 объекта с идентификатором 30551. Более того, можно получить значение HEXTORAW(787878) в виде строки символов. Можно обратиться к словарю данных и определить, какой объект имеет идентификатор 30551:

tkyte@TKYTE816> select object name

2 from all objects

3 where data object id = 3 05 51;

OBJECT NAME

но сделать это можно только в той же базе данных, в которой был сгенерирован журнал повторного выполнения, и только в том случае, если этот объект еще существует. Далее можно выполнить команду DESCRIBE ЕМР и определить, что столбец 2 - это ENAME1 Поэтому в столбце SQL REDO пакет LogMiner поместил значение UPDATE EMP SET ENAME = XXX* WHERE ROWID = .... К счастью, подобные запутанные преобразования не придется выполнять при каждом анализе журнала. Мы убедимся, что, создав и загрузив словарь, можно получить намного более понятные результаты. Следующий пример показывает, каких результатов можно ожидать, создав файл словаря для пакетов LogMiner, a затем загрузив его.

Начнем с создания файла словаря. Создать его весьма просто. Для этого должны быть выполнены следующие требования.

Конфигурация параметров инициализации позволяет создавать с помощью пакета UTL FlLE файлы хотя бы в одном каталоге. Подробнее соответствующая настройка описана в разделе, посвященном пакету UTL FILE. Пакет DBMS LOGMNR D, с помощью которого создается файл словаря данных, для выполнения ввода-вывода использует средства пакета UTL FILE.

Схема, в которой будет вызываться пакет DBMS LOGMNR D, имеет привилегию EXECUTE ON SYS.DBMS LOGMNR D, или ей предоставлена роль с привилегий выполнения этого пакета. По умолчанию роль EXECUTE CATALOG ROLE имеет привилегию для выполнения этого пакета.

После настройки пакета UTL FILE и получения привилегии EXECUTE ON DBMS LOGMNR D создание файла словаря представляет собой тривиальную задачу. Надо вызвать всего одну подпрограмму пакета DBMS LOGMNR D - процедуру BUILD. Достаточно выполнить примерно следующее:

tkyte@TKYTE816>set serveroutput on

tkyte@TKYTE816> begin

2 sys.dbms logmnr d.build(miner dictionary.dat,

3 c:\temp);



Пакет DBMS LOGMNR 1639

4 end;

LogMnr Dictionary Procedure started

LogMnr Dictionary File Opened

TABLE: OBJ$ recorded in LogMnr Dictionary File

TABLE: TAB$ recorded in LogMnr Dictionary File

TABLE: COL$ recorded in LogMnr Dictionary File

TABLE: SEG$ recorded in LogMnr Dictionary File

TABLE: UNDO$ recorded in LogMnr Dictionary File

TABLE: UGROUP$ recorded in LogMnr Dictionary File

TABLE: TS$ recorded in LogMnr Dictionary File

TABLE: CLU$ recorded in LogMnr Dictionary File

TABLE: IND$ recorded in LogMnr Dictionary File

TABLE: ICOL$ recorded in LogMnr Dictionary File

TABLE: LOB$ recorded in LogMnr Dictionary File

TABLE: USER$ recorded in LogMnr Dictionary File

TABLE: FILE$ recorded in LogMnr Dictionary File

TABLE: PARTOBJ$ recorded in LogMnr Dictionary File

TABLE: PARTCOL$ recorded in LogMnr Dictionary File

TABLE: TABPART$ recorded in LogMnr Dictionary File

TABLE: INDPART$ recorded in LogMnr Dictionary File

TABLE: SUBPARTCOL$ recorded in LogMnr Dictionary File

TABLE: TABSUBPART$ recorded in LogMnr Dictionary File

TABLE: INDSUBPART$ recorded in LogMnr Dictionary File

TABLE: TABCOMPART$ recorded in LogMnr Dictionary File

TABLE: INDCOMPART$ recorded in LogMnr Dictionary File

Procedure executed successfully - LogMnr Dictionary Created

PL/SQL procedure successfully completed.

Перед вызовом процедуры BUILD пакета DBMS LOGMNR D рекомендуется выполнять команду SET SERVEROUTPUT ON - это обеспечит выдачу информацион-н1х сообщений пакета DBMS LOGMNR D. Они помогут выяснить причины ошибки при выполнении DBMS LOGMNR D.BUILD. Выполненная выше команда создала файл C:\TEMP\MINER DICTIONARY.DAT. Это обычный текстовый файл, который можно просматривать в текстовом редакторе. Файл содержит SQL-подобные операторы, которые анализируются и выполняются процедурой запуска основного пакета LogMiner. Теперь, при наличии файла словаря, можно посмотреть, какая информация содержится в представлении V$LOGMNR CONTENTS:

tkyte@TKYTE816> begin

2 sys.dbms logmnr.add logfile

3 (C:\oracle\oradata\tkyte816\archive\TKYTE816T001S01263.ARC1,

4 sys.dbms logmnr.NEW);

5 end;

PL/SQL procedure successfully completed.

tkyte@TKYTE816> begin

2 sys.dbms logmnr.start logmnr

3 (dictFileName=> c:\temp\miner dictionary.dat);

4 end;



1640

Приложение А

5 /

PL/SQL procedure successfully completed.

tkyte@TKYTE816>column sql redo format a30 tkyte@TKYTE816> column sql undo format a3 0

tkyte@TKYTE816> select scn, sql redo, sql undo from v$logmnr contents

SCN SQL REDO SQL UNDO

6.4430E+12

6.443 0E+12 set transaction read write;

6.443 0E+12 update TKYTE.EMP set ENAME = update TKYTE.EMP set ENAME = xxx where ROWID = AAAHdXAAGA SMITH where ROWID = \dX AAAJKAAA; GAAAAJKAAA;

6.4430E+12 6.4430E+12 coit;

Теперь все гораздо понятнее: можно прочитать SQL-операторы, сгенерированные пакетом LogMiner, и повторяющие (или отменяющие) изучаемую транзакцию. Теперь можно переходить ко второму этапу - использованию средств LogMiner.

Этап 2: использование средств LogMiner

Используем только что сгенерированный файл словаря для анализа содержимого архивных файлов журнала повторного выполнения. Перед загрузкой журнала повторного выполнения сгенерируем такой файл, все транзакции в котором будут известны. Это упростит интерпретацию результатов в первый раз. Мы сможем сопоставлять содержимое представления V$LOGMNR CONTENTS с только что выполненными транзакциями. Для этого важно организовать тестовую базу данных, с которой будет работать только один пользователь. Это позволит искусственно ограничить содержимое журнала повторного выполнения. Для этой базы данных также понадобится привилегия ALTER SYSTEM, чтобы можно было принудительно вызвать архивирование файла журнала. Наконец, все гораздо проще, если база данных работает в режиме автоматического архивирования журналов. При этом очень легко найти соответствующий файл журнала повторного выполнения (это будет только что заархивированный файл - ниже я покажу, как его найти). При использовании базы данных в режиме NOARCHWELOGMODE, вам придется найти активный журнал и определить, какой файл журнала был активным непосредственно перед ним. Итак, чтобы сгенерировать транзакцию-образец, выполним:

tkyte@TKYTE816> alter system archive log current;

System altered.

tkyte@TKYTE816> update emp set ename = lower(ename); 14 rows updated.

tkyte@TKYTE816> update dept set dname = lower(dname);

4 rows updated.



1 ... 402 403 404 [ 405 ] 406 407 408 ... 469

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