Das Oracle
wird entzaubert
welche Oracle Version liegt vor
um dies herrauszufinden sind wir mit einem der Tools verbunden und setzten die ersten Befehle ab:
set head off feed off pages 0 serveroutput on
col banner format a72 wrap
select banner
from sys.v_$version;
select ' With the '||parameter||' option'
from sys.v_$option
where value = 'TRUE';
select ' The '||parameter||' option is not installed'
from sys.v_$option
where value <> 'TRUE';
begin
dbms_output.put_line('Port String: '||dbms_utility.port_string);
end;
/
set head on feed on
Aufbau einer 9i Datenbank
SGA (System Global Area)[1] bezeichnete Bereich unterteilt sich in Sub-Caches, die unterschiedliche Aufgaben erfüllen. Wir greifen hier speziell drei für den Prozess der Anfrageoptimierung relevante Cache Bereiche heraus: Den Data Dictionary Cache, den Library Cache sowie den DB Block Cache.
Das Data Dictionary wird innerhalb der Data Files einer Oracle Datenbank gespeichert. Es beinhaltet eine Auflistung aller Informationen zu allen logischen und physischen Objekten einer Datenbank. Hier werden Informationen bereitgestellt, die für ein DBMS unerlässlich sind: Welche Datenbankobjekte (z.B. Tabellen, Indizes, Views) es gibt, über welche Spalten und Datentypen diese verfügen, welche Integritätsconstraints[2] implementiert sind und welche Zugriffsrechte die einzelnen Benutzer haben.
Während der Verarbeitung eines SQL Statements werden diese Informationen regelmäßig benötigt. Wird ein Statement an die Datenbankinstanz gesandt, so überprüft das Datenbanksystem dessen syntaktische Korrektheit sowie das Vorhandensein der im Statement angesprochenen Objekte. Der Data Dictionary Cache hält daher diese Informationen in der SGA.
Data Dictionaries
Über eine ältere Version findet mna schnell diese Infos ... Eine vollständige Auflistung aller Dictionary Views befindet sich im Oracle7(TM) Server Administrator's Guide, Appendix B.
user_objects Alle Objekte, die ein Benutzer angelegt hat. user_constraints user_cons_columns Alle Constraints, die im Schema eines Benutzers definiert sind. session_privs Alle Systemprivilegien, die ein Benutzer aktuell hat. session_roles Alle Rollen, die ein Benutzer aktuell nutzt. user_role_privs Alle Rollen, die ein Benutzer nutzen kann. user_tab_privs_made Alle Privilegien, die ein Benutzer vergeben hat. user_tab_privs_recd Alle Privilegien, die ein Benutzer erhalten hat. role_tab_privs. Alle Privilegien, die eine Rolle enthält
Auswahl aus weiteren Tabellen und Views, die das Data Dictionary bilden: ALL_CATALOG, USER_CATALOG, ALL_OBJECTS, USER_OBJECTS ALL_SOURCE, USER_SOURCE, ALL_ERRORS, USER_ERRORS ALL_USERS, USER_USERS ALL_TABLES, USER_TABLES, ALL_TAB_COLUMNS, USER_TAB_COLUMNS ALL_COL_COMMENTS, ALL_TAB_COMMENTS, USER_TAB_COMMENTS, USER_COL_COMMENTS ALL_VIEWS, USER_VIEWS ALL_SEQUENCES, USER_SEQUENCES ALL_CONSTRAINTS, USER_CONSTRAINTS, USER_CONS_COLUMNS ALL_TRIGGERS, USER_TRIGGERS, ALL_TRIGGER_COLS, USER_TRIGGER_COLS ALL_TAB_PRIVS, USER_TAB_PRIVS, USER_TAB_PRIVS_MADE, USER_TAB_PRIVS_RECD, TABLE_PRIVILEGES, COLUMN_PRIVILEGES, USER_COL_PRIVS, USER_COL_PRIVS_RECD
Will man also wissen welche Tables "man" angelegt wurden reicht ein
SELECT table_name FROM user_tables;
wer es noch genauer braucht kann sich so weiterhangeln:
#einstellungen für sql-plus COLUMN table_name FORMAT A30 COLUMN comments FORMAT A45 WORD_WRAP SELECT table_name, comments FROM dictionary ORDER BY table_name; SELECT table_name, comments FROM dictionary WHERE table_name LIKE '%TABLE%' ORDER BY table_name SELECT column_name, comments FROM dict_columns WHERE table_name = 'ALL_TAB_COLUMNS';
Bei wer weiss-was steht es dann, wie ich finde, sehr deutlich: oracle sql SQL*Plus Daneben gibt es Infos zu den Objekten des eingeloggten Benutzers. Diese fangen mit USER_ an.
Du kennst sicher USER_TABLES (alle meine Tabellen), ALL_TABLES (alle Tabellen, die ich sehen kann) und DBA_TABLES (alle Tabellen im System. Analog dazu findest du die Informationen zu allen möglichen Objekten: Views (ALL_VIEWS bzw. USER_VIEWS und DBA_VIEWS), ALL_TAB_COLUMNS, usw. usf.
Beziehungen werden in ALL_CONSTRAINTS abgebildet. Schau dir mal die Doku dazu an. Unter anderem wird da aufgeschlüsselt, ob der Constraint ein Primary Key, ein Foreign Key, ein Unique- oder ein Check-Constraint ist. Bei Foreign Key (Constraint_type='R') steht unter R_OWNER und R_CONSTRAINT_NAME der referenzierte Constraint (der dann ein 'P', Primary, als CONSTRAINT_TYPE trägt).
Übrigens kannst du dir die Namen solcher Tabellen und eine kurze Bemerkung zum Zweck ansehen, wenn du bei DICT suchst und ungefähr weißt, was du suchst:
select * from dict where table_name like '%CONSTRAINT%'
Nun sollte man die entscheidenen Infos über den Aufbau des Datenbanksystems haben. Den Aufbau der Tabellen die und interessieren erhlät man über den describe-Befehl.
Syntax: DESCRIBE Tabellenname Beispiel:
DESCRIBE fh_abbild.dozent
Meine neuen Bookmarks:
-- DetlevLengsfeld 2007-06-28 06:02:06
| /Die ersten Schriite in einem unbekannten Gebiet /PSQL-SQL im schnellen Überblick |
Tags: oracle | database | sql | datadefinition | DataDictionary
Linux/OpenSource DBA-Tools/Python und Debian auf der Suche nach Oracle/Die ersten Schriite in einem unbekannten Gebiet (last edited 2009-12-07 13:25:46 by DetlevLengsfeld)