ITPub博客

首页 > 数据库 > Oracle > [20260818]建立完善dc_objects.sql脚本.txt

[20260818]建立完善dc_objects.sql脚本.txt

原创 Oracle 作者:lfree 时间:2026-08-19 20:50:36 0 删除 编辑

[20260818]建立完善dc_objects.sql脚本.txt

--//原先写的脚本有点问题user_id=1,dba_users以及cdb_users视图没有public用户,实际上public是特殊角色。
--//使用CONTAINERS(sys.user$)代替user$.

--//另外即使使用CONTAINERS(sys.user$),查询也不包括CON_ID=2,CON_NAME=PDB$SEED的信息。
--//v.con_id=2,username显示SYS。

SYS@book> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 BOOK01P                        READ WRITE NO
--//缺省CON_NAME='PDB$SEED',打开模式READ ONLY,CONTAINERS(sys.user$)一样也不包括CON_ID=2,CON_NAME=PDB$SEED的信息。

$ cat dc_objects.sql
column DC_PROP_NAME format a28
column CACHE_NAME   format a20
column EXISTENT     format a8
column KEY_OID$     format a32
column dc_obj_name  format a32
column dc_obj_name1 format a32
column username     format a18
column con_id       format 99999
column indx         format 99999
column hash         format 99999
column key          noprint
column txn          noprint

 SELECT *
    FROM (SELECT --TO_NUMBER ( (SUBSTR (key, 7, 2) || SUBSTR (key, 5, 2) || SUBSTR (key, 3, 2) || SUBSTR (key, 1, 2)), 'XXXXXXXX') Schema_User_ID ,
                 DECODE( v.con_id,2,'SYS',
                 (
                   SELECT name FROM CONTAINERS(sys.user$) u
                   WHERE u.con_id= v.con_id AND u.user# =
                            TO_NUMBER (
                               (SUBSTR (key, 7, 2) || SUBSTR (key, 5, 2) || SUBSTR (key, 3, 2) || SUBSTR (key, 1, 2))
                              ,'XXXXXXXX')))
                    username
                --,RTRIM (UTL_RAW.cast_to_varchar2 (SUBSTR (v.key, 13)), CHR (0)) dc_obj_name
                --,TO_NUMBER (TRIM (BOTH '0' FROM SUBSTR (key, 11, 2) || SUBSTR (key, 9, 2)), 'XXXX') key_str_len
                ,UTL_RAW.cast_to_varchar2 (SUBSTR (v.key, 13,2*TO_NUMBER ( SUBSTR (key, 11, 2) || SUBSTR (key, 9, 2), 'XXXX'))) dc_obj_name
                ,TO_NUMBER ( SUBSTR (key, 11, 2) || SUBSTR (key, 9, 2), 'XXXX') key_str_len
                ,'0x'||TO_CHAR(v.hash,'FMxxxxx') hash_hex
                ,v.*
            FROM v$rowcache_parent v
           WHERE cache# IN (8,11)
    )
   WHERE (&1)
ORDER BY key;

column key print
column hash clear

--//测试例子:

SYS@book> @ dc/dc_objects "DC_OBJ_NAME='V$MYSTAT' and con_id=1"

USERNAME           DC_OBJ_NAME                      KEY_STR_LEN HASH_HEX   INDX   HASH ADDRESS              CACHE# CACHE_NAME           EXISTENT  LOCK_MODE LOCK_REQUEST SADDR            INST_LOCK_REQUEST INST_LOCK_RELEASE IN INST_LOC INST_LOC CON_ID
------------------ -------------------------------- ----------- -------- ------ ------ ---------------- ---------- -------------------- -------- ---------- ------------ ---------------- ----------------- ----------------- -- -------- -------- ------
PUBLIC             V$MYSTAT                                   8 0x5448     5719  21576 0000000066C2C220          8 dc_objects           Y                 0            0 00                               0                 0    00       00            1
PUBLIC             V$MYSTAT                                   8 0x11fc     1896   4604 0000000066C2C220          8 dc_objects           Y                 0            0 00                               0                 0    00       00            1

SYS@book> @ dc/dc_objects "con_id=2 and rownum<=3 "

USERNAME           DC_OBJ_NAME                      KEY_STR_LEN HASH_HEX   INDX   HASH ADDRESS              CACHE# CACHE_NAME           EXISTENT  LOCK_MODE LOCK_REQUEST SADDR            INST_LOCK_REQUEST INST_LOCK_RELEASE IN INST_LOC INST_LOC CON_ID
------------------ -------------------------------- ----------- -------- ------ ------ ---------------- ---------- -------------------- -------- ---------- ------------ ---------------- ----------------- ----------------- -- -------- -------- ------
SYS                I_OBJ3                                     6 0x501      1694   1281 000000006FD1B990          8 dc_objects           Y                 0            0 00                               0                 0    00       00            2
SYS                I_FILE#_BLOCK#                            14 0x26e      1656    622 000000006FD58C60          8 dc_objects           Y                 0            0 00                               0                 0    00       00            2
SYS                I_HH_OBJ#_INTCOL#                         17 0x4b       1617     75 000000006FC26FF0          8 dc_objects           Y                 0            0 00                               0                 0    00       00            2

--//顺便改写dc_objects11g.sql脚本:

$ cat  dc_objects11g.sql
column DC_PROP_NAME format a28
column CACHE_NAME   format a20
column EXISTENT     format a8
column KEY_OID$     format a32
column dc_obj_name  format a32
column dc_obj_name1 format a32
column username     format a20
column con_id       format 99999
column indx         format 99999
column hash         format 99999
column key          noprint

  SELECT *
    FROM (SELECT --TO_NUMBER ( (SUBSTR (key, 7, 2) || SUBSTR (key, 5, 2) || SUBSTR (key, 3, 2) || SUBSTR (key, 1, 2)) ,'XXXXXXXX') Schema_User_ID,
                (SELECT name username
                     FROM user$
                    WHERE user# =
                             TO_NUMBER (
                                (SUBSTR (key, 7, 2) || SUBSTR (key, 5, 2) || SUBSTR (key, 3, 2) || SUBSTR (key, 1, 2))
                               ,'XXXXXXXX'))
                    username
                --,RTRIM (UTL_RAW.cast_to_varchar2 (SUBSTR (v.key, 13)), CHR (0)) dc_obj_name
                --,TO_NUMBER (TRIM (BOTH '0' FROM SUBSTR (key, 11, 2) || SUBSTR (key, 9, 2)), 'XXXX') key_str_len
                ,UTL_RAW.cast_to_varchar2 (
                    SUBSTR (v.key, 13, 2 * TO_NUMBER (SUBSTR (key, 11, 2) || SUBSTR (key, 9, 2), 'XXXX')))
                    dc_obj_name
                ,TO_NUMBER (SUBSTR (key, 11, 2) || SUBSTR (key, 9, 2), 'XXXX') key_str_len
                ,'0x' || TO_CHAR (v.hash, 'FMxxxxx') hash_hex
                ,v.*
            FROM v$rowcache_parent v
           WHERE cache# IN (8, 11))
   WHERE (&1)
ORDER BY key;

column key print
column hash clear

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3180183/ ,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969275