使用Sybase行锁说明及测试文档 联系客服

发布时间 : 星期日 文章使用Sybase行锁说明及测试文档更新完毕开始阅读660bc1452b160b4e767fcf58

Sybase11.9.X 表级锁与行级锁的转换

Sybase11.9.X表级锁与行级锁的转换

一、

简介

Sybase通过封锁来保证当前活动事务使用的数据的一致性,数据的一致性是指如果多个用户重复执行一组事务,每次的结果应该是相同的,即并发的查询和修改互不干扰。

Sybase11.9.X支持三种封锁级别:行级锁、页面锁和表级锁。行级锁是对操作的数据行封锁,页面锁是对数据或索引页的所有数据行封锁,表级锁是对整个表封锁。Sybase11.9.X系统默认的封锁类型是表级锁,一般来说,将封锁类型设为行级锁可以降低封锁冲突。

以下将介绍如何将Sybase11.9.X系统的封锁类型设为行级锁。 二、

操作方法

? 修改Sybase11.9.X系统封锁类型: 可通过如下指令:

sp_configure ‘lock scheme’,1,’datarows’ go

(其中datarows表示行级锁、datapages表示页级锁、allpages表示表级锁)将数据库默认的封锁级别由表级锁改为行级锁。

修改之后通过指令: sp_configure ‘lock scheme’ go

查询已修改数据库系统的封锁类型。

但是这种设置方法只能对在设置之后创建的表生效,也就是说已经创建的表仍然保留数据库原来的设置。要改变已创建的表的锁级别,请按下步操作。

新太科技技术开发中心 2 /9

Sybase11.9.X表级锁与行级锁的转换

? 修改已创建表的封锁类型:

1、

进入需操作的数据库,运行下面语句:

select 'alter table' , name , 'lock datarows' , char(13) , 'go' from sysobjects where type = 'U'

go

生成批量将表改为行级锁的脚本,如下例: alter table test lock datarows go

alter table test1 lock datarows go …… 2、

运行生成的脚本,每次操作5条记录,对于如下报错:

Server Message: Number 4963, Severity 16 Line 1:

Table 'test' is already locked in the desired locking scheme. ……

可不预理会,报错是说明表已经定义为行锁。对于操作等待,一般是由于有其它会话正在对该表进行加锁操作,这种情况或者等待加锁的会话运行结束或者暂时退出,请数据库较闲时再进行操作。 三、

测试报告

由于查询操作将对执行查询的表加共享锁,而插表、更新表操作将对执行操作的表加排他锁。所以测试将选择查询、插表、更新表三种SQL操作来测试修改

新太科技技术开发中心 3 /9

Sybase11.9.X表级锁与行级锁的转换

行级锁时数据库的并发性。

首先创建测试表: create table test (

no

int

not null, not null,

name varchar(10)

constraint pky_test primary key (no) ) go

测试编号:1.1 测试项目:修改为行级锁前数据库状况 系统功能: 修改为行级锁前插表、查询操作 测试程序: 用户操作: 1、 执行以下SQL: insert into test values(1,’Mike’) go 2、执行以下SQL: select * from test go 测试结果及分析:ok

新太科技技术开发中心 4 /9

系统响应: 1. ( 1 row affected) 2. name No ----------- ---- 1 Mike