EXCLUSIVE в Oracle SQL — как ограничивать доступ

🟢 EXCLUSIVE в Oracle SQL. Введение

EXCLUSIVE в Oracle SQL применяется для управления блокировками доступа к объектам, чаще всего — таблицам. Он используется в комбинации с оператором LOCK TABLE, чтобы гарантировать, что только один пользователь может изменять данные в таблице в данный момент.

Это важно при:

  • выполнении критических операций

  • избежании гонок данных

  • синхронизации транзакций


🔤 Написание

sql
LOCK TABLE имя_таблицы IN EXCLUSIVE MODE;

Также может использоваться EXCLUSIVE MODE NOWAIT — если не нужно ждать блокировку.


🔄 Где используется

  • Блокировка таблицы для одного процесса

  • Обеспечение целостности при пакетной обработке

  • Изоляция транзакций

  • Защита от одновременного изменения данных


🧪 10 Примеров использования EXCLUSIVE

1️⃣ Базовая блокировка таблицы

sql
LOCK TABLE employees IN EXCLUSIVE MODE;

2️⃣ С блокировкой без ожидания

sql
LOCK TABLE orders IN EXCLUSIVE MODE NOWAIT;

3️⃣ PL/SQL блок с EXCLUSIVE LOCK

plsql
BEGIN
LOCK TABLE inventory IN EXCLUSIVE MODE;
UPDATE inventory SET quantity = quantity - 1 WHERE item_id = 100;
COMMIT;
END;

4️⃣ Обработка ошибок при NOWAIT

plsql
BEGIN
LOCK TABLE invoices IN EXCLUSIVE MODE NOWAIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Таблица уже заблокирована');
END;

5️⃣ Сравнение SHARE vs EXCLUSIVE

sql
LOCK TABLE config IN SHARE MODE; -- разрешает чтение
LOCK TABLE config IN EXCLUSIVE MODE; -- полная блокировка

6️⃣ Обеспечение последовательного доступа

plsql
-- Ожидаем разблокировки
LOCK TABLE tasks IN EXCLUSIVE MODE;
-- Обновляем запись
UPDATE tasks SET status = 'processing' WHERE id = 10;

7️⃣ Транзакция с EXCLUSIVE и откатом

plsql
BEGIN
LOCK TABLE clients IN EXCLUSIVE MODE;
DELETE FROM clients WHERE inactive = 'Y';
ROLLBACK;
END;

8️⃣ Пример использования в скрипте миграции

sql
-- Зафиксировать структуру таблицы на время изменения
LOCK TABLE data_archive IN EXCLUSIVE MODE;
-- Добавление индекса
CREATE INDEX idx_data ON data_archive(date_column);

9️⃣ Защита от параллельной вставки

sql
LOCK TABLE logs IN EXCLUSIVE MODE;
INSERT INTO logs (id, msg) VALUES (1, 'запись');

🔟 С NOWAIT в скриптах

sql
LOCK TABLE statistics IN EXCLUSIVE MODE NOWAIT;
-- Если не получится — вылетит ORA-00054

🧩 Заключение

EXCLUSIVE — важный инструмент в арсенале администратора и разработчика Oracle. Он помогает контролировать доступ к таблице и предотвращает нежелательные параллельные изменения данных.

💡 Запомни:

  • EXCLUSIVE MODE блокирует и чтение, и запись

  • Используй NOWAIT, если не хочешь ждать

  • Требует прав и может быть чувствителен к конкуренции


🔜 Следующая статья:

EXCEPTION в Oracle SQL — как обрабатывать ошибки


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии