首页 > 数据库 > Oracle > [20240823]21c数字对象是什么.txt
[20240823]21c数字对象是什么.txt
--//这几天一直在探究sql执行时调用kgllkal,kglpnal函数的情况,遇到一个问题.
--//我发现执行kgllkal,kglpnal会访问一个句柄,对象是一串数字,这一串数字表示怎么,做一个简单探究并做一个记录.
1.环境:
SYS@book> @ver2
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 21.0.0.0.0
BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
2.问题提出:
--//简单执行如下:select * from dept where deptno=20;我发现会访问如下句柄:
SYS@book> @ kglob 0 3095809875
==============================
INST_ID : 1
OWNER :
NAME : 5358706841214419813
DB_LINK :
NAMESPACE : OPTIMIZER DIRECTIVE OWNER
TYPE : CURSOR
NAMESPACE_NUM : 104
NAMESPACE_HEX : 68
SHARABLE_MEM : 0
LOADS : 1
EXECUTIONS : 0
LOCKS : 0
PINS : 0
KEPT : NO
CHILD_LATCH : 20307
INVALIDATIONS : 0
HASH_VALUE : 3095809875
LOCK_MODE : NONE
PIN_MODE : NONE
STATUS : UNKOWN
TIMESTAMP :
PREVIOUS_TIMESTAMP :
LOCKED_TOTAL : 2
PINNED_TOTAL : 2
PROPERTY :
FULL_HASH_VALUE : d1faee06f59008e2ce16faeeb8864f53
CON_ID : 3
CON_NAME : BOOK01P
ADDR : 000000006E259B40
EDITION :
SQL_ID :
OBJECT_STR : 5358706841214419813
PL/SQL procedure successfully completed.
SYS@book> @ kglob 0 774301578
==============================
INST_ID : 1
OWNER :
NAME : 4448762010415191240
DB_LINK :
NAMESPACE : OPTIMIZER EXPRESSION HEADER
TYPE : Optimizer Expression Header
NAMESPACE_NUM : 137
NAMESPACE_HEX : 89
SHARABLE_MEM : 4032
LOADS : 1
EXECUTIONS : 0
LOCKS : 0
PINS : 0
KEPT : NO
CHILD_LATCH : 59274
INVALIDATIONS : 0
HASH_VALUE : 774301578
LOCK_MODE : NONE
PIN_MODE : NONE
STATUS : VALID
TIMESTAMP :
PREVIOUS_TIMESTAMP :
LOCKED_TOTAL : 2
PINNED_TOTAL : 2
PROPERTY :
FULL_HASH_VALUE : b828739770a0ad397fecb7702e26e78a
CON_ID : 3
CON_NAME : BOOK01P
ADDR : 000000006E255B60
EDITION :
SQL_ID :
OBJECT_STR : 4448762010415191240
PL/SQL procedure successfully completed.
--//还有数字4448762010415191240,13547376130454050250.重复不再列出.
SCOTT@book01p> @o2 dept
owner object_name object_type SEG_PART_NAME status OID D_OID CREATED LAST_DDL_TIME
------ ----------- ----------- ------------- --------- ----- ------ ------------------- -------------------
SCOTT DEPT TABLE VALID 76191 76191 2024-08-16 09:33:38 2024-08-16 09:33:38
SCOTT@book01p> select * from SYS.EXP_HEAD$ where objn=76191;
EXP_ID OBJN SUB_ID FIXED_COST TEXT COL_LIST FLAGS CTIME
-------------------- ----- ------- -------------------- -------- -------- ----- -------------------
1256087081022357994 76191 0 5.51081878534547E-08 "DEPTNO" 1 8 2024-08-16 09:35:07
13547376130454050250 76191 0 5.51081878534547E-08 "DNAME" 2 8 2024-08-16 09:35:07
4448762010415191240 76191 0 5.51081878534547E-08 "LOC" 3 8 2024-08-16 09:35:07
--//前面的数字可以对上,感觉这样成本有点大,假设1个表有许多字段,简单select * 查询,岂不是要创建许多chunk.
--//这些数字如何命名呢?
SCOTT@book01p> @ind2 sys.exp_head$
Display indexes where table or index name matches sys.exp_head$...
TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC
----------- ---------- ----------- ---- ------------------------------ ----
SYS EXP_HEAD$ I_EXP_HEAD$ 1 EXP_ID
INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE UNIQ STATUS PART TEMP H LFBLKS NDK NUM_ROWS CLUF LAST_ANALYZED DEGREE VISIBILIT
----------- ---------- ----------- ---------- ---- ------ ---- ---- -- ---------- ------------- ---------- ---------- ------------------- ------ ---------
SYS EXP_HEAD$ I_EXP_HEAD$ NORMAL YES VALID NO N 1 1 201 201 114 2024-08-22 08:53:08 1 VISIBLE
--//exp_id是唯一索引,不知道该数值如何计算的.
--//应该通过某种方式计算获得,oracle没有公开算法,也许是结合表,字段,schema等信息组成的md5信息,取的
--//2^64 = 18446744073709551616,至少16位信息.也许以后有机会做这方面的探究.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3025928/ ,如需转载,请注明出处,否则将追究法律责任。