oracle数据字典表中有哪些索引

时间:2010-02-26 10:15:42

标签: oracle indexing data-dictionary

如何找出oracle数据字典表本身(例如all_tables或all_source的列)上设置的索引(如果有)?

2 个答案:

答案 0 :(得分:3)

ALL_TABLES和ALL_SOURCE实际上是视图。如果您拥有权限,则可以查看其来源:

SQL> select text from all_views where view_name='ALL_TABLES';

TEXT
--------------------------------------------------------------------------------
select u.name, o.name,decode(bitand(t.property, 2151678048), 0, ts.name, null),
       decode(bitand(t.property, 1024), 0, null, co.name),
       decode((bitand(t.property, 512)+bitand(t.flags, 536870912)),
              0, null, co.name),
       decode(bitand(t.trigflag, 1073741824), 1073741824, 'UNUSABLE', 'VALID'),
       decode(bitand(t.property, 32+64), 0, mod(t.pctfree$, 100), 64, 0, null),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
          decode(bitand(t.property, 32+64), 0, t.pctused$, 64, 0, null)),
       decode(bitand(t.property, 32), 0, t.initrans, null),
       decode(bitand(t.property, 32), 0, t.maxtrans, null),
       s.iniexts * ts.blocksize,
       decode(bitand(ts.flags, 3), 1, to_number(NULL),
                                      s.extsize * ts.blocksize),
       s.minexts, s.maxexts,
       decode(bitand(ts.flags, 3), 1, to_number(NULL),
                                      s.extpct),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
         decode(bitand(o.flags, 2), 2, 1, decode(s.lists, 0, 1, s.lists))),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
         decode(bitand(o.flags, 2), 2, 1, decode(s.groups, 0, 1, s.groups))),
       decode(bitand(t.property, 32+64), 0,
                decode(bitand(t.flags, 32), 0, 'YES', 'NO'), null),
       decode(bitand(t.flags,1), 0, 'Y', 1, 'N', '?'),
       t.rowcnt,
       decode(bitand(t.property, 64), 0, t.blkcnt, null),
       decode(bitand(t.property, 64), 0, t.empcnt, null),
       decode(bitand(t.property, 64), 0, t.avgspc, null),
       t.chncnt, t.avgrln, t.avgspc_flb,
       decode(bitand(t.property, 64), 0, t.flbcnt, null),
       lpad(decode(t.degree, 32767, 'DEFAULT', nvl(t.degree,1)),10),
       lpad(decode(t.instances, 32767, 'DEFAULT', nvl(t.instances,1)),10),
       lpad(decode(bitand(t.flags, 8), 8, 'Y', 'N'),5),
       decode(bitand(t.flags, 6), 0, 'ENABLED', 'DISABLED'),
       t.samplesize, t.analyzetime,
       decode(bitand(t.property, 32), 32, 'YES', 'NO'),
       decode(bitand(t.property, 64), 64, 'IOT',
               decode(bitand(t.property, 512), 512, 'IOT_OVERFLOW',
               decode(bitand(t.flags, 536870912), 536870912, 'IOT_MAPPING', null
))),
       decode(bitand(o.flags, 2), 0, 'N', 2, 'Y', 'N'),
       decode(bitand(o.flags, 16), 0, 'N', 16, 'Y', 'N'),
       decode(bitand(t.property, 8192), 8192, 'YES',
              decode(bitand(t.property, 1), 0, 'NO', 'YES')),
       decode(bitand(o.flags, 2), 2, 'DEFAULT',
             decode(s.cachehint, 0, 'DEFAULT', 1, 'KEEP', 2, 'RECYCLE', NULL)),
       decode(bitand(t.flags, 131072), 131072, 'ENABLED', 'DISABLED'),
       decode(bitand(t.flags, 512), 0, 'NO', 'YES'),
       decode(bitand(t.flags, 256), 0, 'NO', 'YES'),
       decode(bitand(o.flags, 2), 0, NULL,
          decode(bitand(t.property, 8388608), 8388608,
                 'SYS$SESSION', 'SYS$TRANSACTION')),
       decode(bitand(t.flags, 1024), 1024, 'ENABLED', 'DISABLED'),
       decode(bitand(o.flags, 2), 2, 'NO',
           decode(bitand(t.property, 2147483648), 2147483648, 'NO',
              decode(ksppcv.ksppstvl, 'TRUE', 'YES', 'NO'))),
       decode(bitand(t.property, 1024), 0, null, cu.name),
       decode(bitand(t.flags, 8388608), 8388608, 'ENABLED', 'DISABLED'),
       decode(bitand(t.property, 32), 32, null,
                decode(bitand(s.spare1, 2048), 2048, 'ENABLED', 'DISABLED')),
       decode(bitand(o.flags, 128), 128, 'YES', 'NO')
