(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Как убрать процессы несуществующих сеансов в Oracle

Владимир Пржиялковский

Проблема

На расхожем ныне жаргоне заголовок мог бы звучать так: "Как убрать трупы (убитых сеансов)". Интересно, что такое название звучало бы точно.

Как известно, каждый сеанс связи клиентской программы с СУБД Oracle реализуется посредством "серверного процесса", возникающего на компьютере, где работает СУБД. Но сеанс может прерваться аварийно (например, из-за ненормального завершения работы клиентской программы или в результате выдачи администратором БД команды ALTER SYSTEM KILL SESSION) и тогда, по логике вещей серверный процесс, обслуживавший сеанс, должен пропасть. Иногда, однако, этого не происходит, и администратор наблюдает на сервере все растущий перечень "мертвых" серверных процессов. Почему - отдельный разговор, и у разработчиков Oracle найдется, вероятно, свое оправдание, но так далеко заходить не все администраторы имеют возможность. Важно, что "мертвые" серверные процессы как минимум расходуют оперативную память, которой когда-то может не хватить, и что с этим можно бороться.

Информация о процессах и сеансах

С процедурной точки зрения каждая конкретная программа под названием "экземпляр СУБД Oracle" состоит из "набора взаимодействующих процессов" (документация). Каждый активный сеанс связи клиентской программы с экземпляром СУБД реализуется одним таким процессом (серверным).

Список процессов в составе СУБД можно посмотреть в динамической таблице V$PROCESS:

SELECT addr, spid, program, pga_used_mem
FROM v$process;

Здесь поле ADDR - адрес процесса в оперативной памяти, SPID - номер процесса ОС, реализующего конкретный процесс Oracle (собственно процесса в Unix, или же нити в Windows). Поля PROGRAM и PGA_USED_MEM (объем собственной памяти данных процесса) приведены для наглядности.

Список сеансов связи, установленных клиентскими программами с СУБД можно посмотреть в динамической таблице V$SESSION:

SELECT sid, serial#, paddr, status, terminal, program
FROM v$session;

Здесь ADDR - адрес процесса, реализующего данный сеанс, STATUS - состояние сеанса; остальные поля приведены для наглядности (пара SID, SERIAL# - составной идентификатор сеанса, на который и нужно ссылаться при его уничтожении командой ALTER SYSTEM KILL SESSION). Если STATUS = 'KILLED', сеанс уже "убит", и такие-то сеансы иногда и приходится "зачищать".

Если соединить две таблицы по условию V$PROCESS.ADDR = V$SESSION.PADDR, получим информацию о сеансах, их состояниях и номерах физических процессов СУБД для них:

SELECT p.spid, p.program, s.program, s.terminal, s.status
FROM v$process p, v$session s
WHERE p.addr = s.paddr;

(Желающие могут выдать и другие поля, справившись об их смысле в документации).

Чистка процессов

Освобождение напрасно занятых ресурсов СУБД достигается путем удаления в ОС процесса (нити), реализующего процесс Oracle, соответствующий "убитому" сеансу. Для такого удаления в составе ПО Oracle имеется специальная программа orakill, параметрами которой даются номер процесса (нити) ОС (берем из поля V$PROCESS.SPID) и имя экземпляра СУБД (ORACLE_SID):

orakill ORACLE_SID номер_процесса_(нити)

Как воспользоваться этой программой - дело техники. Например, можно построить запрос типа

SELECT 'HOST orakill ' // i.instance_name // ' ' // p.spid
FROM v$process p, v$session s, v$instance i
WHERE p.addr = s.paddr AND
s.status = 'KILLED';

и окаймить его командами SQL*Plus SPOOL и START (а также отключить выдачу заголовка) и получившийся таким образом сценарий SQL*Plus запускать внешними средствами (cron, или программой at, или с помощью консоли Oracle Enterprise Manager) с желаемой регулярностью. Этим сценарием результат запроса выше будет поступать в файл в виде, примерно таком:

HOST orakill teacher 2056
HOST orakill teacher 1628
HOST orakill teacher 1604
HOST orakill teacher 1556
...

а потом командой START интерпретироваться.

Реализовать эту технику можно самостоятельно в качестве упражнения.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Oracle »
Написать редактору 
 Рекомендовать » Дата публикации: 07.10.2003 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Oracle Database Standard Edition 2 Named User Plus License
Oracle Database Personal Edition Named User Plus Software Update License & Support
Oracle Database Personal Edition Named User Plus License
Oracle Database Standard Edition 2 Processor License
TeeChart for .NET Standard Business Edition 2017 single license
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Компьютерные книги. Рецензии и отзывы
Каждый день новые драйверы для вашего компьютера!
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Сайт инструмент (1)
Я бывший программист пользовался 1 сайтом проверенным он мне действительно помог я блогодоря...
 
Где взять лицензионный ключ для AllFusion Process Modeler (BPwin) 7? (5)
Выручайте!!! где найти ключ, ужасно срочно нужна программа. заранее спасибо!
 
работа на дому! (5)
Доброго времени суток дорогие друзья. Многоуровневый маркетинг окончательно признан...
 
Регистрация на Oracle.com (4)
Сразу прошу прощения за тупой вопрос, но вчера зарегался на oracle.com (чтоб 9i слить себе...
 
Ищу кодера (2)
Добрый день! Ищу кодера который сможет сделать копии сайтов. Сколько будет стоить скопировать...
 
 
 



    
rambler's top100 Rambler's Top100