Архив на месяц Февраль, 2012
Опубликовано: Февраль 20, 2012, категория: Программирование.
Здравствуйте.
По работе мне понадобилось проследить рост объектов в базе данных (таблицы, индексы, лоб-объекты). Это нужно было для того, чтобы увидеть какие объекты и как быстро растут. Для этих целей я написал маленький “модулек”.
Будем делать этот модулек в схеме ser_mon.
1. Дадим права данной схеме на выборку из системного представления.
grant select on dba_segments to ser_mon;
2. Создадим таблицу в которой будет хранится информация по размеру объектов:
Create table SER_MON.OBJECTS_SIZE_STAT
(
check_date DATE,
object_name VARCHAR2(255),
object_size NUMBER
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
3. Создадим процедуру, которая будет писать текущее состояние по объектам в созданную нами таблицу.
create or replace procedure ser_mon.check_objects_size is
begin
insert into ser_mon.objects_size_stat o (check_date,object_name,object_size)
select sysdate,s.owner || ‘.’ || s.segment_name, sum(s.bytes) / 1024 / 1024
from dba_segments s
where s.bytes / 1024 / 1024 >1
group by s.owner || ‘.’ || s.segment_name;
commit;
exception when others then
p_log.put_in_log(p_proc_name => ’ser_mon.check_objects_size’,p_message => sqlerrm(),p_is_error => 1);
end check_objects_size;
4. Создадим джоб, который будет запускать созданную нами процедуру раз в сутки.
variable job number;
begin
sys.dbms_job.submit(job => :job,
what => ’ser_mon.check_objects_size();’,
next_date => to_date(’02-02-2012 23:00:00′, ‘dd-mm-yyyy hh24:mi:ss’),
interval => ‘trunc(sysdate+1)+23/24′);
commit;
end;
/
Все, модулек готов. Чтобы посмотреть как выросли объекты в бд нужно запустить следующий запрос:
select s1.object_name,
(s2.object_size - s1.object_size) as diff,
s1.object_size,
s2.object_size
from SER_MON.OBJECTS_SIZE_STAT s1, SER_MON.OBJECTS_SIZE_STAT s2
where trunc(s1.check_date) + 30 = trunc(sysdate)
and trunc(sysdate - 1) = trunc(s2.check_date)
and s1.object_name = s2.object_name
Опубликовано: Февраль 9, 2012, категория: Теория.
Конечно, уничтожение сессий в нормально работающей системе это случай выходящий за рамки обычного, но иногда все же такая возможность нужна.
В документации по ссылке описаны команды уничтожения сессий ( выдержка процитирована внизу заметки) .
Я думаю что наилучшим вариантом будет: alter system disconnect session’#SID,#SERIAL’ immediate;
(далее…)