Som med de fleste relationelle databaser, kan der opstå en situation, hvor du har brug for at se de underliggende metadata og gennemse den faktiske tabelliste og ejerskab af din database. Heldigvis er der flere måder at udføre denne relativt enkle opgave på i Oracle, så vi vil kort undersøge hver mulighed nedenfor for at finde den, der bedst passer til dine behov.
Hvad er Oracle Data Dictionaries?
En dataordbog i Oracle er en samling af skrivebeskyttede tabeller, der giver nyttige oplysninger om databasen, herunder skemaer, brugere, privilegier og endda revisionsdata. Værdierne i disse lagrede ordbøger opdateres automatisk af Oracle, hver gang en sætning udføres på serveren, der ændrer data.
Derfra kan de skrivebeskyttede ordbøger læses og forespørges ligesom enhver standardtabel, der, som vi vil se nedenfor, giver nogle meget nyttige funktioner.
Visning af tabeller, der ejes af den nuværende bruger
På det mest grundlæggende niveau ønsker du måske at se en liste over alle borde ejet af den nuværende Oracle-bruger. Dette kan opnås med en simpel SELECT
forespørgsel på USER_TABLES
dataordbog.
Når du har oprettet forbindelse til Oracle, skal du udsende denne erklæring:
SELECT
table_name, owner
FROM
user_tables
ORDER BY
owner, table_name
Dette vil returnere en liste over alle tabeller, som den aktuelle bruger er ejer af, som angivet i owner
kolonne.
Visning af tabeller, der er tilgængelige for nuværende bruger
I en situation, hvor du kun er interesseret i, hvilke tabeller den nuværende Oracle-bruger har adgang til, uanset ejerskab, skal du bruge ALL_TABLES
dataordbog i stedet.
SELECT
table_name, owner
FROM
all_tables
ORDER BY
owner, table_name
Det er sandsynligt, at denne forespørgsel vil returnere langt flere resultater, end du er interesseret i, da du ser alt, selv fjerntilgængeligt for brugeren, så du ønsker måske at begrænse din forespørgsel ved at angive en passende owner
, sådan:
SELECT
table_name, owner
FROM
all_tables
WHERE
owner='schema_name'
ORDER BY
owner, table_name
Visning af alle tabeller
Til sidst, når du absolut har brug for at se hver tabell i systemet skal du ikke lede længere end den store og kraftfulde DBA_TABLES
dataordbog.
SELECT
table_name, owner
FROM
dba_tables
WHERE
owner='schema_name'
ORDER BY
owner, table_name
Det er vigtigt at bemærke, at denne sidste DBA_TABLES
ordbogen kan kræve brugerrettigheder ud over, hvad den aktuelle bruger har. Hvis det er nødvendigt, skal du muligvis tildeles SELECT ANY DICTIONARY
privilegiet eller SELECT_CATALOG_ROLE
rolle. Flere oplysninger om tildeling af disse privilegier kan findes i den officielle dokumentation.