В механическом смысле COMMIT совершает транзакцию.То есть транзакция - это все действие (один или несколько операторов DML), которое происходит между двумя операторами COMMIT (или ROLLBACK).
В Oracle оператор DDL является самостоятельной транзакцией просто потому, что неявный COMMIT выдается перед выполнением оператора и снова после.TRUNCATE - это команда DDL, поэтому для нее не требуется явная фиксация, поскольку при ее вызове выполняется неявная фиксация.
С точки зрения проектирования системы транзакция является бизнес-единицей работы.Он может состоять из одного оператора DML или нескольких из них.Это не имеет значения: только полные транзакции требуют COMMIT.Буквально не имеет смысла выдавать COMMIT до тех пор, пока мы не завершим целую бизнес-единицу работы.
Это ключевая концепция.COMMITs не просто снимают блокировки.В Oracle они также выпускают защелки, такие как список заинтересованных транзакций.Это оказывает влияние из-за модели согласованности чтения Oracle.Исключения, такие как ORA-01555: SNAPSHOT TOO OLD
или ORA-01002: FETCH OUT OF SEQUENCE
, происходят из-за неправильных фиксаций.Следовательно, для наших транзакций крайне важно удерживать блокировки так долго, как они в них нуждаются.