|
Программирование >> Oracle
1650 Приложение А него значения столбцов и идентификатор соответствующей строки. Это можно использовать для поиска оператора DELETE, удаляющего строку для DEPT из таблицы OBJ$, Вот как это делается: tkyte@TKYTE816> declare 2 l name v$archived log.name%type; 3 begin 4 select name into l name 5 from v$archived log 6 where completion time = (select max(completion time) 7 from v$archived log) ; 8 9 sys.dbms logmnr.add logfile(l name, sys.dbms logmnr.NEW); 10 end; 11 / 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, sql redo 2 from v$logmnr contents 3 where sql redo like delete from SYS.OBJ$ %DEPT% SCN SQL REDO 6442991097246 delete from SYS.OBJ$ where OBJ# = 30553 and DATAOBJ# = 3 0553 and OWNER# = 337 an d NAME = DEPT and NAMESPACE = 1 and SU BNAME IS NULL and TYPE# = 2 and CTIME = TO DATE(29-APR-2001 12:32:11, DD-MON-YYYY HH2 4:MI:SS1) and MTIME = TO DATE(2 9-APR-2001 12:32:11, DD-MON-YYYY HH24: MI:SS) and STIME = TO DATE(29-APR-2001 12:32:11, DE-MON-YYYY HH24:MI:SS) an d STATUS = 1 and REMOTEOWNER IS NULL and LINKNAME IS NULL and FLAGS = 0 and OID$ IS NULL and SPARE1 = 6 and ROWID = AAA AASAABAAAFz3AAZ; Вот и все, что нужно. Теперь, получив значение SCN, 6442991097246, можно в1-полнить восстановление до соответствующего момента, экспортировать таблицу и восстановить ее в системе. Восстановить ее можно в состоянии, непосредственно предшествующем удалению. Пакет DBMS LOGMNR 1651 Использование области PGA Для выполнения своих функций пакеты LogMiner используют память в области PGA. Как я уже говорил, это означает, что пакет DBMS LOGMNR нельзя использовать при подключении в режиме MTS. Мы не рассматривали, какой объем памяти в области PGA фактически может использовать LogMiner. Все файлы журнала в моей системе имеют размер 100 Мбайт. Я загрузил два из них для анализа, определив размер используемой области PGA до и после этого: tkyte@TKYTE816> select a.name, b.value 2 fm vSstatname a, vSmystat b 3 where a.statistic# = b.statistic# 4 and lower(a.name) like %pga% name value session pga memory 454768 session pga memory max 454768 tkyte@TKYTE816> declare 2 l name varchar2(255) default 3 C:\oracle\ORADATA\tkyte816\archive\TKYTE816T001S012; 4 begin 5 for i in 49 .. 50 6 loop 7 sys.dbms logmr.add logfile(l name i .ARC) ; 8 end loop; 9 10 sys.dbms logmnr.start logmnr 11 (dictFileName => c:\temp\miner dictionary.dat, 12 options => sys.dbms logmnr.USE COLMAP); 13 end; 14 / PL/SQL procedure successfully completed. tkyte@TKYTE816> select a.name, b.value 2 from vSstatname a, vSmystat b 3 where a.statistic# = b.statistic# 4 and lower(a.name) like %pga% NAME VALUE session pga memory 11748180 session pga memory max 11748180 Итак, 200 Мбайт архивных журналов повторного выполнения сейчас занимают около 11,5 Мбайт в области PGA. Это означает, что либо большая часть архивного журнала повторного выполнения ничего полезного не содержит, либо сервер Oracle кэширует в памяти не весь файл журнала повторного выполнения. Действительно, сервер Oracle на самом деле не кэширует весь файл журнала повторного выполнения в оперативной па- 1652 Приложение А мяти. Он подчитывает данные с диска по мере надобности. В оперативной памяти кэ-шируется только часть информации. Если выполнить запрос к представлению V$LOGMNR CONTENTS и после этого определить объем используемой памяти в области PGA, мы увидим, что по мере обращения к данным объем используемой памяти растет: tkyte@TKYTE816> create table tmplogmnrcontents unrecoverable 2 as 3 select * fm v$logmnrcontents Table created. tkyte@TKYTE816>select a.name, b.value 2 from v$statname a, v$mystat b 3 where a.statistic# = b.statistic# 4 and lower(a.name) like %pga% NAME VALUE session pga memory 19965696 session pga memory max 19965696 Как видите, теперь сеансу надо почти 20 Мбайт памяти в области PGA. Ограничения пакетов LogMiner Пакеты LogMiner имеют ряд ограничений, о которых вы должны знать. Ограничения связаны с использованием объектных типов Oracle и переносом строк. Объектные типы Oracle Объектные типы лишь частично поддерживаются средствами LogMiner. Пакеты LogMiner не могут восстановить SQL-операторы, обычно используемые для доступа к данным объектных типов, и поддерживают не все объектные типы. Ограничения в этой области лучше всего продемонстрировать на примере. Начнем с небольшой схемы, в которой есть данные таких популярных объектных типов, как VARRAY, и вложенн1е таблицы: tkyte@TKYTE816> create or replace type myScalarType 2 as object 3 (x int, y date, z varchar2(25)); Type created. tkyte@TKYTE816> create or replace type myArrayType 2 as varray(25) of myScalarType Type created. tkyte@TKYTE816> create or replace type myTableType 2 as table of myScalarType
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |