当前位置:
文档之家› 数据库原理与SQL Server第九章
数据库原理与SQL Server第九章
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.4.3 错误的处理
一般情况下,在错误发生后应该采取如 下一些错误处理方法: (1)放弃任务。 (2)立即退出或尝试继续执行。 (3)向用户发送消息解释错误原因。
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.2.1 事务的属性
事务是构成单一逻辑单元的操作的集合。 事务必须满足四个要求,称为ACID属性, 即原子性、一致性、隔离性以及持久性。
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.2.5 分布式事务
SQL Server 2000 可以通过网络,实现跨服务 器的数据操作,这种事务称为“分布式事务”。 分布式事务是一种非常强大的功能,但必须通 过网络来传送数据,因此出错的几率也就大大 增加了。为了解决这个问题,分布式事务的处 理被分成两个阶段:准备阶段和提交阶段,也 就是所谓的两阶段提交。 (1)准备阶段 (2)提交阶段
上一页 下一页 返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
例9-2 提交事务。 脚本:
例9-3 回滚事务。 脚本:
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.2.3 隐式事务
SET IMPLICIT_TRANSACTION ON 使SQL Server 2000进入隐式事务处理模式,使用COMMIT TRANSACTION/WORK语句提交事务或者使用ROLLBACK TRANSACTION/WORK回滚事务。 SET IMPLICIT_TRANSACTION OFF 退出隐式事务处理模式。
上一页 下一页 返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.3.4 检索锁信息
sp_lock [[@spid1=]‘<进程ID1>’][,[@spid2=]‘<进程ID2>’]。 其 中 , “ 进 程 ID1” 和 “ 进 程 ID2” 是 来 自 master.dbo.sysprocesses的SQL Server 2000进程ID号,数据 类型为int,默认值为NULL。如果没有指定进程ID号,则显 示所有锁的信息。 例9-5 显示所有S锁的信息。 脚本: USE master GO sp_lock GO
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.4.1 错误的产生
例9-6 插入一非法选课数据。
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.4.2 错误的捕获
1.@@ERROR: 如果为0则一切正常。 如果这个值不为0,则表示已经发生了一个错误。 2.@@ERROR的使用 IF @@ERROR<>0 BEGIN --错误处理部分 END 可以通过@@ERROR来检查是否发生了特定的错误。
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
3. 隔离性
如果有两个或者多个事务,这些事务必须 按照一定的顺序先后执行,而不能在执行 一个事务的同时,又穿插执行另外的一个 事务,也就是说,多事务并发执行时,应 保证执行的结果是正确的,如同单用户环 境一样。这可以通过锁来实现。
例9-4 隐式事务实例。 脚本:
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.2.4 自动事务
自动事务是SQL Server 2000默认的事务 处理模式。 在这种模式下,任何一个语句执行如果 成功,则它对数据库所作的修改马上被 自动提交,反之如果失败,则自动回滚。
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.2.2 显式事务
显式事务就是用户使用“事务处理语句”定义的事务。 事务处理语句主要包括: (1)BEGIN TRANSACTION 作用是启动一个事务,它标志着一个事务的开始。 (2)COMMIT TRANSACTION和COMMIT WORK 作用是提交事务。在事务中对数据库所作的修改,将在此时 进行提交,它标志着事务的结束。 (3)ROLLBACK TRANSACTION和ROLLBACK WORK 作用是回滚事务。通常如果在事务的执行过程中发生了错误, 需要执行这个语句,放弃事务中对数据库所作的修改,使数 据库恢复到事务开始之前的状态。
上一页 下一页 返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
分布式事务处理过程
(1)使用BEGIN DISTRIBUTED TRANSACTION语句启 动一个分布式事务。此时该服务器成为本事务管理服 务器。 (2)应用程序执行分布式查询或执行远程服务器上的存储 过程。 (3)事务管理器调用 MS DTC,通知远程服务器开始参与 该分布式事务。 (4)应用程序执行提交事务或回滚事务的语句来结束事务。 此时事务管理器将调用MS DTC来管理两阶段提交过 程,本服务器和远程服务器提交或回滚事务。
上一页 下一页 返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.3.5 使用锁时的注意事项
(1)遵守事务指导原则。 (2)对应用程序进行强度测试。指大量用户执行相同操作, 实际执行操作的用户数量应为应用程序可能有的最多 用户数。 (3)允许用户中止长时间运行的查询 (4)在查询期间禁止用户输入以减少查询的运行时间 (5)当一个查询在运行时,它将在资源上保持—个某种类 型的锁。 (6)虽然必要时能够改变查询和对象的锁,但实际应用中 应该尽可能让SQL Server 2000来管理锁。
上一页 下一页 返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.3 锁
SQL Server 2000使用锁来防止多个用户 在同一时间内对同一数据进行修改,并 能防止一个用户查询正在被另一个用户 修改的数据,这都可能引起数据的混乱。 锁有助于保证数据库逻辑上的一致性。
上一页
下一页
上一页
下一页
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.2 事务
问题:如果在修改了数据库中数据之后又立即意识到 不该做这些修改时,应该怎样处理呢? 1. 最简单的办法,就是重新输入这些数据。但是,如 果已经修改了多个表中的一些数据时,想要重新输入, 就比较困难了。 2. 自动地将数据恢复到它们修改之前的原始状态。为 了解决这样的问题,SQL Server 2000提供了事务和锁 来保证数据的一致性和完整性。
上一页 下一页 返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
例9-9 S中不存在‘1001’学号,或C中不存在 ‘C001’课程号,执行上述存储过程的情况。
上一页 下一页 返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.2.6 使用事务时的注意事项
(1)事务应尽可能短 (2)定义有效的锁策略 锁可以防止用户读取已经被修改但还没有提交的数据。 (3)避免用户在事务中输入数据 (4)在浏览数据时避免打开事务 这有助于减少锁定问题。除此之外,事务的最大作用 在于修改数据,而不是检索数据。 (5)减少事务中所访问的数据量 因为事务处理中往往会锁定数据,这能够减少其他用 户可能遇到的锁问题,提高数据库的并发性。
上一页 下一页 返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.4 @@ERROR
用户或者应用程序在访问数据库时,可能会出现使用 违背数据库要求的访问方式,即非正常的数据访问或 者操作,这时可能导致意外的发生。 SQL Server 2000具有完备的错误处理功能,能够完成: (1)判断错误是否发生。 (2)通知用户发生了错误。 (3)决定操作过程。 (4)恢复或放弃修改。
返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
9.3.1 锁的类型
(1)排它锁:不允许读取、修改锁定资源 (2)共享锁:允许读取锁定资源 (3)更新锁:锁定资源 (4)结构锁:结构修改锁;结构稳定锁 (5)意向锁:意向锁说明SQL Server 2000有在资源上获得 共享锁或者排它锁的意向, 包括: 共享意向锁:指明事务试图在某一资源上获得共享锁。 排它意向锁:指明事务试图在某一资源上获得排它锁。 共享排它意向锁:指明事务试图在一些资源上获得共 享锁,而在其它一些资源上获得排它锁。
上一页 下一页 返回本章首页
第九单元 保证数据一致性
数据库原理与SQL Server
2. 一致性
SQL Server 2000能保证事务的一致性。 一致性意味着全部数据都保持在一致的 状态。在一个事务开始之前,数据库处 于一致的状态。当事务结束后,不管它 是成功还是失败的,数据库还应该处于 一致的状态。
第九单元 保证数据一致性
数据库原理与SQL Server
第九章 保证数据完整
9.1 批处理 9.2 事务 9.3 锁 9.4 @@ERROR 实训九 错误的捕获和处理