如何获取有关Oracle中索引和表所有者的信息?

时间:2011-10-05 23:40:40

标签: sql oracle

我想编写一个select语句来显示表用户索引的数据字典中存在的index_name,table_name,table_owner和uniqueness。任何帮助都会很棒。我的问题是我无法找到如何显示index_name和表所有者。

SELECT owner, table_name   FROM dba_tables;

这提供了大部分内容。

5 个答案:

答案 0 :(得分:51)

根据docs,您可以这样做:

select INDEX_NAME, TABLE_OWNER, TABLE_NAME, UNIQUENESS from USER_INDEXES

select INDEX_NAME, TABLE_OWNER, TABLE_NAME, UNIQUENESS from ALL_INDEXES

如果你想要所有索引......

答案 1 :(得分:9)

 select index_name, column_name
 from user_ind_columns
 where table_name = 'NAME';

或者使用它:

select TABLE_NAME, OWNER 
from SYS.ALL_TABLES 
order by OWNER, TABLE_NAME 

对于索引:

select INDEX_NAME, TABLE_NAME, TABLE_OWNER 
from SYS.ALL_INDEXES 
order by TABLE_OWNER, TABLE_NAME, INDEX_NAME

答案 2 :(得分:1)

以下内容可能会让您满意:

SELECT
    index_owner, index_name, table_name, column_name, column_position
FROM DBA_IND_COLUMNS
ORDER BY
    index_owner, 
    table_name,
    index_name,
    column_position
    ;

对于我的用例,我想要它们在索引中的column_names和顺序(这样我可以在迁移到AWS后在不同的数据库引擎中重新创建它们)。以下是我使用的内容,以防其他人使用:

SELECT
    index_name, table_name, column_name, column_position
FROM DBA_IND_COLUMNS
WHERE
    INDEX_OWNER = 'FOO'
    AND TABLE_NAME NOT LIKE '%$%'
ORDER BY
    table_name,
    index_name,
    column_position
    ;

答案 3 :(得分:0)

下面是两个简单的查询,您可以使用它们查询在Oracle表中创建的索引。

select index_name
  from dba_indexes
 where table_name='&TABLE_NAME'
   and owner='&TABLE_OWNER';
select index_name 
  from user_indexes 
 where table_name='&TABLE_NAME';

请在下面查看更多详细信息和索引大小。 Index on a table and its size in Oracle

答案 4 :(得分:0)

以下内容为我提供了帮助,因为我没有DBA访问权限,并且还希望使用列名。

请参阅:https://dataedo.com/kb/query/oracle/list-table-indexes

select ind.table_owner || '.' || ind.table_name as "TABLE",
       ind.index_name,
       LISTAGG(ind_col.column_name, ',')
            WITHIN GROUP(order by ind_col.column_position) as columns,
       ind.index_type,
       ind.uniqueness
from sys.all_indexes ind
join sys.all_ind_columns ind_col
           on ind.owner = ind_col.index_owner
           and ind.index_name = ind_col.index_name
where ind.table_owner not in ('ANONYMOUS','CTXSYS','DBSNMP','EXFSYS',
       'MDSYS', 'MGMT_VIEW','OLAPSYS','OWBSYS','ORDPLUGINS', 'ORDSYS',
       'SI_INFORMTN_SCHEMA','SYS','SYSMAN','SYSTEM', 'TSMSYS','WK_TEST',
       'WKPROXY','WMSYS','XDB','APEX_040000','APEX_040200',
       'DIP', 'FLOWS_30000','FLOWS_FILES','MDDATA', 'ORACLE_OCM', 'XS$NULL',
       'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR', 'PUBLIC',
       'LBACSYS', 'OUTLN', 'WKSYS', 'APEX_PUBLIC_USER')
    -- AND ind.table_name='TableNameGoesHereIfYouWantASpecificTable'
group by ind.table_owner,
         ind.table_name,
         ind.index_name,
         ind.index_type,
         ind.uniqueness 
order by ind.table_owner,
         ind.table_name;