zoukankan      html  css  js  c++  java
  • [20191012]组成rowid.txt

    [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 '\ ')
            do
                    result=${result}${O_BASE64[$(( 10#$j ))]}
            done
            res=${res}$(printf "%${b}s" $result | tr " " "A")
            (( a++ ))
    done
    echo "rowid = $res"

  • 相关阅读:
    2. Git基础命令
    1.Git基础配置
    demo_49 大结局
    demo_48 上传图片实现
    demo_47 反馈图片选择功能实现
    demo_46 问题反馈页面实现
    gitlab +jenkins
    面试分析
    面试基础 一文件操作和程序进程
    man 命令帮助文档的使用
  • 原文地址:https://www.cnblogs.com/lfree/p/11664143.html
Copyright © 2011-2022 走看看