|
Программирование >> Программирование баз данных
>.spTrfangulef: Stored ?ш ?ntureWorks) (Debugging) - Microsoft Visual Stu Be iiew Broject Debug Da loob Window Comminity t!ep J - aJ Jt . - dbo.spTriangu...v€ntureWork ) ALTER PROC sfTriangular @ValTieIn int eValueOut int OUTPUT DECLARE einMoriilng int DECLARE GOutWOiCkiiig iiit rr GVaiueIn != 1 BEGIH [SELECT OlntJorkiiig = В Value In - EXEC spTriemgular ВInWorking, 8Outworking OUTPUT V [select e ValueOut = 6 Value In + @ Outworking EUD ELSE BEGIH X llSofutior Explorer RETURN [SELECT 6ValueOut Locds NanfK r * X i Call Stack Va U V SiValueIn V ValueOut V @OutWofkJng 3 eUnWwking 2 , dbo,spTri*igdar(chaLicer,AdventureWtofk5Xint@VIh-3, ffit®VdueOut T-SQI Coll Puc. 11.10. Результаты возврата ко второму уровню в стеке Резюме Как правило, хранимые процедуры и пользовательские функции составляют основной объем программного обеспечения, применяемого в СУБД SQL Server. В настоящей главе подробно рассматривались программные конструкции T-SQL, применяемые для создания хранимых процедур и пользовательских функций. В следующей главе будет приведен значительный объем сведений о транзакциях, а за ней следует последняя глава, посвященная описанию основных программных средств SQL Server, в которой речь пойдет о триггерах. После ознакомления с этой информацией мы сможем перейти к изучению инфраструктуры .NET и ознакомлению с тем, какие перспективы расширения функциональных возможностей СУБД SQL Server открываются в связи с переходом к использованию этой инфраструктуры. Глава 12 Транзакции и блокировки Эта глава посвящена изложению фундаментальных сведений. Но рассматриваемые здесь темы таковы, что даже многие достаточно опытные пользователи не овладевают ими в совершенстве. Я говорю об этом в каждой своей книге, посвященной СУБД SQL Server, и вынужден был снова подчеркнуть эту мысль в вышедшей перед этой книге Программирование баз данных Microsoft SQL Server 2005. Базовый курс. Для по-ниманрш сути транзакций и блокировок, описанию которых посвящена эта глава, не требуется значительных усилий, и все же этим двум областям функционирования баз данных обычно уделяют меньше всего внимания. Тем не менее настоящая глава относится к числу тех глав, освоение материала которой становится ступенькой на пути к подлинному профессионализму. Следует также отметить, что транзакции и блокировки - это те области функционирования баз данных, которые чаще всего трактуются разработчиками неправильно, несмотря на то, что сведения о них, изложенные в данной главе, нельзя назвать очень сложными. По крайней мере, даже после изучения представленной здесь вводной информации (однако, возможно, автор ошибается, считая ее таковой), читатель будет вполне подготовлен к профессиональной работе в области баз данных. В настоящей главе рассматриваются перечисленные ниже темы. Общее определение понятия транзакции. Описание функционирования журналов и контрольных точек СУБД SQL Server. Основные сведения о блокировках. В целом в данной главе показано, насколько тесно связаны друг с другом рассматриваемые в ней темы, а также дана информация о том, как свести к минимуму сложности, касающиеся применения транзакций и блокировок. Транзакции Одним из основных свойств транзакции является неразрывность. Под этим подразумевается выполнение определенной последовательности действий как единого целого. Транзакции, выполняемые в базе данных, - это действия, осуществляемые с применением одного или нескольких операторов, которые реализуются по принципу все или ничего . В процессе обработки данных часто возникает необходимость обеспечить, чтобы после выполнения одной операции обязательно была выполнена другая операция и т.д., либо чтобы все эти операции окончились неудачей. В действительности нередко приходится сталкиваться с тем, что количество взаимосвязанных операций достигает 20 (или больше), при этом требуется, чтобы были выполнены все эти операции или не выполнено ни одной. Рассмотрим классический пример с банковскими операциями. Клиент с идентификатором Sally приходит в банк и просит перечислить одну тысячу долларов со своего расчетного счета на свой сберегательный счет. Для осуществления этой операции необходимо вначале снять деньги с одного счета, а затем зачислить на другой счет. Применительно к базе данных для этого требуется вьшолнение следующих операторов: UPDATE checking SET Balance = Balance - 1000 WHERE Account = Sally UPDATE savings SET Balance = Balance + 1000 WHERE Account = Sally В этом сценарии допущены чрезмерные упрощения, поскольку не нашли своего отражения многие необходимые действия, но в целом приведенные в нем операторы отражают основное назначение сценария: в нем должны быть выполнены две разные операции, по одной для каждого счета. Теперь предположим, что первгш из этих операций будет выполнена, а вторгш - нет. В таком случае, безусловно, клиент Sally лишится тысячи долларов. Разумеется, возникшая при этом ситуация является для банка недопустимой и должна быть обнаружена (и исправлена) в конце операционного дня, но организация работы становится гораздо проще, если есть возможность сразу же отменить начальные действия в банковской операции, которые не были доведены до конца. Таким образом, должен быть предусмотрен способ, позволяющий обеспечить осуществление группы взаимосвязанных операций по принципу все или ничего , при котором либо выполняются все необходимые операции, либо происходит отмена части выполненных действий и возврат в исходное состояние. Причем нельзя рассчитывать на то, что всегда будут сами собой складываться обстоятельства, способствующие успешному завершению всех необходимых взаимосвязанных операций, поскольку число возможных причин сбоев в работе весьма велико, начиная с отказов аппаратных средств и заканчивая нарушениями целостности данных. Но, к счастью, предусмотрена возможность применения некоторых программных конструкций, которые решают общую задачу по обеспечению вьшолнения всех взаимосвязанньгх действий, поэтому фактически не требуется контролировать вручную вьшолнение каждого отдельного оператора. Включив все операции в одну транзакцию, можно обеспечить, чтобы после неудачного завершения любой из операций были отменены результаты всех операций, выполненных до сих пор в составе этой транзакции. Для того чтобы было проще понять общий принцип работы транзакций, необходимо прежде всего усвоить, что транзакция характеризуется явно определенными границами. Каждая транзакция должна иметь четко обозначенные точки начала и конца. По существу, как неявно заданная транзакция рассматривается и каждый отдельно взятый оператор SELECT, INSERT, UPDATE и DELETE, выполняемый в СУБД SQL Server. Причина, по которой отдельно взятый оператор рассматривается как транзакция, состоит в том, что любая операция должна осуществляться в базе данных по
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |