Какие индексы есть в таблицах словаря данных Oracle - PullRequest
1 голос
/ 26 февраля 2010

Как я могу узнать, какие индексы, если таковые имеются, установлены в самих таблицах словаря данных Oracle (например, в столбцах all_tables или all_source)?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2010

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 голос
/ 26 февраля 2010

Чтобы отметить ответ Тони Эндрю, многие таблицы в словаре данных хранятся в кластерах дерева B *:

(как sys, так и 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#.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...