ITPub博客

首页 > 数据库 > Oracle > [20240823]21c数字对象是什么.txt

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

原创 Oracle 作者:lfree 时间:2024-08-25 20:26:28 0 删除 编辑

[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/ ,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7970878