|
Программирование >> Oracle
Пакет DBMS LOGMNR 1641 tkyte@TKYTE816> commit; Commit complete. tkyte@TKYTE816> alter system archive log current; System altered. tkyte@TKYTE816> column name format a80 tkyte@TKYTE816> select name 2 from v$archived log 3 where completion time = (select max(completion time) 4 from v$archived log) NAME C:\ORACLE\ORADATA\TKYTE816\ARCHrVE\TKYTE816T001S01267.ARC Теперь, с учетом того, что я - единственный пользователь, изменяющий базу данных, в сгенерированном архивном журнале окажутся только два выполненных изменения. Последний запрос к представлению V$ARCHIVED LOG возвращает имя архивного файла журнала повторного выполнения, который необходимо анализировать. Его можно загрузить в LogMiner и анализировать с помощью приведенных ниже PL/SQL-блоков. Они добавят последний архивный файл журнала повторного выполнения к списку обрабатываемых, а затем запустят LogMiner: tkyte@TKYTE816> declare 2 l name v$archived log.name%type; 3 begin 4 5 select name into l name 6 from v$archived log 7 where completion time = (select max(completion time) 8 from v$archived log); 9 10 sys.dbms logmnr.add logfile(l name, sys.dbms logmnr.NEW); 11 end; 12 / PL/SQL procedure successfully completed. tkyte@TKYTE816> begin 2 sys.dbms logmnr.start logmnr 3 (dictFileName => c:\temp\miner dictionary.dat); 4 end; PL/SQL procedure successfully completed. Первый вызов процедуры, DBMS LOGMNR.ADD LOGFILE, загрузил архивный файл журнала повторного выполнения в LogMiner. Я передал имя архивного файла журнала повторного выполнения и опцию DBMS LOGMNR.NEW. Поскольку этот файл добавляется первым, надо указывать опцию DBMS LOGMNR.NEW. Поддерживаются также опции ADDFILE для добавления еще одного файла журнала в существующий 1642 Приложение А список файлов, а также REMOVEFILE - для удаления файла из списка рассматриваемых. После загрузки нужных файлов журнала можно вызывать процедуру DBMS LOGMNR.START LOGMNR, передавая ей имя созданного файла словаря. При вызове START LOGMNR передается минимум информации - только имя файла словаря. Другие опции процедуры START LOGMNR мы рассмотрим в разделе Опции и использование . Теперь, после загрузки файла журнала и запуска LogMiner, все готово для просмотра содержимого представления V$LOGMNR CONTENTS. Представление V3LOGMNR CONTENTS содержит большое количество информации; для начала рассмотрим только небольшую ее часть. В частности, выберем значения столбцов SCN, SQL REDO и SQL UNDO. Если вы этого еще не знаете, SCN (порядковый номер системного изменения) - это простой механизм отсчета времени, который сервер Oracle пользуетдля упорядочения транзакций и восстановления базы данных после сбоев. Эти номера также используются для обеспечения согласованности по чтению и при обработке контрольных точек в базе данных. SCN можно рассматривать как счетчик: при фиксации каждой транзакции значение SCN увеличивается на единицу. Вот запрос из предыдущего примера, в котором имена в таблицах ЕМР и DEPT переводятся в нижний регистр: tkyte@TKYTE816>column sql redo format a2 0 word wrapped tkyte@TKYTE816> column sql undo format a20 word wrapped tkyte@TKYTE816> select scn, sql redo, sql undo from v$logmnr contents SCN SQL REDO SQL UNDO 6.443 0E+12 set transaction read write; 6.4430E+12 update TKYTE.EMP set update TKYTE.EMP set ENAME = smith ENAME - SMITH where ROWID = where ROWID = AAAHdYAAGAAAAJKAAA AAAHdYAAGAAAAJKAAA 6.4430E+12 6.443 0E+12 update TKYTE.EMP set update TKYTE.EMP set ENAME = allen ENAME = ALLEN where ROWID = where ROWID = AAAHdYAAGAAAAJKAAB AAAHdYAAGAAAAJKAAB ...(несколько аналогичных строк выброшено).. . 6.4430E+12 update TKYTE.DEPT update TKYTE.DEPT set DNAME = sales set DNAME = SALES where ROWID = where ROWID = AAAHdZAAGAAAAKKAAC AAAHdZAAGAAAAKKAAC 6.4430E+12 update TKYTE.DEPT update TKYTE.DEPT set DNAME = set DNAME = Пакет DBMS LOGMNR 1643 operations where OPERATIONS where ROWID = ROWID = AAAHdZAAGAAAAKKAAD AAAHdZAAGAAAAKKAAD 6.443 0E+12 coit; 22 rows selected. Как видите, SQL-операторы сгенерировали в журнале повторного выполнения не две строки, а намного больше. Журнал повторного выполнения содержит измененные биты и байты, а не SQL-операторы. Поэтому многострочный оператор UPDATE EMP SET ENAME = LOWER(ENAME) представляется средствами LogMiner в виде набора одно-строчн1х изменений. В настоящее время LogMiner не позволяет получить реально выполненные SQL-операторы. Можно создать только делающие то же самое SQL-опера-торы, но в виде набора отдельных операторов. В этом примере мы пойдем на шаг дальше. В представлении V$LOGMNR CONTENTS есть столбцы-заместители ( placeholder columns). Столбцы-заместители позволяют найти изменения, выполненные в пяти (но не более) столбцах таблицы. Столбцы-заместители позволяют узнать имя измененного столбца, а также значение столбца до и после изменения. Поскольку эти столбцы в]делены из текста SQL-операторов, очень легко найти транзакцию, изменившую, скажем, значение в столбце ENAME (в столбце-заместителе имени будет значение ENAME) с KING (в столбце предварительного значения будет KING) на king. Чтобы продемонстрировать это, выполним еще один небольшой пример с оператором UPDATE и создадим файл сопоставления столбцов (column mapping file). Файл сопоставления столбцов (будем сокращенно называть его файл colmap) позволяет указать средствам LogMiner, какие столбцы в таблице вас интересуют. Можно сопоста-витьдо пяти столбцов в каждой таблице со столбцами-заместителями. Файл colmap имеет следующий формат: colmap = TKYTE DEPT (1, DEPTNO, 2, DNAME, 3, LOC); colmap = TKYTE EMP (1, EMPNO, 2, ENAME, 3, JOB, 4, MGR, 5, HIREDATE); При просмотре строки в таблице DEPT столбцу DEPT DEPTNO будет сопоставлен первый столбец-заместитель. А при просмотре строки в таблице ЕМР этому столбцу-заместителю будет сопоставлен столбец ЕМР EMPNO. Файл сопоставления столбцов в общем случае состоит из строк следующей структуры (полужирным в]делены константы, <sp> представляет обязательный пробел) colmap<sp>-<sp>ВЛАДЕЛЕЦ<sp>ИМЯ ТАБЛИЦЫ<sp> (1, <sp>ИМЯ СТОЛБЦА[, <sp>2, <sp> ->ИМЯ СТОЛБЦА] ...) ; Регистр символов везде имеет значение: ВЛАДЕЛЬЦА надо задавать в верхнем регистре, имя таблицы - с соблюдением регистра (обычно - в верхнем регистре, если только при создании объекта не использовались идентификаторы в кавычках). Пробелы указывать тоже обязательно. Для того чтобы упростить использование файла сопоставления столбцов я использую следующий сценарий: set linesize 500 set trimspool on set feedback off
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |