首页 > 数据库 >[20240515]建立完善t2sh.sql脚本.txt

[20240515]建立完善t2sh.sql脚本.txt

时间:2024-05-18 21:53:01浏览次数:38  
标签:full hash t2sh -- sys chr sql txt

[20240515]建立完善t2sh.sql脚本.txt

--//建立一个简单输入简单文本计算sql_id,hash_values的sql脚本,主要用于简单sql语句以及对象的full_hash_value,sql_id,hash_value计算.

-- Copyright 2023 lfree. All rights reserved.
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions.
--------------------------------------------------------------------------------
--
-- File name:   t2sh
-- Purpose:     query Sql_id ,Hash_value , full_hash_value from input sql_Text
--              only work at Linux (Little Endian)
-- Author:      lfree
--
-- Usage:
--     @ t2sh "'<text>'"
--
--------------------------------------------------------------------------------
column sql_id format a13
column hash_value format 9999999999

SELECT
lower( sys.utl_raw.reverse(sys.utl_raw.substr(calc.rev_full_hash,1,4))||
  sys.utl_raw.reverse(sys.utl_raw.substr(calc.rev_full_hash,5,4))||
  sys.utl_raw.reverse(sys.utl_raw.substr(calc.rev_full_hash,9,4))||
  sys.utl_raw.reverse(sys.utl_raw.substr(calc.rev_full_hash,13,4))) full_hash_value
  , dbms_sql_translator.sql_id (&1) sql_id
  , dbms_sql_translator.sql_hash(&1) hash_vaule
  FROM dual,
--  (select sys.dbms_crypto.hash(src => UTL_I18N.string_to_raw(&1||chr(0),'AL32UTF8'),2) rev_full_hash from dual ) calc
(select sys.dbms_crypto.hash(src => rawtohex(&1||chr(0)),2) rev_full_hash from dual ) calc
;

--//注意:该脚本做sql_id计算,sql_text计算不需要输入最后的chr(0).
--//注意一个细节, &1两边没有单引号,这是故意为之,这样输入参数1格式"'<text>'"
--//因为一些特殊对象,比如表 因为后面要加入namespace,本来计算加入chr(1)||chr(0)||chr(0)||chr(0),这样计算时
--//要去掉1个chr(0),这样写法便于操作计算.

--//简单测试:
--//注意参数不支持多行的文本格式,我仅仅用来做简单计算.

SCOTT@test01p> select * from dept ;
    DEPTNO DNAME                LOC
---------- -------------------- -------------
        10 ACCOUNTING           NEW YORK
        20 RESEARCH             DALLAS
        30 SALES                CHICAGO
        40 OPERATIONS           BOSTON

SCOTT@test01p> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
4071881952 4g0qfgmtb7z70            0     130272      3383998547  f2b3fce0  2024-05-15 21:49:12    16777218

SYS@test> select * from v$db_object_cache where hash_value=4071881952 and rownum=1
  2   @prxx
==============================
OWNER                         :
NAME                          : select * from dept
DB_LINK                       :
NAMESPACE                     : SQL AREA
TYPE                          : CURSOR
SHARABLE_MEM                  : 16216
LOADS                         : 1
EXECUTIONS                    : 3
LOCKS                         : 1
PINS                          : 0
KEPT                          : NO
CHILD_LATCH                   : 0
INVALIDATIONS                 : 0
HASH_VALUE                    : 4071881952
LOCK_MODE                     : NULL
PIN_MODE                      : NONE
STATUS                        : VALID
TIMESTAMP                     : 2024-05-17/22:50:24
PREVIOUS_TIMESTAMP            :
LOCKED_TOTAL                  : 3
PINNED_TOTAL                  : 4
PROPERTY                      :
FULL_HASH_VALUE               : 2a7dbd05b32556914782ce7cf2b3fce0
CON_ID                        : 3
CON_NAME                      :
ADDR                          : 000007FF0078A9C0
EDITION                       :
PL/SQL procedure successfully completed.

SYS@test> @ t2sh "'select * from dept '"
FULL_HASH_VALUE                  SQL_ID        HASH_VAULE
-------------------------------- ------------- ----------
2a7dbd05b32556914782ce7cf2b3fce0 4g0qfgmtb7z70 4071881952

SYS@test> select * from v$db_object_cache where name = 'DEPT'
  2   @prxx
==============================
OWNER                         : SCOTT
NAME                          : DEPT
DB_LINK                       :
NAMESPACE                     : TABLE/PROCEDURE
TYPE                          : TABLE
SHARABLE_MEM                  : 4072
LOADS                         : 1
EXECUTIONS                    : 0
LOCKS                         : 0
PINS                          : 0
KEPT                          : NO
CHILD_LATCH                   : 93026
INVALIDATIONS                 : 0
HASH_VALUE                    : 2956815202
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCK_MODE                     : NONE
PIN_MODE                      : NONE
STATUS                        : VALID
TIMESTAMP                     : 2019-08-17/21:38:48
PREVIOUS_TIMESTAMP            :
LOCKED_TOTAL                  : 2
PINNED_TOTAL                  : 2
PROPERTY                      :
FULL_HASH_VALUE               : d228ecb73e713f600e1f246bb03d6b62
CON_ID                        : 3
CON_NAME                      : TEST01P
ADDR                          : 000007FF002CD2E0
EDITION                       :
PL/SQL procedure successfully completed.

