Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Конфигурация
Справочник по SQL
Часто задаваемые вопросы
Откатывает текущую транзакцию до указанной контрольной точки.
ROLLBACK [WORK | TRANSACTION] TO [SAVEPOINT]
savepoint_name
Эта команда откатывает все команды, выполненные после установки контрольной точки. Сама контрольная точка остаётся действительной и может быть использована для последующего отката при необходимости.
ROLLBACK TO SAVEPOINT неявно уничтожает все контрольные точки, созданные после указанной.
WORK
TRANSACTION
savepoint_name
Используйте команду RELEASE SAVEPOINT, чтобы удалить контрольную точку без отмены эффекта команд, выполненных после её создания.
Недопустимо указывать имя контрольной точки, которая ещё не была создана.
Курсоры проявляют определённое поведение, не связанное с транзакциями, по отношению к контрольным точкам. При откате до контрольной точки все курсоры, открытые внутри этой контрольной точки, закрываются. Если ранее открытый курсор был затронут командой FETCH в пределах контрольной точки, а затем выполняется откат до этой контрольной точки, курсор останется в позиции, установленной командой FETCH (то есть перемещение курсора, вызванное FETCH, не откатывается). Закрытие курсора не отменяется при откате. Однако если в ходе выполнения запроса курсора в пределах контрольной точки возникли побочные эффекты (например, вызовы изменяемых функций), то при откате такие побочные эффекты также будут отменены. Поскольку выполнение курсора привело к прерыванию транзакции, он переходит в состояние, при котором его нельзя выполнять повторно; хотя транзакцию можно восстановить с помощью ROLLBACK TO SAVEPOINT, сам курсор больше использоваться не может.
Отмена эффекта команд, выполненных после создания my_savepoint:
ROLLBACK TO SAVEPOINT my_savepoint;
Положение курсора не изменяется при откате до контрольной точки:
BEGIN;
DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;
SAVEPOINT foo;
FETCH 1 FROM foo;
column
----------
1
ROLLBACK TO SAVEPOINT foo;
FETCH 1 FROM foo;
column
----------
2
COMMIT;
Стандарт SQL требует указания ключевого слова SAVEPOINT, однако база данных YMatrix (как и Oracle) позволяет его опускать. В стандарте SQL после ROLLBACK разрешается использовать только ключевое слово WORK, а TRANSACTION как дополнительное слово не допускается. Кроме того, стандарт SQL предусматривает необязательный параметр AND [NO] CHAIN, который в настоящее время не поддерживается в базе данных YMatrix. Во всех остальных аспектах данная команда соответствует требованиям SQL.