ORACLE запирает в следующих режимах:
0: нет
. 1: Null Null
2: Row-S общего ряда (RS): разделяемая блокировка таблицы, Sub Share
3:. Роу-строка X-эксклюзив (RX): используется для изменения линии, Суб эксклюзивным
. 4: доля общая блокировка (S): стоп другие операции DML, доля
5:. S / строка-Х-линия общего доступа эксклюзивные (SRX): остановка другой операции , сделки, обмен / Суб эксклюзивным .
6: эксклюзивные эксклюзивные (Х): независимый доступ использование, эксклюзивные
Тип 1.oracle, может быть запрошен v $ lock_type в соответствии с типом, являются два наиболее мы обычно контакт
Код выглядит следующим образом | Скопировать код |
выберите * из V $ lock_type где типа в ( 'ТМ', 'TX') |
Смотрите описание, вероятно, может узнать другие виды блокировок доступа к информации Синхронизировать .tm является объект, используемый, ТХ и транзакций, связанных с.
3. Для того, чтобы знать, что есть два понятия:
. (1) , чтобы зафиксировать данные блокировки, то есть на уровне строк замок, только один из: эксклюзивной блокировки исключительной (ряду)
(2) блокировки замка на столе, то есть блокировки метаданных метаданных блокировки (таблица), в общей сложности пять. виды:
РС 2: Ряд акции
3 RX:. Ряд эксклюзив
. 4 S: Share
. 5 SRX: Share Row эксклюзивные
6 Х-:. Exclusive4 Понятия оракул интерактивной документации.
Из этой таблицы можно найти по крайней мере, две вещи. Во-первых, каждая база данных операция соответствует какой вид замка (обратитесь к середине строки), а второй между каждым замком, независимо от того, если вы столкнулись после того, как конфликт, так называемый конфликт, является ли причиной текущих операций базы данных баран жить, где Y *, сказал, что если две операции фиксируются на одной и той же линии, что будет конфликт, а затем после завершения предварительной операции будет ждать завершения операции, в противном случае был бы протаранил, если не на одной линии, так что это не конфликт, после операции, не дожидаясь примера, чтобы проиллюстрировать: предположим, в настоящее время действует как: записи для ид = 1 является обновление, в то время как операция B. чтобы: идентификатор записи на = 2 удаляется, в соответствии с описанием таблицы, при работе в замках а-уровня ТМ RX, TX уровень только один из X, B будет находиться в ТМ замки уровня RX, уровень TX только один X, и в соответствии с таблицей показывает, когда RX RX встречается, если два действующих необыкновенную запись, так что это будет не конфликт, так что два AB будет работать в соответствии с их первым добавить замок TM, в сочетании с замком TX, то беспрепятственное осуществление своих операций, не будет вмешиваться в прямом эфире. Если операция транспонирования Индентификационный B 1, то две операции, записанные для одной и той же записи, блокировка ТМ будет показывать конфликт, поэтому операция будет ждать операции A B завершается представление (т.е. TX Блокировка отпускается после того, как), в затем генерирует соответствующий замок TX и TM блокировки еще раз, чтобы завершить операцию, в противном случае она всегда будет оставаться баран, Техас снятие блокировки ждать.
Методы динамических представлений производительности:
выберите * из V $ lock_type где типа в ( 'ТМ', 'TX');
Код выглядит следующим образом | Скопировать код |
выберите * от v $ замка; выберите * от v $ сделки; |
Выделите то, что v $ вида блокировки:
Для того, чтобы установить сцену: в записи сеанса A в таблице для обновления после обновления не представляется, чтобы удалить ту же запись в таблицах в сессии B
Код выглядит следующим образом | Скопировать код |
Сессия A: SQL> создать таблицу ТТТ как выберите * из DBA_OBJECTS где ROWNUM <= 10; |
Таблица была создана.
Код выглядит следующим образом | Скопировать код |
SQL> обновление ТТТ набор object_name = 'TEST', где object_id = 20; |
1 линия была обновлена.
Код выглядит следующим образом | Скопировать код |
SQL> Сессия B: |
В это время, поскольку не совершал, поэтому B был бы протаранил, а затем открыть реальный сеанс C, связанный с учетом $ блокировки запросов об
Код выглядит следующим образом | Скопировать код |
SQL> SELECT * FROM v $ замка, где введите ( 'ТМ', 'TX'); АДРЕСА KADDR SID TY ID1 ID2 LMODE ЗАПРОС CTIME BLOCK |
Вы можете ясно видеть два SID SID сеанса генерируется 140 для блокировки, что приводит к TX (TM) и замок, режим блокировки ТМ (LMODE) = 3, (3 к RX :. Похожее грести эксклюзивную таблицу управления и когда операция обновления, в результате чего замок RX), для SID сеанса 147 также производит ТМ и блокировку TX, режим блокировки ТМ (LMODE) = 3 (от 3 до RX: контроль соответствия строки эксклюзивных и таблиц когда операция удаление, генерировать блокировки RX), в то время как режим TX замок (LMODE) = 0, представители ждет замок. v определение $ lock_type выше, мы можем видеть, замок типа ТМ, ID1 представляет собой object_id, DBA_OBJECTS запроса может легко сделать ТТТ заблокирован объект OBJ. BLOCK от последнего (блок не представляет собой блок, но и от имени обструкции) = 1 также можно видеть, SID = 140 в после сеанса TX замка после того, как сгенерирован эта запись операция модификации также найдена, поэтому BLOCK + 1, представленного блока других операциями во время этой операции записи.
В этом случае запрос select * from v $ сделки, вид, может быть связано с информацией, полученной
Опишем V $ lock_type из замка TX, может быть в курсе TX и связанных с этим вопросов. Поэтому, прежде чем вы можете просмотреть информацию о v $ блокировки TX замка, вы можете увидеть значение величины v $ транзакций ADDR то же самое. Даже ID1 может быть вычислена из значения, какой сегмент заблокирован: удаление TX и ID1 к модулю 2 в степени 16, получить информацию:
Код выглядит следующим образом | Скопировать код |
SQL> выберите 393242/65536, мод (393242, 65536) от двойного; 393242/65536 MOD (393242,65536) |
Вы можете открыть для себя волшебный и V $ сделки на XIDUSN и XIDSLOT соответствуют!
6. Наконец, добавьте операцию для создания индекса будет сгенерирован, когда операция блокировки:
Первая таблица ТТТ вставки много данных
Код выглядит следующим образом | Скопировать код |
SQL> вставить в ТТТ выбрать * из DBA_OBJECTS; SQL> фиксации; |
Отправить завершена.
Код выглядит следующим образом | Скопировать код |
SQL> SELECT COUNT (*) из ТТТ; COUNT (*) |
Затем повторно создать индекс на столе для изменения
Код выглядит следующим образом | Скопировать код |
SQL> создать индекс idx_ttt на ТТТ (object_id); |
Создание индекса, в то время как таблицы $ блокировки запросов об
Может быть найдены запертыми в генерирующем ТМЕ 2 создаст индекс, категории 3 и 4 замка, соответственно, эти два запроса мы были заперты TM какого объекта:
Найдено lmode = object_id от 4 до 55160, соответствующий объекту является таблица ТТТ, LMODE = 4, соответствующий результату запроса является S (TM), блокировка
резюме
Чем выше число, тем более, чем выше уровень замка, влияние операции.
1级锁有:Select,有时会在v$locked_object出现。
2级锁有:Select for update,Lock For Update,Lock Row Share
select for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update操作。
3级锁有:Insert, Update, Delete, Lock Row Exclusive
没有commit之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。
4级锁有:Create Index, Lock Share
locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。
00054, 00000, "resource busy and acquire with NOWAIT specified"
// *Cause: Resource interested is busy.
// *Action: Retry if necessary.
5级锁有:Lock Share Row Exclusive
具体来讲有主外键约束时update / delete ... ; 可能会产生4,5的锁。
6级锁有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive