[20191012]使用bash从sql_id计算hash_value.txt

--//没有什么实际意义,仅仅验证方法是否可行.
--//sql_id的计算是使用MD5算法进行哈希,生成一个128位的Hash Value,其中低32位作为HASH VALUE显示,SQL_ID则取了后64位。
--//实际上sql_id使用32进制表示,hash_value使用10进制表示。

1.测试数据:

select * from emp where deptno=10;
--//查询可以知道sql_id=‘557p4j1ggw222‘.

[email protected]> select sql_text c70,sql_id,hash_value  from v$sql where sql_id = ‘557p4j1ggw222‘;
C70                                SQL_ID        HASH_VALUE
---------------------------------- ------------- ----------
select * from emp where deptno=10  557p4j1ggw222 1593706562

[email protected]> select /*+ 12345678abdef */ sysdate from dual ;
SYSDATE
-------------------
2019-10-11 22:34:56
---//sql_id=0p0rzks2gkrj6

[email protected]> select name c70,hash_value,full_hash_value from V$DB_OBJECT_CACHE where  hash_value=83451430;
C70                                           HASH_VALUE FULL_HASH_VALUE
--------------------------------------------- ---------- --------------------------------
select /*+ 12345678abdef */ sysdate from dual   83451430 ef5a2c4876c9e93d0a82ff9604f95e26
select /*+ 12345678abdef */ sysdate from dual   83451430 ef5a2c4876c9e93d0a82ff9604f95e26

--//sql_id = 557p4j1ggw222 ,HASH_VALUE = 1593706562
--//sql_id = 0p0rzks2gkrj6 ,HASH_VALUE = 83451430

2.测试:
$ echo 557p4j1ggw222  0p0rzks2gkrj6 | xargs.exe -n 1  ./s2p.sh
sql_id=557p4j1ggw222 hash_value = 1593706562
sql_id=0p0rzks2gkrj6 hash_value = 83451430
--//对比上面都能对上.

3.执行脚本s2p如下:

$ cat s2p.sh
#! /bin/bash
# convert sql_id to hash_value

odebug=${ODEBUG:-0}

sql_id="$*"
v1=$(echo $sql_id | tr $(echo {0..9} {a..z} | tr -d ‘eilo ‘) $( echo {0..9} {a..v}| tr -d ‘ ‘))
v2=$(( 32#$v1 % 2**32 ))
if [ $odebug -eq 1 ] ; then
echo "sql_id=$sql_id v1=$v1 v2=$v2"
fi
echo "sql_id=$sql_id hash_value = $v2"

原文地址:https://www.cnblogs.com/lfree/p/11664138.html

时间: 2024-07-30 18:42:33

[20191012]使用bash从sql_id计算hash_value.txt的相关文章

[转] sql_id VS hash_value

有没有发现,v$session,v$sql,v$sqlarea,v$sqltext,v$sql_shared_cursor等试图连接的时候经常会用到hash_value,sql_id,但是他们2个之间到底有什么不可告人的关系呢? Talnel以及评论的一坨人(包括jonathan)给了一个蛮不错的解释: SQL_ID is just a fancy representation of hash value [email protected]>select kglnahsv, kglnahsh f

一次SQL_ID和HASH_VALUE转换尝试引发的误区

http://blog.csdn.net/bisal/article/details/38919181 这篇文章中曾谈到一个隐藏问题: 引用原文: "使用@dbsnake大牛的SQL可以知道SQL_ID和HASH_VALUE的一一对应关系: 隐藏问题1: 这里的截图可能有点问题,结果并不准确,问题就出在这个SQL中使用的算法中,在另一篇博文中会仔细说明这个问题." 问题背景: 这里使用以下两个SQL获取SQL_ID对应的HASH_VALUE值: select lower(trim('a

bash/shell 数学计算

$ echo $((20.0/7)) $ zcalc $ bc <<< 20+5/2 $ bc <<< 'scale=4;20+5/2' $ expr 20 + 5 $ calc 2 + 4 $ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI $ echo 20 5 2 / + p | dc $ echo 4 k 20 5 2 / + p | dc $ perl -

计算student_grade.txt 中 语文成绩的平均值, 找出数学成绩最高的学生是谁

题目要求: 计算student_grade.txt 中 语文成绩的平均值, 找出数学成绩最高的学生是谁 方法一: with open('student_grade.txt', 'r', encoding='utf-8') as f: data = f.read() #读取student_grade.txt的内容给data(文本) data_lines=data.splitlines() #把文本转换成列表,同时去掉换行 empty={} #定义一个空字典 for i in data_lines:

日期相差的天数计算201307311924.txt

输入1978 10 1 1978 10 11978 10 1 1978 10 2              1978 10 2 1978 10 12001 1 1 2000 1 12000 1 1 2002 1 1 输出011366731 #include "stdio.h"int main(){ int b[2]={365,366};   int a[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,                 0,31

[20191011]通过bash计算sql语句的sql_id.txt

--//当我知道如何通过bash计算sql语句的full_hash_value ,就很想通过bash编程计算sql_id.当时受限自己能力--//感觉不好实现.--//链接: http://blog.itpub.net/267265/viewspace-2142512/=> [20170724]关于sql_id那些事.txt 1.简单介绍sql_id.--//sql_id的计算是使用MD5算法进行哈希,生成一个128位的Hash Value,其中低32位作为HASH VALUE显示,SQL_ID

JAVA写个东西读取TXT中的数据 且要计算出平均值和总值 最后还要按总值排序

AVA写个东西读取TXT中的数据 且要计算出平均值和总值 最后还要按总值排序 例如:要计算a.txt文档中内容可如下: 学号 姓名    语文 数学 英语 平均值 总值 排序 1    肯德基   90   98   97 2    经典款   98   97   92 3    肯德的   93   92   97 import java.io.*; import java.io.File; import java.util.ArrayList; import java.util.Iterat

oracle之SQL_ID 1

在Oralce里,一个sql语句执行时会生成很多信息: SQL唯一标识 SQL文本信息 绑定变量信息 执行计划和游标信息 统计信息 性能信息 其他信息.例如sql来源,状态等 SQL_ID 在Oracle中,SQL优化器是负责解析sql的(包括<a>直接执行的sql和<b>存储过程中的sql),<b>中的sql在提交sql优化器解析前,会进行一些预处理,包括大小写,空格,注释的处理等. 在解析sql时,sql优化器会分配一个ID(子游标),唯一标识一个sql(存储在v$

bash基本命令速查表

来源:https://github.com/skywind3000/awesome-cheatsheets/blob/master/languages/bash.sh ############################################################################## # BASH CHEATSHEET (中文速查表) - by skywind (created on 2018/02/14) # Version: 32, Last Modi