SYS@test> @ t2sh "'DEPT.SCOTT.TEST01P'||chr(1)||chr(0)||chr(0)"
FULL_HASH_VALUE                  SQL_ID        HASH_VAULE
-------------------------------- ------------- ----------
d228ecb73e713f600e1f246bb03d6b62 0w7t4dfs3uuv2 2956815202
--//正好对上.注意少一个chr(0)


标签:full,hash,t2sh,--,sys,chr,sql,txt
From: https://www.cnblogs.com/lfree/p/18199813

相关文章

  • [20240516]建立完善vim bccalc_linux.vim插件.txt
    [20240516]建立完善vimbccalc_linux.vim插件.txt--//同步对linux版本做了修改,我自己很少使用,没有测试.--//安装很简单的拷贝到plugin,目录.$catbccalc_linux.vim""calculateexpressionenteredoncommandlineandgiveanswer,e.g.:"":Calculatesin(3)+sin(4)^2......
  • [20240516]建立任意进制转10进制脚本xto10.sql脚本.txt
    [20240516]建立任意进制转10进制脚本xto10.sql脚本.txt--//bashshell64进制编码从0开始.0-9,a-z,A-Z.这样仅仅62个编码.还剩下2个.@_--//这样完整的编码如下:$base64=$(echo{0..9}{a..z}{A..Z}@_)$echo$base640123456789abcdefghijklmnop......
  • [20240518]任意进制转换xtoy.sql脚本.txt
    [20240518]任意进制转换xtoy.sql脚本.txt--//前几天尝试改进10进制转任意进制,以及其他进制转10进制脚本,有了这两个脚本就可以通过10进制实现任意进制的转换.$cat10tox.sqlsettermoffcolumn2new_value2selectnull"2"fromdualwhere1=2;selectnvl('&2',16)"2"from......
  • [20240510]SQL语句存在问题与共享池内存分配.txt
    [20240510]SQL语句存在问题与共享池内存分配.txt--//五一前遇到的问题,生产系统应用程序升级,但是3个表忘记建立,而编写的程序可能存在问题,导致频繁调用这些根本不可能执行的sql--//语句.很奇怪的是应用前台根本不报错,真不知道开发如何写代码,难道没做例外处理以及记录吗?--//测......
  • [20240511]测试问题sql语句对数据库性能影响.txt
    [20240511]测试问题sql语句对数据库性能影响.txt--//五一前遇到的问题,生产系统应用程序升级,但是3个表忘记建立,而编写的程序可能存在问题,导致频繁调用这些根本不可能执行的sql--//语句,正常情况下应该报ORA-00942:tableorviewdoesnotexist,很奇怪的同事反映应用前台根本......
  • [20240511]建立10进制转任意进制10tox.sql脚本.txt
    [20240511]建立10进制转任意进制10tox.sql脚本.txt--//翻开以前笔记,找到1个脚本10x.sql(改名10tox.sql),可以实现10进制转任意进制.受字符集限制最大64进制.--//bashshell64进制编码从0开始.0-9,a-z,A-Z.这样仅仅62个编码.还剩下2个.@_,以该编码为基础来实现--//bashshel......
  • [20250511]建立完善s2h.sql脚本.txt
    [20250511]建立完善s2h.sql脚本.txt--//写过一个sql_id计算hash_value的bashshell脚本,实际上oracle使用dbms_utility.SQLID_TO_SQLHASH就可以实现,$cats2h.sql--Copyright2023lfree.Allrightsreserved.--LicensedundertheApacheLicense,Version2.0.SeeLICENSE......
  • [20240512]建立完善sql_idz.sh脚本.txt
    [20240512]建立完善sql_idz.sh脚本.txt--//使用该脚本计算存在小问题,cat文件中如果有ascii=0,cat时会过滤掉,一般tablenamespac是1.--//在尾部追加\01\0\0\0,而sql语句追加的是\0.我以前代码写死的.修改更加灵活一些.--//增加参数3,如果不输入缺省等于\0.--//增加计算exact_mat......
  • [20240514]建立完善vim bccalc_win.vim插件.txt
    [20240514]建立完善vimbccalc_win.vim插件.txt--//最近几天一直在使用vimbccalc_win.vim做运算,这是根据vim.org网站的一个调用bc做计算的一个插件bccalc.vim改写的,--//当时主要目的作为oracle一些计算的辅助工具,后来自己越写越复杂,在这次使用中还是遇到一些问题.1.取模运算......
  • MySQL面试必备三之事务
    本文首发于公众号:Hunter后端原文链接:MySQL面试必备三之事务这一篇笔记介绍一下MySQL的事务,面试中常被问到关于事务的几个问题如下:事务是什么为什么需要事务,事务有什么作用事务的特点事务可能带来哪些问题事务有哪些隔离级别,这些隔离级别都可以解决哪些问题可重复读隔......