关于SQL Server死锁
transaction 1:
------------------------------------------------------
begin transaction
update table1 set cola = 'str1'
Waitfor time '10:12:00'
update table2 set colb = 'str2'
rollback transaction
transaction 2:
------------------------------------------------------
begin transaction
update table2 set colb = 'str2'
Waitfor time '10:12:00'
update table1 set cola = 'str1'
rollback transaction
同时运行这两个事务,将导致死锁。(先创建table1和table2,并插入一些值;waitfor time 适当修改)
SQL Server本身会处理死锁,通过选择一个死锁牺牲品,回滚死锁牺牲品的事务,来避免死锁。
SQL Server在上面这两个事务中自动选择一个作为死锁牺牲品,该事务将收到如下消息:
------------------------------------------------------
Msg 1205, Level 13, State 56, Line 7
事务(进程 ID 52)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
SQL Server选择死锁牺牲品根据的是代价最小原则,用户也可以通过设置DEADLOCK_PRIORITY选项进行干预。
例如,在事务1 set DEADLOCK_PRIORITY low,在事务2 set DEADLOCK_PRIORITY high,则发生死锁时SQL Server将选择事务1作为死锁牺牲品。
如何避免死锁:
1. 多个并发事务按照同样的顺序访问对象
2. 在事务中避免用户交互
3. 尽量缩短事务的执行时间,客户端不应把一个事务分成多次发送。
4. 设置更低的隔离级别
5. 使用捆绑连接
相关文档:
CareGroup 医疗组织负责保护2TB 的病人信息和相关数据的隐私及完整性。该组织位于波士顿,是Beth Israel Deaconess 医学中心(哈佛医学院的教学医院)以及另外三家地区医院的母公司。CareGroup 采用Microsoft® SQL Server™ 2005,将其数据存储于30个实例的390个数据库中。该组织希望将数据库升级到SQL Server 200 ......
原文:刘武| 常用的ORACLE PL/SQL管理命令一
熟悉ORACLE管理的一定对这些命令不会陌生,不过对于我这个刚接触ORACLE管理的来说,还是有必要做下记录,以便随时查看。
一 登录SQLPLUS
sqlplus 用户名/密码@数据库实例 as 登录角色;
如:用户sys(密码为123)以sysdba的角色登录数据库ORACL,我们可以输入:sqlplus sy ......
SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,简要介绍基础语句:
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database db ......
1.建表语句:create table
用法: create table 表的名字 (字段1, 字段2,。。。。)
举例:例如创建一个学生成绩表,包含的字段有,学生id,姓名,性别,班级,成绩create table score(
create table score(
sid nvarchar(10) primary key,
sname nvarchar(10) not null,
sex nvarchar(2),
sc ......
DECLARE
TYPE list IS TABLE OF t_stu.project%TYPE INDEX BY BINARY_INTEGER;
project_list list;
v_pro_num NUMBER;
sql_str VARCHAR(255);
t_stu
SID SUBJECT SCORE
1 数学 &n ......