Rollback (SQL)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

ROLLBACK (відкіт) — оператор мови SQL, який є протилежністю до оператора COMMIT. Він скасовує зміни внесені під час поточної явної чи неявної транзакції до початку транзакції або точки збереження (англ. savepoint). Відкочування важливі для збереження цілісності бази даних, бо вони є засобом застосування якого дозволяє повернути базу даних до попереднього стану, навіть після внесення помилкових редагувань. Також вони критичні для відновлення після падінь сервера бази даних; база даних повертається в узгоджений стан шляхом відкочення будь-якої транзакції, яка була активною на момент падіння.

Приклади[ред.ред. код]

Microsoft SQL Server

USE tempdb;
GO
CREATE TABLE TestTransactionTable ([VALUE] INT;)
GO
 
DECLARE @TName VARCHAR(20) = 'T_1';
 
--Наступний вираз починає іменовану транзакцію,
--вставляє два рядки і тоді відкочується
--ім'я транзакції задається через змінну @TName.
--Інший вираз поза межами іменованої транзакції вставляє два рядки.
--Запит виводить результат попередніх виразів.
 
BEGIN TRAN @TName
       INSERT INTO TestTransactionTable VALUES(1), (2);
ROLLBACK TRAN @TName;
 
INSERT INTO TestTransactionTable VALUES(3),(4);
 
SELECT [VALUE] FROM TestTransactionTable;
 
DROP TABLE TestTransactionTable;
 
--Results
--value
-------------
--3
--4

Oracle

-- DML вирази 
SAVEPOINT savepoint_name_1;
-- DML вирази
SAVEPOINT savepoint_name_2;
-- DML вирази
...
SAVEPOINT savepoint_name_n;
-- DML вирази
ROLLBACK TO SAVEPOINT savepoint_name_n

Каскадний відкіт[ред.ред. код]

Каскадний відкіт (англ. cascading rollback) трапляється в системах баз даних коли транзакція (T1) спричиняє помилку і треба відкотити зміни. Через невдачу T1, інші транзакції залежні від її дій, також треба відкотити. Тобто невдача однієї транзакції викликає відкіт багатьох.

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

T T1 T2
прочитати (A)
прочитати (B)
записати (A)
прочитати (A)
записати (A)
прочитати (A)

Якщо Т зазнає невдачі це призводить до відкочування T1 і T2. Це приклад каскадного відкоту.

Посилання[ред.ред. код]