列出数据库中子表上没有对应索引的外键

来源:互联网 发布:数控机床编程入门基础 编辑:程序博客网 时间:2024/06/03 22:48

from http://www.askmaclean.com/archives/list-foreign-keys-with-no-matching-index-on-child-table-causes-locks.html

[sql] view plaincopy
  1. REM  List foreign keys with no matching index on child table - causes locks  
  2.   
  3. set linesize 150;  
  4.   
  5. col owner for a20;  
  6. col COLUMN_NAME for a20;  
  7.   
  8. SELECT C.OWNER, C.CONSTRAINT_NAME, C.TABLE_NAME, CC.COLUMN_NAME, C.STATUS  
  9.   FROM DBA_CONSTRAINTS C, DBA_CONS_COLUMNS CC  
  10.  WHERE C.CONSTRAINT_TYPE = 'R'  
  11.    AND C.OWNER NOT IN ('SYS',  
  12.                        'SYSTEM',  
  13.                        'SYSMAN',  
  14.                        'EXFSYS',  
  15.                        'WMSYS',  
  16.                        'OLAPSYS',  
  17.                        'OUTLN',  
  18.                        'DBSNMP',  
  19.                        'ORDSYS',  
  20.                        'ORDPLUGINS',  
  21.                        'MDSYS',  
  22.                        'CTXSYS',  
  23.                        'AURORA$ORB$UNAUTHENTICATED',  
  24.                        'XDB',  
  25.                        'FLOWS_030000',  
  26.                        'FLOWS_FILES')  
  27.    AND C.OWNER = CC.OWNER  
  28.    AND C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME  
  29.    AND NOT EXISTS  
  30.  (SELECT 'x'  
  31.           FROM DBA_IND_COLUMNS IC  
  32.          WHERE CC.OWNER = IC.TABLE_OWNER  
  33.            AND CC.TABLE_NAME = IC.TABLE_NAME  
  34.            AND CC.COLUMN_NAME = IC.COLUMN_NAME  
  35.            AND CC.POSITION = IC.COLUMN_POSITION  
  36.            AND NOT EXISTS  
  37.          (SELECT OWNER, INDEX_NAME  
  38.                   FROM DBA_INDEXES I  
  39.                  WHERE I.TABLE_OWNER = C.OWNER  
  40.                    AND I.INDEX_NAME = IC.INDEX_NAME  
  41.                    AND I.OWNER = IC.INDEX_OWNER  
  42.                    AND (I.STATUS = 'UNUSABLE' OR  
  43.                        I.PARTITIONED = 'YES' AND EXISTS  
  44.                         (SELECT 'x'  
  45.                            FROM DBA_IND_PARTITIONS IP  
  46.                           WHERE STATUS = 'UNUSABLE'  
  47.                             AND IP. INDEX_OWNER = I. OWNER  
  48.                             AND IP. INDEX_NAME = I. INDEX_NAME  
  49.                          UNION ALL  
  50.                          SELECT 'x'  
  51.                            FROM DBA_IND_SUBPARTITIONS ISP  
  52.                           WHERE STATUS = 'UNUSABLE'  
  53.                             AND ISP. INDEX_OWNER = I. OWNER  
  54.                             AND ISP. INDEX_NAME = I. INDEX_NAME))))  
  55.  ORDER BY 1, 2  
0 0
原创粉丝点击