[20240823]21c数字对象是什么.txt

来源:这里教程网 时间:2026-03-03 20:34:18 作者:

[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位信息.也许以后有机会做这方面的探究.

相关推荐