对于表中的每一个数据行来说,rowid是索引用来指向该数据行物理位置的一个信息。
但是用来加锁的时候,很多时候都是加在了rowid行,无论是对于数据库,还是对于表,还是数据行。
执行onstat -k命令输出如下:
Locks
address wtlist owner lklist type tblsnum rowid key#/bsiz
Locks
address wtlist owner lklist type tblsnum rowid key#/bsiz
441970b0 0 453fdda8 0 HDR+S 100002 204 0
44197688 0 453fc368 0 S 100002 204 0
44197930 0 453fb1e8 0 HDR+S 100002 20a 0
44198128 0 45401228 0 S 100002 20a 0
44198678 0 45400968 0 S 100002 201 0
44198a30 0 453fb1e8 4419dd98 HDR+S a00002 57ea01 0
44198d60 0 453ff7e8 0 S 100002 204 0
44198e70 0 453fb1e8 44197930 HDR+IS 600045 0 0
4419aa10 0 453fef28 0 S 100002 204 0
4419b290 0 453fb1e8 44198e70 HDR+SR a0000a 57ea01 K- 1
4419bc20 0 453fc368 44197688 HDR+S 100002 201 0
4419dd98 0 453fb1e8 4419b290 HDR+SR a0000a 58e401 K- 1
4419f140 0 45401228 44198128 S 100002 201 0
-
onstat -k输出中的rowid表示锁加的具体对象,可以是某个数据行的rowid,也可以是某个是索引树对应该数据行的rowid。rowid如果为0,是表锁。如果以两个0结尾,是页锁。如果是6位数字或不以0结尾的6位以下的数字,是行锁。
-
tblsnum=100002 表示数据库锁,后面的rowid就是某个特定是数据库对应的database rowid;
-
tblsnum=600045 表示某个表或索引的rowid
-
database rowid的获取如下:
select name,hex(rowid) from sysmaster:sysdatabases where name=‘dbname’;
- table rowid的获取如下:
select tabname,hex(partnum),hex(rowid) from sysmaster:systabnames
where dbsname=‘testdb’ and tabname=‘customer’;
- data row rowid的获取如下:
select hex(rowid),* from tabname where id=‘’;
- 对于分片表来说,需要使用:
create table … with rowid;
alter table … add rowid;