Hallo,
ich möchte gerne mehr über die Tabellen-Struktur einer
Oracle-Instanz wissen.
Dazu zählt natürlich auch die Abfrage über deren Index und ob
der Unique oder Nonunique ist.
Dummerweise habe ich mit meinem User keinen Zugriff auf die dba_*
Tabellen.
Ich sehe nur die user_*-Tabellen.
Wie bekomme ich denn raus, ob ein Index unique ist oder nicht?
Momentan sieht mein Select so aus:
select INDEX_NAME, TABLE_NAME, COLUMN_NAME, user_ind_columns.COLUMN_POSITION, DESCEND
from user_ind_columns
group by INDEX_NAME, TABLE_NAME, COLUMN_NAME, COLUMN_POSITION, DESCEND
order by table_name, COLUMN_POSITION
Dummerweise habe ich mit meinem User keinen Zugriff auf die
dba_*
Tabellen.
Ich sehe nur die user_*-Tabellen.
Das ist eigentlich egal, wenn dich nur die Schemadaten (hier Tabellen und Indices interessieren, die im aktuellen User liegen. Für Schemadaten anderer User gibt’s dann noch die ALL_*-Views, allerdings liefern die dann nur Daten, auf die du laut Privileges auch Zugriff hast…
Wie bekomme ich denn raus, ob ein Index unique ist oder nicht?
Das steht in *_INDEXES
Momentan sieht mein Select so aus:
select INDEX_NAME, TABLE_NAME, COLUMN_NAME,
user_ind_columns.COLUMN_POSITION, DESCEND
from user_ind_columns
group by INDEX_NAME, TABLE_NAME, COLUMN_NAME,
COLUMN_POSITION, DESCEND
order by table_name, COLUMN_POSITION
Und so siehst du die Uniqueness:
select i.index_name, i.uniqueness, i.table_name, c.column_name, c.column_position, c.descend
from user_indexes i, user_ind_columns c
where i.index_name=c.index_name
order by i.table_name, c.column_position;
Hier das Ganze noch etwas übersichtlicher (vor allem mit brauchbarer Sortierung):
select decode(c.column\_position, 1, i.index\_name, null),
decode(c.column\_position, 1, i.uniqueness, null),
decode(c.column\_position, 1, i.table\_name, null),
c.column\_name,
c.column\_position,
c.descend
from user\_indexes i, user\_ind\_columns c
where i.index\_name=c.index\_name
order by i.table\_name, i.index\_name,c.column\_position;