文档详情

sqlserver2005从入门到精通.pdf

发布:2019-04-06约12.11万字共93页下载文档
文本预览下载声明
?Ⅲ捷⒕ 如何在SQL Server 中修改数据 = 第10章 用事务来提供安全的数据库并发 = 第11章 保存历史数据 = 第12章 Reporting Services入门 = 第13章 Notification Services入门 第10 章 用事务来提供安全的数据库并发 191 10 用事务来提供安全的数据库并发 在学习完本章之后,您将可以: l 在SQL Server 中定义一个事务 l 在事务中处理错误 l 选择合适的事务隔离级别 l 监视并防止阻塞和死锁问题 l 使用ADO.NET 管理事务 在前面两章中,学习了如何连接到远程数据源。对于涉及分布客户的应用程序来说, 需要特别注意的是防止一个用户覆盖另一个用户的输入。作为一个应用程序的设计者,还 需要确保一系列相关的更改不会中断,以防止只是部分完成这些更改。这些问题对于数据 库应用程序往往非常重要,因此我们专门用一章来介绍SQL Server 如何解决这些问题。在 本章中,将解释如何在事务中包装数据的更改,以防止用户之间的相互影响,并使应用程 序的设计者能够保证数据的完整性。 10.1 商业事务和SQL Server 事务 每一个商业过程都包括一个或多个的事务。想象一下,您正在管理一个网上商店。一 个消费者定购一个产品后,必须执行一个预先定义的进程才能确保交货的及时。这个进程 还必须包括信用卡的处理过程以保证公司收到了货款。如果这些任务中有一个失败了并且 不能更正,那么整个过程必须取消,以保证消费者在得到商品前不能给他开据发票,或者 反之。在有些情况下,这些过程通过计算机系统处理,数据存储在数据库中。与一个商业 事务相关的数据必须改为可靠、一致、完整的数据以符合实际的商业过程。这可以通过在 数据库级使用事务来完成。一个事务被定义为作为一个单元执行的符合所谓ACID 属性的 一序列的操作。 l 原子性 每一个事务是一个工作单元。它不能被分割成更小的部分。这个属性 意味着在事务中定义的一切数据更改要么都完成,要么都不完成。 l 一致性 一个事务不能违背定义在数据库中的任何完整性检查。为了维护一致 性,所有的规则、约束、检查和触发都会应用在事务中。由于所有的数据更改 在事务期间内进行,这些数据在事务开始和事务结束前会被确保为一致的。 l 隔离性 事务必须与其他事务进行的数据更改相隔离。这意味着没有其他操作 192 第Ⅲ部分 如何在SQL Server 中修改数据 可以改变中间态( 没有提交的) 的数据。为了避免中间态数据被更改,事务必须 要么等待来自其他事务的更改被提交,要么只能查看到处于上一个提交状态的 数据。 l 持久性 在一个事务完成,并且客户端应用程序已经被提示这个事务已经成功 完成后,无论发生任何系统错误,这些更改的数据将永久存在。 SQL Server 数据库引擎会通过事务日志强制执行事务的物理一致性,并且保证事务的 持久性。SQL Server 还会强制对约束、数据类型以及其他内容执行一切一致性检查以确保 逻辑上的一致性。这都由SQL Server 自动地强制执行。然而,为了将商业事务映射到SQL Server 事务,开发者必须谨慎设计一些事务。 1. 定义事务的外延。开发者必须定义事务从哪里开始,到哪里结束。一个事务总应该 越短越好,但是同时要做到尽量符合实际业务过程的需求。 2. 定义错误管理。在事务中并不是所有的错误都会自动回滚。开发者有责任实现错误 管理。 3. 定义隔离级别。隔离不同的事务总是会有与并行性相关的缺陷。如果完全地隔离事 务并且其他事务希望读取相同但不为前一状态的数据,那么它会被阻塞直到您结束您的事 务。这对于有许多并行连接的数据库系统来说是一个严重问题。SQL Server 实现了一些不 同种类的、需要正确选择的隔离级别。一般规则是选择在尽可能短的时间内锁住尽可能少 的数据,并可以提供需要的事务安全性的隔离级别。 本章后文将介
显示全部
相似文档