ROLLBACK в Oracle SQL — как защититься от ошибок в транзакциях

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

В процессе работы с данными могут возникнуть ошибки, сбои или неправильные действия. Что делать, если вы случайно обновили или удалили данные до COMMIT? 💡 Ответ — использовать ROLLBACK, чтобы отменить все несохранённые изменения и вернуть БД в исходное состояние.


🔤 Написание

sql
ROLLBACK;

Откатывает текущую незавершённую транзакцию.


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

  • При ошибках в логике обновления данных

  • Для безопасного тестирования

  • В блоках обработки ошибок

  • Вместе с SAVEPOINT для частичного отката

  • При ручной работе в SQL Developer/TOAD


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

1️⃣ Обычное применение

sql

UPDATE employees SET salary = salary * 2 WHERE department_id = 20;

ROLLBACK;

Операция будет отменена, как будто её не было.


2️⃣ Откат после нескольких действий

sql
INSERT INTO users VALUES (100, 'Ivan');
UPDATE orders SET status = 'cancelled' WHERE order_id = 1001;
ROLLBACK;

Оба действия отменятся.


3️⃣ Проверка до и после COMMIT

sql
-- Выполнено:
UPDATE products SET price = 999;
— Пока не COMMIT — можно:
ROLLBACK;— После COMMIT — уже нельзя.

Откат работает, пока нет COMMIT.


4️⃣ Внутри PL/SQL блока

sql
BEGIN
DELETE FROM logs WHERE log_date < SYSDATE - 90;
IF SQL%ROWCOUNT > 1000 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END;

Автоматическая проверка и решение: откат или фиксация.


5️⃣ Откат при ошибке (EXCEPTION блок)

sql
BEGIN
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- ошибка:
UPDATE accounts SET balance = balance + 'oops';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE(‘Ошибка! Откат.’);
END;

Защита от сбоев при ошибке выполнения.


6️⃣ Использование SAVEPOINT с частичным откатом

sql

SAVEPOINT step1;

DELETE FROM temp_data;

ROLLBACK TO step1;

Вернулись к сохранённой точке, не откатывая всё.


7️⃣ Откат в цикле

sql
BEGIN
FOR r IN (SELECT * FROM test_data) LOOP
UPDATE test_data SET flag = 'X' WHERE id = r.id;
IF r.id > 10 THEN
ROLLBACK;
EXIT;
END IF;
END LOOP;
END;

Операции до ROLLBACK будут отменены.


8️⃣ Проверка состояния после Роллбэк

sql
-- В сессии 1:
UPDATE customers SET status = 'inactive' WHERE id = 5;
— SELECT показывает новое значение
— После:
ROLLBACK;— Теперь снова старое значение

Изменения были временными.


9️⃣ Работа в интерфейсах (SQL Developer)

sql
-- Сделал INSERT вручную
-- Нажал кнопку "Rollback" — строка исчезла
— Или:
— Нажал «Commit» — и она осталась навсегда

Поведение транзакций в GUI.


🔟 В процедурах (предпочтительно вручную)

sql
-- В процедурах рекомендуется позволить вызывающему коду решать:
-- выполнять COMMIT или ROLLBACK
-- Но при критической ошибке можно:
ROLLBACK;

Откат, если логика требует отмены действий.


🧩 Заключение

ROLLBACK — это жизненно важный оператор для контроля безопасности данных. Он позволяет отменить нежелательные или ошибочные изменения, пока они не были зафиксированы.
Используй его, чтобы защитить свою базу от потерь и некорректных операций.

💡 Основное:

  • Работает до COMMIT

  • Отменяет всю текущую транзакцию

  • Совместим с SAVEPOINT

  • Используется в блоках ошибок и при ручном управлении


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

COMMIT в Oracle SQL — как управлять транзакциями правильно


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