Чому Oracle не має блокування?


14

У MS SQL Server nolockможна використовувати за призначенням.

Чому ми не можемо використовувати його в Oracle і plsql?

Відповіді:


21

SQL Server зазвичай використовує іншу стратегію блокування для Oracle. Стратегія за замовчуванням, використовувана SQL Server, означає, що вибір рядків призводить до того, що на них розміщуються блоки читання (на рядках, сторінках або в цілій таблиці) *. Отже NOLOCK, іноді є корисним пунктом - хоча загальна порада ніколи не використовувати його, оскільки це змінює семантику рівнів ізоляції і може спричинити непослідовні результати у виведенні запитів.

* (Примітка: це за замовчуванням. Якщо SNAPSHOTвибрано ізоляцію, поведінка відрізняється, і читачі не блокують авторів.)

В Oracle процес читання ніколи не блокує процес запису. Далі наведено уривок із « Концепції бази даних Oracle 11g Release 2 ». Я закликаю вас поглянути, якщо вас цікавить, як цим керується Oracle.

Паралельність та послідовність даних

Короткий зміст блокувальної поведінки

База даних підтримує кілька різних типів замків, залежно від операції, яка придбала замок. Загалом, база даних використовує два типи блокування: ексклюзивні блокування та блоки загального користування. На ресурсі, такому як рядок або таблиця, можна отримати лише один ексклюзивний замок, але на одному ресурсі можна отримати багато блокування спільного доступу.

Замки впливають на взаємодію читачів і письменників. Читач - це запит ресурсу, тоді як автор - це заява, що модифікує ресурс. Наступні правила узагальнюють поведінку блокування Oracle Database для читачів та письменників:

• Рядок блокується лише тоді, коли їх змінив автор.

Коли оператор оновлює один рядок, транзакція набуває блокування лише для цього рядка. Блокуючи дані таблиці на рівні рядків, база даних мінімізує суперечки для одних і тих же даних. За звичайних обставин 1 база даних не збільшує блокування рядків до рівня блоку або таблиці.

• Письменник ряду блокує одночасного письменника того ж ряду.

Якщо одна транзакція модифікує рядок, то блокування рядків не дозволяє одночасно змінювати один і той же ряд транзакції.

• Читач ніколи не блокує письменника.

Оскільки читач рядка не блокує його, автор може змінити цей рядок. Єдиним винятком є ​​оператор SELECT ... FOR UPDATE, який є спеціальним типом оператора SELECT, який блокує ряд, який він читає.

• Письменник ніколи не блокує читача.

Коли рядок змінюється автором, база даних використовує скасування даних, щоб забезпечити читачам послідовний вигляд рядка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.