没有合适的资源?快使用搜索试试~ 我知道了~
首页SQL Server 2000 70-229中文版部分答案解析(整理版)下
资源详情
资源评论
资源推荐

源而不能提交或回滚事务。例如,运行事务 1 的线程 T1 具有 Supplier 表上的排它锁。运
行事务 2 的线程 T2 具有 Part 表上的排它锁,并且之后需要 Supplier 表上的锁。事务 2 无
法获得这一锁,因为事务 1 已拥有它。事务 2 被阻塞,等待事务 1。然后,事务 1 需要
Part 表的锁,但无法获得锁,因为事务 2 将它锁定了。事务在提交或回滚之前不能释放持
有的锁。因为事务需要对方控制的锁才能继续操作,所以它们不能提交或回滚。
说明II死锁经常与正常阻塞混淆。当一个事务锁定了另一个事务需要的资源,第二个事务
等待锁被释放。默认情况下,SQL Server 事务不会超时(除非设置了
LOCK_TIMEOUT)。第二个事务被阻塞,而不是被死锁。
在该插图中,对于 Part 表锁资源,线程 T1 在线程 T2 上具有相关性。同样,对于 Supplier
表锁资源,线程 T2 在线程 T1 上具有相关性。因为这些相关性形成了一个循环,所以在线
程 T1 和线程 T2 之间存在死锁。
不正确答案:
A: 如果一个事务的优先级设置为低,当死锁发生时,它首先成为牺牲品;因为重要事务要
保留,所以该事务的级别不能设置为低
C: 当一个事务的成为死锁的牺牲品时,服务器返回一个1205的错误代号;当重要事务杀死
后,重启该事务,这样保证了该事务不会被终止,缺点是这个方法不是最有效的,并且会
影响性能,最好为选择B
D: ROWLOCK优化提示使用行级锁,而不使用粒度更粗的页级锁和表级锁
E: 事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进

行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高
的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级
别确定了 SQL Server 使用的锁定行为。
注:隔离级别!!当锁定用作并发控制机制时,它可以解决并发问题。这使所有事务得以
在彼此完全隔离的环境中运行,但是任何时候都可以有多个正在运行的事务。可串行性是
通过运行一组并发事务达到的数据库状态,等同于这组事务按某种顺序连续执行时所达到
的数据库状态。
SQL-92 隔离级别!!尽管可串行性对于事务确保数据库中的数据在所有时间内的正确性
相当重要,然而许多事务并不总是要求完全的隔离。例如,多个作者工作于同一本书的不
同章节。新章节可以在任意时候提交到项目中。但是,对于已经编辑过的章节,没有编辑
人员的批准,作者不能对此章节进行任何更改。这样,尽管有未编辑的新章节,但编辑人
员仍可以确保在任意时间该书籍项目的正确性。编辑人员可以查看以前编辑的章节以及最
近提交的章节。事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须
与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。
相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要
求的隔离级别确定了 SQL Server 使用的锁定行为。
SQL-92 定义了下列四种隔离级别,SQL Server 支持所有这些隔离级别:I
未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据)。
提交读(SQL Server 默认级别)。可重复读。可串行读(事务隔离的最高级别,事务
之间完全隔离)。
如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。
下面四种隔离级别允许不同类型的行为。
隔离级别 脏读 不可重复读取 幻像
未提交读 是 是 是
提交读 否 是 是
可重复读 否 否 是
可串行读 否 否 否

事务必须运行于可重复读或更高的隔离级别以防止丢失更新。当两个事务检索相同的行,
然后基于原检索的值对行进行更新时,会发生丢失更新。如果两个事务使用一个 UPDATE
语句更新行,并且不基于以前检索的值进行更新,则在默认的提交读隔离级别不会发生丢
失更新。
61. 你是 Woodgrove 银行的数据库开发员,公司有一个数据库包含人力资源信息。你设计
事务来支持输入数据到数据库,其中两个事务脚本如下:
Transaction 1 :
BEGIN TRANSACTION
UPDATE Customer
SET CustomerName=@Name
WHERE
CustomerID=@CustID
UPDATE CustomerPhone
SET PhoneNumber=@Phone
WHERE
CustomerID=@CustID
AND PhoneType=@PType
COMMIT TRANSACTION
Transaction 2:
BEGIN TRANSACTION
UPDATE CustomerPhone SET
PhoneNumber=@Phone
WHERE CustomerID=@CustID
AND PhoneType = @PType
UPDATE CustomerAddress SET Street =
@Street
WHERE CustomerID=@CustID
AND AddressType=@AType
UPDATE Customer SET CustomerName =
@Name
WHERE CustomerID = @CustID
COMMIT TRANSACTION
当测试脚本时,你发现数据库偶尔侦测到死锁,你如何处理:
A、 在事务2中,把update customer语句移动到update customerphone语句前
B、 两个事务都增加set deadlock_priority low语句
C、 在脚本中增加1205错误检查,如果错误发生,重启事务
D、 两个事务都增加set lock_timeout 0语句
正确答案:A

62. 你是 Woodgrove 银行的数据库开发员。你要通过一个处理过程把数据装载到一个
SQL2000 数据库中。在处理过程中,数据将暂时装载到 Staging 表中。当数据装载过程
完成时,数据从这表中删除。这些删除的数据也不再需要恢复。
你需要尽快地从 Staging 表中删除这些数据。你将怎么做?
A。 使用 DELETE 语句从表中删除数据。
B。 使用 TRUNCATE TABLE 语句从表中删除数据。
C。使用 DROP TABLE 语句从表中删除数据。
D。 使用一个可更新的游标从表中读取并删除每一行数据。
正确答案:B。
63. 无中文翻译
64. 你是一家保险公司的数据库开发员。公司有一个名为 Policies 的数据库。你为这个数
据库设计了一个存储过程,其中可用指针来处理大的结果集。使用这个存储过程的分
析员说,在数据显示出来以前会有一个很长时间的延时。延时之后,性能就变的非常
好。只有数据分析员使用 Policies 数据库执行数据分析。你想要提高存储过程的性能。
你要使用哪个脚本?
A.EXEC sp_configure ‘cursor threshold’, 0
B.EXEC sp_dboption ‘Policies’ SET CURSOR_CLOSE_ON_COMMIT ON
C.SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
D.ALTER DATABASE Policies SET CURSOR_DEFAULT LOCAL
正确答案:A.
65. 你是一家服装销售商的数据库开发员。公司有一个名叫 Sales 的数据库。这个数据库
包括一个名叫 Inventory 的表。Inventory 表包括了销售项目列表和为这些项目可用的数
量列表。当有销售信息插入到这个表中的时候,这个表被更新。更新 Inventory 表的存
储过程显示如下图。
CREATE PROCEDURE UpdateInventory @IntID int
AS
BEGIN
DECLARE @Count int
BEGIN TRAN
SELECT @Count = Available
FROM Inventory WITH (HOLDLOCK)
WHERE InventoryID = @IntID
IF (@Count > 0)
UPDATE Inventory SET Available = @Count – 1
WHERE InventoryID = @IntID
COMMIT TRAN
END
当这个存储过程执行的时候,数据库服务器有时会返回如下的错误信息:
事务(Process ID 53)和另一个过程在资源上死锁,并且已经关闭了死锁受害者。返回事
务。
为了维护数据库的完整性,你需要阻止这个错误信息的出现。你应该怎么做呢?
剩余19页未读,继续阅读












安全验证
文档复制为VIP权益,开通VIP直接复制

评论0