启动dbaccess
dbaccess - - |
建库,建表,插入数据:
drop database if exists dbtype ; create database dbtype with log; create table t_ serial(c1 serial) in dbs1; insert into t_serial (c2) values(0); insert into t_serial (c2) values(0); insert into t_serial (c2) values(0); insert into t_serial (c2) values(0); |
数据的选择是:最小值,中间值,最大值,空值。
找到数据的rowid > select c1,rowid from t_serial; c1 rowid 1 257 2 258 3 259 4 260 4 row(s) retrieved. |
通过oncheck命令,可以根据库名,表名,rowid,找到数据的物理位置。
[root@localhost ids]# oncheck -pp dbtype:t_serial 257 addr stamp chksum nslots flag type frptr frcnt next prev 14:54 6345352 d2d0 4 1 DATA 56 1972 0 0 slot ptr len flg 1 24 8 0 2 32 8 0 3 40 8 0 4 48 8 0 slot 1: 0: 0 0 0 1 0 0 0 0 ................ slot 2: 0: 0 0 0 2 0 0 0 0 ................ slot 3: 0: 0 0 0 3 0 0 0 0 ................ slot 4: 0: 0 0 0 4 0 0 0 0 ................ |
14:54的含义是第14个chunk的54页。
查看数据文件 确保数据落地强制执行一次检查点,可以确保刚才插入的数据落地。
[root@localhost ids]# onmode –c |
用16进制的方式,打开数据文件
vi /home/ids/storage/dbs1 %!xxd |
根据数据所在的地址 14:54计算出数据所在的位置:
查看slot2048*54 = 0x1b000,也就是关心的数据从0x1b000开始的,
先从slot看起。
这个页的页尾:
001b7e0: 0000 0000 0000 0000 0000 0000 3000 0800 ............0... 001b7f0: 2800 0800 2000 0800 1800 0800 88d2 6000 (... .........`. |
其中一个slot指向一行数据,一个slot占用4个字节,如上图,1800 0800是第一个slot,指向第一行数据,含义是:从0x0018字节开始,长度是0x0008字节。
以此类推,2000 0800指向第二行,2800 0800指向第三行,3000 0800指向第四行。
查看数据根据slot指向的位置,查看数据,如下:
001b000: 3600 0000 0e00 d0d2 0400 0108 3800 b407 6...........8... 001b010: 0000 0000 0000 0000 0000 0001 0000 0000 ................ 001b020: 0000 0002 0000 0000 0000 0003 0000 0000 ................ 001b030: 0000 0004 0000 0000 0000 0000 0000 0000 ................ |
第一行的c1数据:1, 就是图中的0000 0001
第二行的c1数据:2,就是图中的0000 0002
第三行的c1数据:3,就是图中的0000 0003
第四行的c1数据:4,就是图中的0000 0004
serial的规格和int一致,只是它在插入的时候自增。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)