|
|
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Объяснял новому сотруднику основы изоляции данных(предложил прочитать Oracle Database Concepts)и столкнулся разночтением практики и теории: в разделе Locks and Foreign Keys говорится, что the database acquires a full table lock on employees during the primary key modification of department 60. This lock enables other sessions to query but not update the employees table. На деле такого не происходит, так как сразу срабатывает constraint и не дает в родительской изменять РК: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Причем, соответственно, ни в gv$locked_object, ни в dba_lock блокировок объектов/сессий нет. Собственно, хочется понять что хотели сказать в мане) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 07:18 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Незнайка_блокировок объектов/сессий нет.Табличная блокировка накладывается только на время проверки. Более того у тебя всё равно statement level rollback. Чтобы прослезиться: в первой сессии одному папе делаешь дитя; во второй сессии пытаешься убить другого папу; ну в третей пытаешься сделать дитя третьему папе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 08:01 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Табличная блокировка накладывается только на время проверки. Elic, получается, подтвердить это возможно тока трейсом сессии?! Смущает, что в данном мане не сделали оговорку(Ноту) на констрейнты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 08:46 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Незнайка_получается, подтвердить это возможно тока трейсом сессии?!И что ты там надеешься узреть? Воспроизведи описанный мной сценарий - и увидишь. Незнайка_Смущает, что в данном мане не сделали оговорку(Ноту) на констрейнты.Ты подслеповат? Непосредственно там же:Locking Mechanisms with Unindexed Foreign KeyThe table lock on employees releases immediately after the primary key modification on the departments table completes. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 08:55 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
ElicНезнайка_Смущает, что в данном мане не сделали оговорку(Ноту) на констрейнты.Ты подслеповат? Непосредственно там же:Locking Mechanisms with Unindexed Foreign KeyThe table lock on employees releases immediately after the primary key modification on the departments table completes. Elic ...я имел ввиду constraint, о чем ты говоришь - это все же касаемо lock и его снятия. Как я показал в примере- до лока дело не доходит(на первый взгляд)) - срабатывает constraint. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 09:14 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Незнайка_Как я показал в примере- до лока дело не доходит(на первый взгляд)) - срабатывает constraint.Это лишь твоё некомпетентное мнение. Чтобы убедиться, стань четвертой сессией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 09:33 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
ElicВоспроизведи описанный мной сценарий - и увидишь. Воспроизвел- результат "интересный": Код: plsql 1. 2. 3. 4. 5. OBJECT_NAME LOCKED_MODET1 3T_CHILD 3 Хотя: Oracle Database ConceptsDML on a child table does not acquire a table lock on the parent table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 11:58 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Незнайка_Воспроизвел- результат "интересный":Ты сделал что-то не то, потом куда-то не туда не так посмотрел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 12:33 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
ElicНезнайка_Воспроизвел- результат "интересный":Ты сделал что-то не то, потом куда-то не туда не так посмотрел. Выполнил ещё раз на "изолированной" БД- результат подтвердился. Если есть возможность, воспроизведи, код взят без изменений из поста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 12:49 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Незнайка_основы изоляции данныхА что это? Незнайка_Причем, соответственно, ни в gv$locked_object, ни в dba_lock блокировок объектов/сессий нет.Блокировка накладывается только на время проверки, а на древних версиях накладывалась до окончания транзакции. Поведение было изменено вроде в девятке. Про это есть в книге Кайта в разделе про "неиндексированные внешние ключи". Там вообще неплохая книга, почитайте перед тем как учить других. Если интересует копнуть глубже - event 10704. Вот посмотри как умный человек смотрит что происходит: Foreign Keys and Library Cache Locks . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 12:58 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop Про это есть в книге Кайта в разделе про "неиндексированные внешние ключи". Там вообще неплохая книга, почитайте перед тем как учить других. Читал, предпочитаю первоисточник. Я ни кого не учу, делюсь полученным результатом, разбираюсь в чем я заблуждаюсь, для этого привожу исполняемый код. За ссылку спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 13:13 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Поведение менялось несколько раз TM-блокировка накладывается в RX режиме (и держится, препятствуя изменению структуры), но на сам момент проверки пытается захватить в режиме SRX (или S?) В 9-ке, насколько помню, блокировочка была RS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 13:30 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Незнайка_dbms_photoshop Про это есть в книге Кайта в разделе про "неиндексированные внешние ключи". Там вообще неплохая книга, почитайте перед тем как учить других. Читал, предпочитаю первоисточник. Я ни кого не учу, делюсь полученным результатом, разбираюсь в чем я заблуждаюсь, для этого привожу исполняемый код. За ссылку спасибо.Я бы рекомендовал последовательность. 1. Первоисточник. 2. Книга Кайта, блог Льюиса для расширения кругозора. 3. Первоисточники для деталей, если интересно. Например если ввести в гугл "jonathan lewis oracle locking", то можно найти много интересного. PS. "Объяснял новому сотруднику" = "Я ни кого не учу"? Ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 13:38 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровПоведение менялось несколько раз TM-блокировка накладывается в RX режиме (и держится, препятствуя изменению структуры), но на сам момент проверки пытается захватить в режиме SRX (или S?) В 9-ке, насколько помню, блокировочка была RS Из представления v$locked_object видно, что блокировка SX, интересно почему она есть и на parent table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 13:43 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров https://docs.oracle.com/cd/E11882_01/server.112/e40540/consist.htm#BABDDFHB Вячеслав, ещё раз прочитал, не понял, что хотели донести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 14:01 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Что SX это и есть RX Как поймать, какая блокировка будет на момент проверки, надеюсь, не надо объяснять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2017, 14:04 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровЧто SX это и есть RX Как поймать, какая блокировка будет на момент проверки, надеюсь, не надо объяснять? Вячеслав, авторTherefore, SX locks allow multiple transactions to obtain simultaneous SX and subshare table locks for the same table. Что не так я понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 05:28 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Не знаю, что ты неправильно понял Изменение (INSERT/UPDATE/DELETE) дочерней или родительской таблицы накладывает RX (другое название SX) блокировку на обе таблицы, чтобы предотвратить изменение структуры обеих таблиц. При модификации родительской таблицы (UPDATE/DELETE) при неиндексированном внешнем ключе на время операции пытается еще дополнительно получить S (shared) блокировку на дочерней таблице. Что вызовет ожидание, если кто-то уже изменил родительскую или дочернюю таблицу (повесил RX блокировку на дочернюю таблицу) При вставках в родительскую или при индексированном ключе на дочернюю таблицу вешается только RX, что совместимо с обновлениями, сделанными в других сессиях. Это поведение сейчас в 11g, оно несколько раз менялось в деталях и не всегда точно отражалось в документации. В 10g (и раньше, непомню точно, возможно во всех предыдущих версиях) при изменении дочерней на родительскую таблицу накладывалась менее ограничивающая блокировка RS (SS), что так же предохраняла от изменения структуры, но позволяла, например создать еще один внешний ключ на эту же родительскую таблицу (Share совместима с Row Share, а вот с Row eXclusive уже нет). С 11g при изменении в какой-либо дочерней таблице нельзя поднять еще один внешний ключ на эту же родительскую таблицу С секционированными таблицами там еще блокировки вешаются на секции и там уже SRX появляются, если склероз не изменяет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 07:27 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровНе знаю, что ты неправильно понял Изменение (INSERT/UPDATE/DELETE) дочерней или родительской таблицы накладывает RX (другое название SX) блокировку на обе таблицы, чтобы предотвратить изменение структуры обеих таблиц. Вячеслав, о чем вы говорите, это понятно из опыта(все равно спасибо, за детализацию), меня смутило, что я не нашел документального явного объяснения этого в мане...Oracle Database Concepts. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 14:01 |
|
||
|
Lock child table- Почему?
|
|||
|---|---|---|---|
|
#18+
Я так понимаю, у них в документации сделана попытка упростить термины Типо TM-блокировки Row Share / Row eXclusive -- RS/RX (SS/SX) не считаются FULL TABLE LOCK, в отличии от S / SRX (SSX) / X Хужее, что подобная тенденция и на MOS: Текущая "Foreign Keys, Indexes and Locking (Doc ID 1945574.1)" тоже отсылает в доку и стыдливо умалчивает о Row TM блокировках И только отсылка оттуда же к древней "Documentation Correction to 9.2.0 Foreign Key Constraint Locking Behaviour (Doc ID 223303.1)" немного проясняет:...no table locks of any kind are acquired... There are errors in this information. Starting in version 9.2.0, a Row-SS lock is taken on the parent table for any DML issued against the child table... Further, there will be a ROW-SS lock taken on the child table for any INSERT/DELETE/UPDATE issued against the parent table when an index on the foreign key column of the child table is defined. There will be a ROW-SX lock taken on the child table for an DELETE issued against the parent table when no index on the foreign key column of the child table is defined and a delete cascade constraint is defined. ... This change in behaviour was introduced in version 9.2.0 ... This new locking behaviour is an expected behaviour for the Oracle code. As only shared locks are involved, it does not prevent DML from being issued against either the child or parent tables. It will prevent operations that require an exclusive table level lock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2017, 15:23 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39458560&tid=1885872]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
199ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 569ms |

| 0 / 0 |
