SHARE в Oracle SQL — как управлять совместным доступом

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

Оператор SHARE в Oracle SQL используется в конструкции LOCK TABLE для задания типа блокировки при доступе к таблице. Он означает, что другие сессии могут читать таблицу, но не могут её изменять до тех пор, пока блокировка не будет снята.

Это важный механизм при управлении параллельным доступом к данным, особенно в сценариях аналитики и отчётности.


🔤 Написание

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

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

  • Гарантировать консистентное чтение данных

  • Предотвращение изменений таблицы во время анализа

  • Согласованные выборки в отчётах

  • Ручное управление блокировками

  • Подготовка к чтению с возможной модификацией после


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

1️⃣ Блокировка таблицы в режиме SHARE

sql
LOCK TABLE employees IN SHARE MODE;

Другие сессии могут читать, но не могут вставлять, обновлять или удалять строки.


2️⃣ Пример в транзакции

sql
BEGIN
LOCK TABLE employees IN SHARE MODE;
— безопасный SELECT
SELECT COUNT(*) FROM employees;— COMMIT снимает блокировку
COMMIT;
END;

3️⃣ Сравнение с SHARE UPDATE MODE

sql
LOCK TABLE employees IN SHARE UPDATE MODE;

Блокирует таблицу мягче, позволяет другим читать и даже вставлять строки, но не изменять те, что читаются.


4️⃣ Проверка заблокированных объектов

sql
SELECT object_name, session_id, lock_type
FROM dba_locks
WHERE mode_held = 'Share';

5️⃣ Попытка DML из другой сессии — ошибка блокировки

sql
UPDATE employees SET salary = salary + 100
WHERE department_id = 60;
-- если таблица заблокирована в SHARE MODE — будет ждать или выдаст ошибку

6️⃣ Блокировка нескольких таблиц

sql
LOCK TABLE employees, departments IN SHARE MODE;

7️⃣ Использование с VIEW

sql
LOCK TABLE my_view IN SHARE MODE;

Работает только если представление основано на одной таблице.


8️⃣ Совместное чтение в нескольких сессиях

Сессия 1:

sql
LOCK TABLE sales IN SHARE MODE;

Сессия 2:

sql
SELECT * FROM sales; -- работает
INSERT INTO sales ... -- будет ожидать

9️⃣ Блокировка с последующей вставкой (после COMMIT)

sql
LOCK TABLE logs IN SHARE MODE;
COMMIT;
INSERT INTO logs VALUES (...); -- теперь можно

🔟 Использование в процедурах

plsql
PROCEDURE lock_employee_table IS
BEGIN
LOCK TABLE employees IN SHARE MODE;
END;

🧩 Заключение

SHARE в LOCK TABLE — это способ обеспечить безопасный и стабильный доступ к данным без изменений со стороны других пользователей. Это особенно полезно в аналитических сценариях, где важна непротиворечивость выборки.

💡 Запомни:

  • SHARE MODE разрешает чтение, запрещает изменения

  • Используется только внутри транзакции (не забывай COMMIT или ROLLBACK)

  • Хорошо работает для отчётов, агрегаций, сложных выборок

  • Не заменяет SELECT ... FOR UPDATE, но служит в других целях


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

SESSION в Oracle SQL — как управлять текущими сессиями, проверять параметры и диагностировать работу БД


 

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