Som med de flesta relationsdatabaser kan det uppstå en situation där du behöver se den underliggande metadatan och titta igenom den faktiska tabelllistan och ägandet av din databas. Tack och lov finns det flera sätt att utföra denna relativt enkla uppgift i Oracle, så vi ska kort utforska varje alternativ nedan för att hitta det som bäst passar dina behov.
Vad är Oracle Data Dictionaries?
En dataordbok i Oracle är en samling skrivskyddade tabeller som ger användbar information om databasen inklusive scheman, användare, privilegier och till och med revisionsdata. Värdena i dessa lagrade ordböcker uppdateras automatiskt av Oracle när en sats exekveras på servern som modifierar data.
Därifrån kan de skrivskyddade ordböckerna läsas och frågas precis som vilken standardtabell som helst, vilket som vi kommer att se nedan ger mycket användbar funktionalitet.
Visa tabeller som ägs av nuvarande användare
På den mest grundläggande nivån kanske du vill se en lista över alla tabeller som ägs av den nuvarande Oracle-användaren. Detta kan åstadkommas med en enkel SELECT
fråga på USER_TABLES
dataordbok.
När du är ansluten till Oracle, utfärda detta uttalande:
SELECT
table_name, owner
FROM
user_tables
ORDER BY
owner, table_name
Detta kommer att returnera en lista över alla tabeller som den aktuella användaren är ägare till, enligt vad som anges i owner
kolumn.
Visa tabeller som är tillgängliga för nuvarande användare
I en situation där du bara är intresserad av vilka tabeller den nuvarande Oracle-användaren har åtkomst för att, oavsett ägande, använder du ALL_TABLES
dataordbok istället.
SELECT
table_name, owner
FROM
all_tables
ORDER BY
owner, table_name
Det är troligt att den här frågan kommer att ge mycket fler resultat än du är intresserad av eftersom du ser allt som är tillgängligt på distans för användaren, så du kanske vill begränsa din fråga genom att ange en lämplig owner
, som så:
SELECT
table_name, owner
FROM
all_tables
WHERE
owner='schema_name'
ORDER BY
owner, table_name
Visa alla tabeller
Slutligen, när du absolut behöver se alla bord i systemet behöver du inte leta längre än de stora och kraftfulla DBA_TABLES
dataordbok.
SELECT
table_name, owner
FROM
dba_tables
WHERE
owner='schema_name'
ORDER BY
owner, table_name
Det är viktigt att notera att denna sista DBA_TABLES
ordbok kan kräva användarbehörigheter utöver vad den aktuella användaren har. Om det behövs kan du behöva beviljas SELECT ANY DICTIONARY
privilegium eller SELECT_CATALOG_ROLE
roll. Mer information om att bevilja dessa privilegier finns i den officiella dokumentationen.