Rollback (SQL): відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][очікує на перевірку]
Вилучено вміст Додано вміст
м Відкинуто редагування PhillipsoniX (обговорення) до зробленого Vlasenko D
Мітка: Відкіт
Виправлено джерел: 2; позначено як недійсні: 0.) #IABot (v2.0.8.7
 
(Не показано 2 проміжні версії ще одного користувача)
Рядок 1: Рядок 1:
{{Otheruses|Відкат}}
{{Otheruses|Відкат}}
'''ROLLBACK (відкат)''' — оператор мови [[SQL]], який є протилежністю до оператора [[COMMIT (SQL)|COMMIT]]. Він скасовує зміни внесені під час поточної явної чи неявної [[Транзакція|транзакції]] до початку транзакції або {{Нп|savepoint|точки збереження||}} ({{lang-en|savepoint}}). Відкочування важливі для збереження [[Цілісність інформації|цілісності]] бази даних, бо вони є засобом застосування якого дозволяє повернути базу даних до попереднього стану, навіть після внесення помилкових редагувань. Також вони критичні для відновлення після падінь сервера бази даних; база даних повертається в узгоджений стан шляхом відкочення будь-якої транзакції, яка була активною на момент падіння.
'''ROLLBACK (відкат)''' — оператор мови [[SQL]], який є протилежністю до оператора [[COMMIT (SQL)|COMMIT]]. Він скасовує зміни внесені під час поточної явної чи неявної [[Транзакція|транзакції]] до початку транзакції або |точки збереження ({{lang-en|savepoint}}). Відкочування важливі для збереження [[Цілісність інформації|цілісності]] бази даних, бо вони є засобом застосування якого дозволяє повернути базу даних до попереднього стану, навіть після внесення помилкових редагувань. Також вони критичні для відновлення після падінь сервера бази даних; база даних повертається в узгоджений стан шляхом відкочення будь-якої транзакції, яка була активною на момент падіння.


== Приклади ==
== Приклади ==
Рядок 85: Рядок 85:


== Посилання ==
== Посилання ==
* [http://msdn.microsoft.com/en-us/library/ms181299.aspx ROLLBACK TRANSACTION (Transact-SQL)] {{ref-en}}
* [http://msdn.microsoft.com/en-us/library/ms181299.aspx ROLLBACK TRANSACTION (Transact-SQL)] {{ref-en}}
* [http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqloperations.htm#CJACGAFD Виконання SQL операцій з PL/SQL. Використання ROLLBACK] {{ref-en}}
* [http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/sqloperations.htm#CJACGAFD Виконання SQL операцій з PL/SQL. Використання ROLLBACK] {{ref-en}}


== Див. також ==
== Див. також ==
* [[Міграція бази даних]]
* [[Міграція бази даних]]
* [[Точка збереження]]
* {{Нп|Savepoint|||}}


{{СКБД}}
{{СКБД}}

Поточна версія на 20:30, 12 травня 2022

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. Це приклад каскадного відкоту.

Посилання

[ред. | ред. код]

Див. також

[ред. | ред. код]