SQL Server2000中死锁经验总结
我们在做很多项目时都要涉及到数据库,特别是一些比较大型的web项目,更是有较大的并发处理,所以对数据库的操作有可能会产生死锁,对于数据库的死锁,一般数据库系统都会有一套机制去解锁,一般不会造成数据库的瘫痪,但解锁的过程会造成数据库性能的急速下降,反映到程序上就会造成程序的反应性能的下降,并且会造成程序有的操作失败。虽然一般对于数据库级别的锁定于解锁程序员不会在程序中用代码编程去处理,但是对于其的了解对于程序员来说还是很有好处的,它能让我们在出现问题时快速找到问题的原因,同时让我们在编程时注意哪些可能造成数据库死锁的不太好的编码。
以下以sql server2000为例,来了解数据库死锁的一些知识(其实各种大型数据库所采用的锁的基本理论是一致的,但在具体实现上各有差别。)
之所以要有锁的概念是因为存在着多用户同时需要访问数据库,如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题,这些问题包括:丢失更新、脏读、不可重复读和幻觉读等等,在这就不一一解释了,总之就是发生数据不一致现象。
在sql server2000中锁是具有粒度的,即可以对不同的资源加锁。锁定在较小的粒度的资源(例如行)上可以增加系统的并发量但需要较大的系统开销,从而也会影响系统的性能,因为锁定的粒度较小则操作可能产生的锁的数量会增加;锁定在较大的粒度(例如表)就并发而言是相当昂贵的,因为锁定整个表限制了其它事务对表中任意部分进行访问,但要求的开销较低,因为需要维护的锁较少,所以在这里是一种互相制约的关系。
Sql server2000中锁定的粒度包括 行、页、扩展盘区、表、库等资源。实际上这些粒度大多可以看成是sql server系统的空间管理的不同,在SQL Server 2000系统中,最小的空间管理单位是页,一个页有8K。所有的数据、日志、索引都存放在页上。另外,使用页有一个限制,这就是表中的一行数据必须在同一个页上,不能跨页。页上面的空间管理单位是盘区,一个盘区是8个连续的页。表和索引的最小占用单位是盘区。数据库是由一个或者多个表或者索引组成,即是由多个盘区组成。放在一个表上的锁限制对整个表的并发访问;放在盘区上的锁限制了对整个盘区的访问;放在数据页上的锁限
相关文档:
--SQL高级程序设计:子查询
use AdventureWorks
GO
SELECT DISTINCT EmployeeID from HumanResources.JobCandidate WHERE EmployeeID IS NOT NULL;
SELECT e.EmployeeID,FirstName,LastName
from HumanResources.Employee e
INNER JOIN Person.Contact c
ON e.ContactID = c.ContactID
WHERE e.EmployeeID IN ......
直接restore或附加应该是不行的, 用脚本+导数据肯定没有问题。
2005转到2000的步骤
1. 生成for 2000版本的数据库脚本
2005 的manger studio
-- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例
-- 右键要转到2000的库
-- 任务
-- 生成脚本
-- 在"脚本向导"的"选择数据库"中, ......
问题
如何让T-SQL测试套件把测试用例结果直接写入文本文件
设计
使用ActiveX技术实例化一个FileSystemObject对象,然后通过OpenTextFile()和WriteLine()方法直接把测试结果写入文件。
方案
declare @fsoHandle int,@fileID int
exec sp_OACreate 'Scr ......
一、下载安装
1、SQL Server 2005 Express Edition
下载 SQL Server 2005 Express Edition(下载页面):
http://msdn.microsoft.com/vstudio/express/sql/download/
安装完数据库后设置ICP/IP协议启动(这一步不能少,默认是TCP/IP不启用的),具体如下:
(1)打开SQL Server Configuration Manager
(2)转到SQL S ......