В данной главе мы рассмотрели множество аспектов управления транзакциями в Oracle. Транзакции — одно из главных средств, отличающих базу данных от файловой системы. Понимание их работы и правильное их применение необходимо для корректной реализации приложений в любой базе данных. Очень важно понимание того, что в Oracle любой оператор является атомарным (включая все побочные эффекты от этого), и что атомарность распространяется и на хранимые процедуры. Мы видели, как помещение в блок PL/SQL обработчика исключений WHEN OTHERS может радикально повлиять на то, какие изменения произойдут в базе данных. Для разработчиков базы данных четкое понимание работы транзакций имеет важнейшее значение.
Мы рассмотрели некоторые сложные взаимодействия между ограничениями целостности (уникальные ключи, проверочные ограничения и тому подобные) и транзакциями в Oracle. Мы обсудили, как обычно Oracle обрабатывает ограничения целостности немедленно после выполнения операторов, а затем — как можно отложить верификацию ограничений до конца транзакции, когда это необходимо. Это средство является ключевым в реализации сложных многотабличных обновлений, когда модифицируемые таблицы зависят друг от друга — примером служило каскадное обновление.
Мы проанализировали некоторые вредные привычки разработчиков, связанные с транзакциями, которые происходят из опыта работы с базами данных, “поддерживающими”, а не “стимулирующими” к применению транзакций. Мы описали кардинальное правило транзакций: они должны быть насколько возможно краткими, но не короче, чем это необходимо. Целостность данных управляет размером транзакций — это ключевая концепция, которую вы должны вынести из этой главы. Единственный фактор, влияющий на размер ваших транзакций — это бизнес-правила, которым подчиняется ваша система. Нет пространства отката, нет блокировок — вот каковы бизнес-правила.
Мы раскрыли тему распределенных транзакций и их отличие от одиночных транзакций баз данных. Мы исследовали ограничения, накладываемые на распределенные транзакции, и объяснили причины их существования. Прежде чем вы построите распределенную систему, вам следует четко понимать эти ограничения. То, что работает в отдельном экземпляре, может не работать в распределенной базе данных.
Эта глава завершилась рассмотрением автономных транзакций с описанием того, что они собой представляют, и, что более важно — когда их стоит использовать, а когда — нет. Я хотел бы еще раз подчеркнуть, что оправданное применение автономных транзакций в реальном мире случается исключительно редко. Если вы обнаружите, что используете их постоянно, вам стоит серьезно задуматься над причинами этого.
Следующая > |
---|