Июн 062011
 

Я уже писал, как выявить блокирующие сессии и сгенерировать команды на их завершение. Проблема в том, что команда KILL SESSION не всегда быстро отрабатывает. Гораздо быстрее (особенно, если сессий нужно завершить много) будет убивать серверный процесс, соответствующий этой сессии, средствами ОС, после чего фоновый процесс PMON удалит из памяти экземпляра БД данные об убитой сессии, снимет все блокировки и откатит транзакции.

Итак, запрос:

SELECT 'kill -9 ' || p.spid, s.* 
FROM v$session s, v$process p
WHERE
	s.PADDR = p.ADDR AND
	s.sid IN (SELECT DISTINCT session_id 
			  FROM dba_ddl_locks d
			  WHERE  d.name = 'DBMS_LOCK' AND
			  d.owner = 'SYS'
		 )
ORDER BY osuser;

Удобно при снятии library cache pin блокировок при инвалидации пакета или другого объекта.
UPD. В коде запроса была гадкая опечатка. Прошу прощения.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)