1

Oracleデータディクショナリテーブル自体に(たとえば、all_tablesまたはall_sourceの列に)インデックスが設定されているかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

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

等々。

于 2010-02-26T10:23:48.803 に答える
1

Tony Andrewの答えにタグを付けるために、データディクショナリのテーブルの多くはB*treeクラスターに格納されています。

(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#ます。

于 2010-02-26T15:27:14.817 に答える