ITPub博客

首页 > 数据库 > Oracle > [20160323]关于FULL_HASH_VALUE2.txt

[20160323]关于FULL_HASH_VALUE2.txt

原创 Oracle 作者:lfree 时间:2016-03-23 10:42:45 0 删除 编辑

[20160323]关于FULL_HASH_VALUE2.txt

--前一阵子firefox遇到问题,测试插件Calculate Hash.链接:
http://blog.itpub.net/267265/viewspace-2023144/

--实际上许多工具命令是相同的,linux下也有一个命令md5sum也可以拿来计算FULL_HASH_VALUE.测试看看:

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SCOTT@book> select * from dept where deptno=10;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

--sql_id=4xamnunv51w9j

SCOTT@book> select sql_id,hash_value,sql_text from v$sql where sql_id='4xamnunv51w9j';
SQL_ID        HASH_VALUE SQL_TEXT
------------- ---------- ------------------------------------------------------------
4xamnunv51w9j  911274289 select * from dept where deptno=10

SCOTT@book>  select name,full_hash_value from V$DB_OBJECT_CACHE where hash_value=911274289 and rownum=1;
NAME                                     FULL_HASH_VALUE
---------------------------------------- --------------------------------
select * from dept where deptno=10       1431c45dbddbb9e74eaa74d53650f131

2.使用md5sum 命令看看.

--在使用前要注意几点
--1. oracle 的计算要在后面补充chr(0).
--2. 使用echo 缺省有一个回车在最后,要加入-n参数.不要输出尾部newline.

$ echo -n -e 'select * from dept where deptno=10\0000' | md5sum
5dc43114e7b9dbbdd574aa4e31f15036  -

-- 前面的blog已经提到,oracle计算出来的把顺序颠倒一些.例如后面8位31f15036,颠倒1下3650f131,正好复合.
5dc43114 e7b9dbbd d574aa4e 31f15036
颠倒
1431c45d bddbb9e7 4eaa74d5 3650f131

--这样正好与前面计算的1431c45dbddbb9e74eaa74d53650f131一样.

2.写一个脚本看看:
--注意:实际sql_id的计算,oracle对语句文本做"格式化"处理的,写这个脚本意义不大,权当作一次学习.对一些简单的语句还是有用的.
--参考链接:http://blog.itpub.net/267265/viewspace-1701985/  [20150616]关于sql_id.txt

$ cat aa.sh
#! /bin/bash
a=$(echo -n -e 'select * from dept where deptno=10''\0000' | md5sum| cut -f1 -d' ')
echo $a
b=${a: -8}
echo $b
c=$(echo "${b: -2:2}${b: -4:2}${b: -6:2}${b: -8:2}"| tr [a-f] [A-F])
echo $c
echo -e "ibase=16;hash_value=$c;print \"hash_value=\";hash_value;"| bc -l

$ . aa.sh
5dc43114e7b9dbbdd574aa4e31f15036
31f15036
3650F131
hash_value=911274289

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2062336/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969582