from sys.user$ u, sys.ts$ ts, sys.seg$ s, sys.obj$ co, sys.tab$ t, sys.obj$ o,
     sys.obj$ cx, sys.user$ cu, x$ksppcv ksppcv, x$ksppi ksppi
where o.owner# = u.user#
  and o.obj# = t.obj#
  and bitand(t.property, 1) = 0
  and bitand(o.flags, 128) = 0
  and t.bobj# = co.obj# (+)
  and t.ts# = ts.ts#
  and t.file# = s.file# (+)
  and t.block# = s.block# (+)
  and t.ts# = s.ts# (+)
  and (o.owner# = userenv('SCHEMAID')
       or o.obj# in
            (select oa.obj#
             from sys.objauth$ oa
             where grantee# in ( select kzsrorol
                                 from x$kzsro
                               )
            )
       or /* user has system privileges */
         exists (select null from v$enabledprivs
                 where priv_number in (-45 /* LOCK ANY TABLE */,
                                       -47 /* SELECT ANY TABLE */,
                                       -48 /* INSERT ANY TABLE */,
                                       -49 /* UPDATE ANY TABLE */,
                                       -50 /* DELETE ANY TABLE */)
                 )
      )
  and t.dataobj# = cx.obj# (+)
  and cx.owner# = cu.user# (+)
  and ksppi.indx = ksppcv.indx
  and ksppi.ksppinm = '_dml_monitoring_enabled'

如您所见,那里引用了许多表,包括SYS.OBJ $。现在,您可以在这些上查找索引:

SQL> select index_name from all_indexes where table_name='OBJ$' and owner='SYS';

INDEX_NAME
------------------------------
I_OBJ1
I_OBJ2
I_OBJ3

等等。

答案 1 :(得分:1)

要标记Tony Andrew的答案,数据字典中的许多表都存储在B *树集群中:

(as sys as sysdba)

SQL> SELECT TABLE_NAME, CLUSTER_NAME FROM USER_TABLES 
  1   WHERE CLUSTER_NAME IN (SELECT CLUSTER_NAME FROM USER_CLUSTERS) 
  2   ORDER BY CLUSTER_NAME;

TABLE_NAME                     CLUSTER_NAME
------------------------------ ------------------------------
CCOL$                          C_COBJ#
CDEF$                          C_COBJ#
UET$                           C_FILE#_BLOCK#
SEG$                           C_FILE#_BLOCK#
SLOG$                          C_MLOG#
MLOG$                          C_MLOG#
VIEWTRCOL$                     C_OBJ#
ICOLDEP$                       C_OBJ#
LIBRARY$                       C_OBJ#
OPQTYPE$                       C_OBJ#
REFCON$                        C_OBJ#
NTAB$                          C_OBJ#
TYPE_MISC$                     C_OBJ#
ATTRCOL$                       C_OBJ#
SUBCOLTYPE$                    C_OBJ#
COLTYPE$                       C_OBJ#
LOB$                           C_OBJ#
TAB$                           C_OBJ#
CLU$                           C_OBJ#
COL$                           C_OBJ#
ICOL$                          C_OBJ#
IND$                           C_OBJ#
HISTGRM$                       C_OBJ#_INTCOL#
RGROUP$                        C_RG#
RGCHILD$                       C_RG#
TYPE$                          C_TOID_VERSION#
PARAMETER$                     C_TOID_VERSION#
ATTRIBUTE$                     C_TOID_VERSION#
RESULT$                        C_TOID_VERSION#
METHOD$                        C_TOID_VERSION#
COLLECTION$                    C_TOID_VERSION#
FET$                           C_TS#
TS$                            C_TS#
TSQ$                           C_USER#
USER$                          C_USER#
SMON_SCN_TIME                  SMON_SCN_TO_TIME

因此,例如,FET$列上的$TS(可用范围)和TS#(表空间)上都有一个“未记录的”索引。