|
Программирование >> Oracle
1644 Приложение А set heading off set embedded on spoollogmnr.opt select colmap= user table name ( max(decode(column id, 1, column id , null)) max(decode(column id, 1, , column name, null) ) max(decode(column id, 2, , column id , null)) max(decode(column id, 2, , column name, null)) max(decode(column id, 3, , column id , null)) max(decode(column id, 3, , column name, null)) max(decode(column id, 4, , column id , null)) max(decode(column id, 4, , column name, null) ) max(decode(column id, 5, , column id , null)) max(decode(column id, 5, , column name,null)) ); colmap from user tab columns group by user, table name spool off в SQL*Plus для автоматической генерации файла logmnr.opt. Например, если в1полнить этот сценарий в схеме, где имеются только таблицы ЕМР и DEPT, аналогичные тем, что принадлежат пользователю SCOTT/TIGER, вы получите: tkyte@TKYTE816> @colmap colmap = TKYTE DEPT (1, DEPTNO, 2, DNAME, 3, LOC); colmap = TKYTE EMP (1, EMPNO, 2, ENAME, 3, JOB, 4, MGR, 5, HIREDATE); Я всегда сопоставляю первых пять столбцов таблицы. Если вы хотите использовать другой набор пяти столбцов, отредактируйте полученный при выполнении этого сценария файл logmnr.opt, изменив имена столбцов. Например, в таблице ЕМР есть еще три столбца, не представленные в полученном файле colmap - SAL, COMM и DEPTNO. Если необходимо просматривать изменения столбца SAL, a не JOB, файл colmap должен выглядеть так: tkyte@TKYTE816> @colmap colmap = TKYTE DEPT (1, DEPTNO, 2, DNAME, 3, LOC); colmap = TKE EMP (1, EMPNO, 2, ENAME, 3, SAL, 4, MGR, 5, HIREDATE); Помимо использования соответствующего регистра символов и количества пробелов при работе с файлом colmap важно также следующее: Файл должен называться logmnr.opt. Другое имя использовать нельзя. Этот файл должен быть в том же каталоге, что и файл словаря. Файл colmap можно использовать только вместе с файлом словаря. Итак, мы сейчас изменим все столбцы в таблице DEPT. Я использую четыре различных оператора UPDATE, каждый из которых будет изменять другую строку и набор столбцов. Это позволит увидеть результат сопоставления столбцов-заместителей: tkyte@TKYTE816> alter system archive log current; tkyte@TKYTE816> update dept set deptno = 11 Пакет DBMS LOGMNR 1645 2 where deptno = 40 tkyte@TKYTE816> update dept set dname = initcap(dname) 2 where deptno = 10 tkyte@TKYTE816> update dept set loc = initcap(loc) 2 where deptno = 20 tkyte@TKYTE816> update dept set dname = initcap(dname), 2 loc = initcap(loc) 3 where deptno = 30 tkyte@TKYTE816> commit; tkyte@TKi816> alter system archive log current; Теперь можно найти изменения в каждом из столбцов, загрузив вновь сгенерированный архивный файл журнала повторного выполнения и запустив LogMiner с опцией USE COLMAP. Обратите внимание, что я сгенерировал файл logmnr.opt с помощью представленного ранее сценария и поместил этот файл в тот же каталог, где находится словарь данных: tkyte@TKYTE816> declare 2 l name v$archived log.name%type; 3 begin 5 select name into l name 6 from v$archived log 7 where completion time = (select max(completion time) 8 fromv$archived log); 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 options => sys.dbms logmnr.USE COLMAP); 5 end; PL/SQL procedure successfully completed. tkyte@TKYTE816> select scn, phl name, phl undo, phl redo, 2 ph2 name, ph2 undo, ph2 redo, 3 ph3 name, ph3 undo, ph3 redo 4 from v$logmnr contents 5 where seg name = DEPT 1646 Приложение А SCN PHl NA PH1 PH1 PH2 N PH2 0NDO PH2 REDO PH3 PH3 UNDO PH3 RED0 6.4430E+12 DEPTNO 40 11 6.4430E+12 DNAME accounting Accounting 6.4430E+12 LOC DALLAS Dallas 6.4430E+12 DNAME sales Sales LOC CHICAGO Chicago Итак, этот результат ясно показывает (в первой строке, например), что в столбце DEPTNO значение 40 (PH1) б1ло изменено на 11. Это понятно, поскольку мы в1пол-няли SET DEPTNO = 11 WHERE DEPTNO = 40. Обратите внимание, что остальн1е столбцы в перовой строке - пустые. Причина в том, что сервер Oracle записывает только измененные байты; для этой строки нет предварительного и окончательного образов столбцов DNAME и LOC. Вторая строка показывает изменение значения в столбце DNAME с accounting на Accounting и отсутствие изменений в столбцах DEPTNO LOC, поскольку они не были затронуты. Последняя строка показывает, что при изменении двух столбцов одним оператором UPDATE они будут представлены в столбцах-заместителях. Как видите, использование столбцов-заместителей может пригодиться при поиске конкретной транзакции в большем объеме данных повторного выполнения. Если известно, что транзакция изменила таблицу X, поменяв в столбце Y значение с а на b, найти ее очень легко. Опции и использование Функциональные возможности LogMiner реализуются двумя пакетами - DBMS LOGMNR и DBMS LOGMNR D. Пакет DBMS LOGMNR D ( D в названии обозначает словарь - dictionary ) содержит всего одну процедуру, BUILD. Она применяется для создания словаря данных, используемого пакетом DBMS LOGMNR при загрузке файла журнала повторного выполнения. Он позволяет сопоставить идентификаторам объектов имена таблиц, определить имена и типы данных столбцов по порядковому номеру и т.д. Использовать процедуру DBMS LOGMNR D.BUILD очень просто. Она имеет два параметра: DICTIONARY FILENAME. Имя файла словаря, который необходимо создать. В наших примерах использовался файл miner dictionary.dat. DICTIONARY LOCATION. Каталог, в котором этот файл будет создан. Процедура использует для создания файла средства пакета UTL FILE, так что каталог должен быть перечислен среди допустимых каталогов, задаваемых параметром инициализации utl file dir. Подробнее о конфигурировании пакета UTL FILE cм. в соответствующем разделе в конце приложения А. Вот и все, что нужно знать о процедуре BUILD. Оба параметра указывать обязательно. Если при вызове этой процедуры получено сообщение об ошибке, подобное следующему: tkyte@TKYTE816> exec sys.dbms logmnr d.build(x.dat, c:\not valid\); BEGIN sys.dbms lognmr d.build(x.dat, c:\not valid\); END;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |