Усеченная таблица в транзакции - PullRequest
53 голосов
/ 06 октября 2009

Может ли команда SQL "таблица усечений" использоваться в транзакции? Я создаю приложение, и моя таблица содержит массу записей. Я хочу удалить все записи, но в случае сбоя приложения я должен был откатить транзакцию. Удаление каждой записи занимает очень много времени. Мне интересно, могу ли я использовать таблицу усечений, могу ли я откатить транзакцию и вернуть свои данные в случае сбоя. Я понимаю, что усеченная таблица не записывает каждое удаление в журнал транзакций, но мне интересно, если она записывает освобождение страницы в журнал, чтобы откат работал

Ответы [ 2 ]

50 голосов
/ 06 октября 2009

В SQL Server вы можете откатить TRUNCATE из транзакции. Как вы упомянули, он записывает освобождение страницы в журнал.

16 голосов
/ 06 октября 2009

В Oracle TRUNCATE TABLE - это оператор DDL, который нельзя использовать в транзакции (или, точнее, нельзя откатить). AFAIK, если при выполнении оператора выполняется транзакция, транзакция фиксируется, а затем выполняется TRUNCATE, и ее нельзя отменить.

В Informix поведение TRUNCATE немного отличается; вы можете использовать TRUNCATE в транзакции, но после этого допустимы только операторы COMMIT и ROLLBACK.

Другие СУБД, вероятно, имеют свои идиосинкразические интерпретации поведения TRUNCATE TABLE.

...