[20191012]组成rowid.txt
--//昨天做了拆分rowid的测试,链接http://blog.itpub.net/267265/viewspace-2659613/=>[20191011]拆分rowid 2.txt
--//今天测试通过 data_object_id , file ,; block , row 组成rowid的脚本.
--//Rowid 格式为:OOOOOOFFFBBBBBBRRR, data_object_id占6个字符,file占3个字符,block占6个字符,row占3个字符。当然如果存在在
--//存储中占用10个字节(32bit data_object_id +10 bit rfile# +22bit block + row 16bit)。
--//其中,O是对象ID,F是文件ID,B是块ID,R是行ID。
--//当然在普通索引中仅仅占6字节(注没有32bit data_object_id少4个字节,因为全部data_object_id都是一样的)。
--//分区表的全局索引中占10字节。
1.简单说明:
Rowid采用64位进制编码,编码如下:
A-Z <==> 0 - 25 (26)
a-z <==> 26 - 51 (26)
0-9 <==> 52 - 61 (10)
+/ <==> 62 - 63 (2)
--//组成rowid,在oracle下通过执行:
SYS@test> select dbms_rowid.rowid_create(1,28035,11,195,62) from dual;
DBMS_ROWID.ROWID_C
------------------
AAAG2DAALAAAADDAA+
--//第一个参数1指建立extended ROWID.
2.测试:
$ ./crrowid.sh 28035,11,195,62
rowid = AAAG2DAALAAAADDAA+
--//完成能与前面测试对上.
3.脚本如下:
$ cat crrowid.sh
#! /bin/bash
# data_object_id , file ,; block , row --> rowid
odebug=${ODEBUG:-0}
O_BASE64=($( echo {A..Z} {a..z} {0..9} + / ))
if [ $odebug -eq 1 ] ; then
echo "ORACLE_BASE64 = ${O_BASE64[*]} "
fi
len=(6 3 6 3)
a=0
res=''
for i in $( echo "$*" | tr ',' ' ')
do
# echo $i
result=''
b=${len[$a]}
for j in $(echo "obase=64; $i" | bc| tr -d '\\\r\n')
do
result=${result}${O_BASE64[$(( 10#$j ))]}
done
res=${res}$(printf "%${b}s" $result | tr " " "A")
(( a++ ))
done
echo "rowid = $res"
相关文章
- 02-19使用gevent包实现concurrent.futures.executor 相同的公有方法。组成鸭子类
- 02-19EPS应急电源设备的组成和选用
- 02-19EPS消防应急电源各组成配件有哪些?作用是什么?
- 02-19病毒感染检测 (15分) 人的DNA和病毒DNA均表示成由一些字母组成的字符串序列。然后检测某种病毒DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了该病毒,否则没有感染。
- 02-192021-02-17:规定1和A对应、2和B对应、3和C对应...26和Z对应,那么一个数字字符串比如“111”就可以转化为:“AAA“、“KA“和“AK“。给定一个只有数字字符组成的字符串str,请
- 02-19openstack组成
- 02-19js组成、js中数据类型、typeof、instanceof、判断对象相等、函数及调用形式
- 02-19C语言笔记-计算机组成原理
- 02-19那些曾虐我千百遍的计算机组成原理
- 02-19Just a joke (博弈, 图的组成,性质)