Опубликовано

Как посмотреть что же внутри архивных логов oracle?

По работе мне  иногда приходится заглядывать в содержимое архивных (да и оперативных логов), например, затем чтобы узнать, а что же это налопаилось за одну минуту оголо 1ГБ архивных логов… 🙂

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

select * from v$log
для архивных редологов: select name,first_time,completion_time from v$archived_log
для оперативных логов: select lf.MEMBER,l.bytes,l.ARCHIVED,l.STATUS,l.FIRST_TIME from v$logfile lf,v$log l where lf.GROUP#=l.GROUP# order by first_time

1    1    1    7170    524288000    1    NO    ACTIVE    69282022493    19.03.2010 12:03:02
2    2    1    7171    524288000    1    NO    ACTIVE    69282122571    19.03.2010 12:07:06
3    3    1    7172    524288000    1    NO    ACTIVE    69282200216    19.03.2010 12:17:48
4    4    1    7169    524288000    1    NO    INACTIVE    69281949410    19.03.2010 11:59:27
5    5    1    7173    524288000    1    NO    CURRENT    69282413771    19.03.2010 12:24:23

Берем первый редолоог.
begin
DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => ‘/opt/app/oracle/oradata/IMSSS/redo1.log’,
OPTIONS     => DBMS_LOGMNR.NEW);
DBMS_LOGMNR.START_LOGMNR(STARTTIME => TO_DATE(’19-03-2010 12:03:02′,
‘DD-MM-YYYY HH24:MI:SS’),
ENDTIME   => TO_DATE(’19-03-2010 12:07:05′,
‘DD-MM-YYYY HH24:MI:SS’),
OPTIONS   => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
end;

Выполняем данный блок.

Смотрим группировку по операциям:

select operation,count(*) from V$LOGMNR_CONTENTS where 1=1 group by operation order by count(*) desc

START    2655
COMMIT    2675
ROLLBACK    1
UPDATE    2780
DELETE    296049
INTERNAL    296436
INSERT    578216
UNSUPPORTED    72627

Нас интересуют в данном случае операции вставки и удаления, т.к. их больше чем других.

Делаем группировку по объектам в операции INSERT

select SEG_OWNER||’.’||SEG_NAME,count(*) from V$LOGMNR_CONTENTS where operation=’INSERT’ group by SEG_OWNER||’.’||SEG_NAME order by count(*) desc

AIS_SYS.DR$SYS_LOAD_DOCUMENT_IDX4$I    578201
SYSMAN.MGMT_JOB_EXEC_SUMMARY    1
SYSMAN.MGMT_JOB_EXECUTION    1
SYSMAN.MGMT_JOB_HISTORY    1
AIS_CIM.CONTRACT_OUT_CONSENT    2
AIS_HISTORY.ACCESS_LOG    3
SYSMAN.MGMT_JOB_STATE_CHANGES    1
AIS_HISTORY.CONTRACT_OUT_CONSENT    1
AIS_SYS.SYS_LOAD_DOCUMENT    3
CTXSYS.DR$WAITING    2

Видим интересный факт — логи забиты операцией вставки в индекс..

Смотрим по удалению:
select SEG_OWNER||’.’||SEG_NAME,count(*) from V$LOGMNR_CONTENTS where operation=’DELETE’ group by SEG_OWNER||’.’||SEG_NAME order by count(*) desc

AIS_SYS.DR$SYS_LOAD_DOCUMENT_IDX4$I    296031
SYSMAN.MGMT_JOB_EXECUTION    3
SYSMAN.MGMT_JOB_HISTORY    3
SYSMAN.MGMT_JOB_EXEC_SUMMARY    1
SYSMAN.MGMT_JOB_STATE_CHANGES    4
SER_MON.CHECKS_MIX    5
AIS_SYS.SYS_LOAD_DOCUMENT    2

И тут этот объект.. значит надо разбираться, почему же так много операций надо одним объектом.
за 5 минут — 500 000 операций… это странновато.

Размер занимаемый в логе каким либо файлом, я думаю, можно посмотреть следующим запросом:
select sum(length(sql_redo))/1024/1024 as sql_redo_size,sum(length(sql_undo))/1024/1024 as sql_undo_size from V$LOGMNR_CONTENTS where SEG_OWNER=’ESCORT’ and SEG_NAME=’SI_X_HASH’

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

CAPTCHA image