вторник, 19 февраля 2008 г.

Блокировки ORACLE

При создании транзакции Oracle выделяет блокировку типа TX, которую процесс пихает в блоки данных.
Информация для блокировки: Номер сегмента отката, слот сегмента отката и число возвратов можно посмотреть в таблице v$transaction
select XIDUSN, XIDSLOT, XIDSQN from v$transaction
При изменении Oracle ставит на таблицы блокировки TM.

Информацию о блокировках можно узнать из представлений:

V$LOCK: Информация о блокировках и ресурсах. Не включает блокировки DDL. Для TX в поле id1 хранится XIDUSN - trunc(id1/power(2,16)) и XIDSLOT - bitand (id1,power(2,16)-1) в id2 хранится XIDSQN. Для блокировок TM в id1 хранится идентификатор объекта (all_objects).

Возможные режимы блокировок:
1 (null),
2 (row share) разделяемая блокировка строки (RS) при выполнении select for update,
3 (row exclusive) монопольная блокировка строки (RX) при выполнении операторов insert, delete, update,
4 (share),
5 (share row exclusive),
6 (exclusive)

DBA_DDL_LOCKS: Все блокировки DDL, удерживаемые в базе данных, и все запросы, ожидающие блокировок DDL

DBA_DML_LOCKS: Все блокировки DML, удерживаемые в базе данных, и все запросы, ожидающие блокировок DML

DBA_LOCKS: Все блокировки или замки, удерживаемые в базе данных, и все запросы,ожидающие блокировок или замков. Этот запрос включает блокировки DML и блокировки DDL.

Комментариев нет: