ОРАКУЛ фундамент замка оракула (режим блокировки оракула) Подробное

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:
SQL> удалить из ТТТ , где object_id = 20;

В это время, поскольку не совершал, поэтому B был бы протаранил, а затем открыть реальный сеанс C, связанный с учетом $ блокировки запросов об

 

 Код выглядит следующим образом Скопировать код

SQL> SELECT * FROM v $ замка, где введите ( 'ТМ', 'TX');

АДРЕСА KADDR SID TY ID1 ID2 LMODE ЗАПРОС CTIME BLOCK
-------- -------- ---------- - ---------- - -------- ---------- ---------- ---------- ----------
CA4244F4 CA424508 147 ТХ 393242 563 0 0 6 270
C8E7F704 C8E7F71C 140 ТМ 55156 0 3 0 301 0
C8E7F7C8 C8E7F7E0 147 ТМ 55156 0 3 0 270 0
C8ED3C38 C8ED3D54 140 TX 393242 563 6 0 301 1

Вы можете ясно видеть два 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)
------------ -----------------
  6.00039673 26

Вы можете открыть для себя волшебный и V $ сделки на XIDUSN и XIDSLOT соответствуют!

6. Наконец, добавьте операцию для создания индекса будет сгенерирован, когда операция блокировки:


Первая таблица ТТТ вставки много данных

 Код выглядит следующим образом Скопировать код
SQL> вставить в ТТТ выбрать * из DBA_OBJECTS;
SQL> фиксации;

Отправить завершена.

 Код выглядит следующим образом Скопировать код

SQL> SELECT COUNT (*) из ТТТ;

  COUNT (*)
----------
   1739045

Затем повторно создать индекс на столе для изменения

 Код выглядит следующим образом Скопировать код
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

 

рекомендация

отwww.cnblogs.com/yaoyangding/p/12013938.html