oncheck 实用程序为使用行锁的表提供更好的并发性。
当表使用页锁定,oncheck 在执行索引检查时在表上放置共享锁定。在 oncheck 检查或打印索引信息时,共享锁定不允许其他用户对表执行更新、插入或删除。
如果该表使用页锁定,在您
运行不带
-x 选项的
oncheck 时,数据库服务器会返回
以下消息:
警告:索引检查需要对锁级别为页的表的 s-lock。
有关 oncheck 锁定的详细信息,请参阅 GBase 8s 管理员参考。
以下总结描述了在索引检查过程中执行的锁定:
- 缺省情况下,在您使用带 -ci、-cI、-pk、-pK、-pl 或 -pL 选项的 oncheck 检查索引时,数据库服务器不会对表放置共享锁定,除非该表使用页锁定。
在 oncheck 检查带有页锁的表的索引时,它会对表放置一个共享锁定,这样,其他用户将无法执行更新、插入或删除操作,直到检查完成。
- 如果在索引检查期间,未在使用行锁的表中放置共享锁定,那么 oncheck 实用程序在索引检查过程中得到的结果将是不精确的。
为了绝对保证完整索引检查的精确性,请执行
带 -x 选项的 oncheck。通过
使用 -x 选项,oncheck 对表放置
一个共享锁定,那么其他用户无法执行更新、插入或删除,直到检查完成。
可以查询
systables 系统目录表来查看表的当前锁定级别,如以下简单
SQL 语句所示:
SELECT locklevel FROM systables
WHERE tabname = "customer"
如果在
locklevel 列没有看到
R 值(对行),您可以修改锁定级别,如以下简单
SQL 语句所示:
ALTER TABLE tab1 LOCK MODE (ROW);
行锁可能会产生其他副作用,比如引起锁定使用的全面增加。
有关锁定级别的更多信息,请参阅锁定。