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

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


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



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

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