Oracle Database
Notizen vom Kurs "Oracle Administration" 21.-25. Juni 2010
Oracle Universal Installer
- wird zum Installieren, Aktualisieren oder Deinstallieren von Softwarekomponenten und zum Erstellen einer Datenbank verwendet
- basiert auf einer Java-Engine
Oracle Database Configuration Assistant
- Datenbank erstellen
- Datenbankoptionen konfigurieren
- Datenbanken löschen
- Templates verwalten
SQL *Plus
- Aufruf über
- Administration > Zugehörige Links > iSQL*Plus (Anmelden als Benutzer "SYSTEM" mit Passwort "miro")
- Start > Programme > Oracle > Anwendungsentwicklung > SQL Plus
- über Befehlszeile: "sqlplus system/miro" (Benutzername/Passwort)
- Oracle-Werkzeug, das folgendes ermöglicht:
- Dialog und Manipulation von Datenbanken (z. B. "select sysdate from dual;", Skript laden, Skript speichern, Historie)
- Hoch- und Herunterfahren von Datenbanken, Erstellung von Abfragen, Hinzufügen von Zeilen usw.
- Ist eine Teilmenge der SQL-Standardsprache mit speziellen Ergänzungen
Oracle Enterprise Manager (Database Control)
- http://<Rechnername>:1158/em
- vordefinierter Benutzer "SYS" (Passwort "miro", anmelden als "SYSDBA") bzw. benutzer "SYSTEM" (Passwort "miro")
- dient als zentralisierte Systemverwaltung für Systemverwalter
- Werkzeug für Verwaltung, Diagnose und Optimierung mehrerer Datenbanken
- Werkzeug zum Verwalten mehrerer Netzwerkknoten und -dienste von verschiedenen Standorten aus
Oracle Server
- ein Datenbank-Management-Syste, das einen offenen, umfassenden und integrierten Ansatz für die Informationsverwaltung bereitstellt
- besteht aus einer Oracle-Instanz und einer Oracle-Datenbank
Oracle-Instanz
- dient dazu, um auf eine Oracle-Datenbank zuzugreifen
- öffnet immer genau eine Datenbank. Es können auch mehrere Instanzen auf dieselbe Datenbank zugreifen, eine Instanz kann aber nie auf mehr als eine Datenbank zugreifen.
- besteht aus Speicher- und Hintergrundprozess-Strukturen
Oracle-Datenbank
- ist eine Zusammenstellung von Daten, die als Einheit betrachtet werden
- besteht aus drei Dateitypen:
- Datendateien
- Kontrolldateien
- Redo Log-Dateien (für Transaktionen)
- weitere Dateistrukturen:
- Parameterdatei (enthält die Eigenschaften der Oracle-Instanz)
- archivierte Redo Log-Dateien (Kopien der Redo Log-Dateien, sofern die Datenbank im Archiver-Modus läuft)
- Passwortdatei (enthält die Benutzer, welche die Oracle-Instanz hoch- und herunterfahren können)
...
Dynamische Performance-Tabellen
- V$CONTROLFILE
- V$DATAFILE
- V$PARAMETER
- V$SGA
- V$TABLESPACE
Kontrolldatei
- Kleine binäre Datei
- Definiert den aktuellen Status der aktuellen Datenbank
- Erforderlich im Status "MOUNT" beim Hochfahren der Datenbank
- Ein Verlust kann "Recovery" notwendig machen
- Ist mit einer ganz bestimmten Datenbank verknüpft
- Die Kontrolldatei sollte redundant gesichert werden über "Administration > Datenbankverwaltung > Speicherung > Kontrolldateien" gesichert werden.
Inhalt
- Datenbankname
- Zeitstempel der Datenbankerstellung
- Namen und Speicherorte von Datendateien und Redo Log-Dateien
- Aktuelle Sequenznummer der Redo Log-Datei
- Checkpoint-Informationen
- Backup-Informationen (z. B. des Recovery Manager)
Spiegeln der Kontrolldatei bei Verwendung von SPFILE
- Änderung von SPFILE (unter Angabe der bestehenden sowie der neuen Kontrolldatei)
ALTER SYSTEM SET control_files=... SCOPE = SPFILE;
- Herunterfahren der Datenbank
shutdown immediate
- Erstellung zusätzlicher Kontrolldateien durch Kopieren der Kontrolldatei
- Hochfahren der Datenbank
startup;
Spiegeln der Kontrolldatei bei Verwendung von PFILE
- Herunterfahren der Datenbank
shutdown immediate
- Erstellung zusätzlicher Kontrolldateien durch Kopieren der Kontrolldatei
- Hinzufügen der Kontrolldateinamen zu PFILE durch Bearbeiten des Parameters "CONTROL_FILES"
CONTROL_FILES=...;
- Hochfahren der Datenbank
startup pfile='c:\oracle\init.ora';
Abrufen der Kontrolldatei-Informationen
- grafische Oberfläche unter "Administration > Datenbankverwaltung > Speicherung > Kontrolldateien"
- Auflisten von Namen und Status für alle Kontrolldateien der Instanz auf
select * from v$controlfile;
- Auflisten von Namen, Status und Speicherort der Kontrolldateien
show parameter control_files;
Verwendung von Redo Log-Dateien
Redo Log-Dateien
- erfassen alle an den Daten vorgenommenen Änderungen
- stellen einen Recovery-Modus bereit
- können in Gruppen organisiert werden, wobei mindestens zwei Gruppen benötigt werden, unter "Administration > Datenbankverwaltung > Speicherung > Redo Log-Gruppen"
Funktionsweise
- Redo Log-Dateien werden in zyklischer Weise verwendet
- Ist eine Redo Log-Datei voll, so wechselt LGWR zur nächsten Redo Log-Gruppe
- Dies wird als Log-Switch bezeichnet
- Checkpoint-Vorgang tritt ebenfalls ein
- Informationen werden in die Kontrolldatei geschrieben
Mögliche Statusangaben
- Current: In diese wird gerade hineingeschrieben
- Active: enthalten Logeinträge, die noch im DB-Buffer enthalten sind (würde also für ein Instance Recovery benötigt)
- Inactive:
Log-Switch erzwingen
ALTER SYSTEM SWITCH LOGFILE;
Checkpoint erzwingen (z. B. in SQL-Skripten; auf der Konsole macht es wenig Sinn)
ALTER SYSTEM CHECKPOINT;
Hinzufügen von Redo Log-Gruppen mit dem Befehl "ALTER DATABASE" unter Angabe der "Members". Die Redo Log-Dateien sollten nicht allzu klein sein. Beispiel:
ALTER DATABASE ADD LOGFILE GROUP 3 ('c:\verzeichnis\u01\log3a.rdo', 'd:\ORADATA\u01\log3b.rdo) SIZE 50M;
Abruf von Informationen über Gruppen und Member über folgende Views:
- V$LOG
- V$LOGFILE
Archivierte Redo Log-Dateien
- Gefüllte Online Redo Log-Dateien können archiviert werden
- Datenbank muss sich im Modus "ARCHIVELOG" befinden
- Zweck: Wiederherstellung der Datenbank bei Ausfall einer Festplatte
- Archivierung erfolgt automatisch durch ARCn
- Bei erfolgreicher Archivierung:
- wird ein Eintrag in die Kontrolldatei geschrieben
- werden der Name der archivierten Log-Datei, die Log-Sequenznummer sowie die erste und letzte SCN erfasst
Tablespace und Datendateien
Oracle speichert Daten logisch in Tablespaces und physisch in Datendateien.
Tablespaces
- gehören immer nur zu einer Datenbank
- bestehen aus einer oder mehreren Datendateien
- werden weiter unterteilt in logische Einheiten
Datendateien
- gehören immer nur zu einem Tablespace
- sind ein Repositoiry für Schemaobjektdaten
...Bild logische und physische Sicht...
Arten von Tablespaces:
SYSTEM-Tablespace (Löschen ist nicht möglich)
- wird mit einer Datenbank erstellt
- enthält das Data Dictionary
- enthält das SYSTEM-Undo-Segment
Non-System-Tablespace
- ermöglicht die Speicherung verschiedener Segmente
- erleichtert die Speicherverwaltung
- steuert die einem Benutzer zugeordnete Speichermenge (Quota)
Erstellen über Administration > Datenbankverwaltung: Speicherung > Tablespaces > Erstellen"
Befehl "CREATE TABLESPACE"
CREATE TABLESPACE tablespace [DATAFILE clause] [MINIMUM EXTEND integer[K|M]] [BLOCKSIZE integer [K]] [LOGGING|NOLOGGING] [DEFAULT storage_clause] [ONLINE|OFFLINE] [PERMANENT|TEMPORARY] [extent_management_clause] [segment_managment_clause]
Erstellen eines Tablespace mit dem Befehl "CREATE TABLESPACE", wobei der Pfad zur angegebenen Datendatei bereits vorhanden sein muss. Üblicherweise liegen die Dateien unter "c:\oracle\product\10.2.0\oradata\<Rechnername>". Beispiel:
CREATE TABLESPACE userdata DATAFILE 'c:\u01\oradata\data01.dbf' SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE 200M;
Einem Tablespace können weitere Datendateien hinzugefügt werden. Beispiel:
ALTER TABLESPACE tb1 ADD DATAFILE 'c:\u01\oradata\data02.dbf' SIZE 200M;
Löschen eines Tablespace, dabei wird die zugehörige Datendatei allerdings nicht gelöscht:
DROP TABLESPACE userdata;
Ansehen der vorhandenen Tablespaces unter "Administration > Datenbankverwaltung > Speicherung > Tablespaces". Ansicht der physischen Sicht unter "Datendateien".
Speicherverwaltung in Tablespaces:
- Lokal verwalteter Tablespace
- freie Extents werden in Tablespace verwaltet
- Bitmap wird zur Erfassung freier Extents verwendet
- Vom Dictionary verwalteter Tablespace
- freie Extents werden durch das Data Dictionary verwaltet
EXTENT MANAGEMENT-Klausel
[EXTENT MANAGEMENT [DICTIONARY|LOCAL [AUTOALLOCATEUNIFORM [SIZE integer [K|M]]]]]
- AUTOALLOCATE: Tablespace wird vom System verwaltet, Benutzer kann Extent-Grösse nicht selber festlegen
- UNIFORM: Tablespace wird mit einheitlichen Extents der Grösse "SIZE" Byte verwaltet
Lokal verwaltete Tablespaces (neu)
- Verringerung der Konflikte beim Zugriff auf Data Dictionary-Dateien
- Keine Zusammenführung von freiem Speicherplatz erforderlich
- Beispiel:
CREATE TABLESPACE userdata DATAFILE 'd:\prog\oracle\oradata\ora01\data01.dbf' SIZE 100M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
Vom Data Dictionary verwaltete Tablespaces (alt bis Oracle 8, sollte nicht verwendet werden!)
- Extents werden im Data Dictionary verwaltet
- Jedes Segment kann über eine unterschiedliche STORAGE-Klausel verfügen
- Beispiel:
CREATE TABLESPACE userdata DATAFILE 'd:\prog\oracle\oradata\ora01\data01.dbf' SIZE 100M EXTENT MANAGEMENT DICTIONARY DEFAULT STORAGE (initial 1M NEXT 1M PCTINCREASE 0);
Undo-Tablespace
- dient zur Speicherung von Undo-Segmenten, die gerade bearbeitete Tabelleninhalte speichern
- kann keine anderen Objekte enthalten
- Extents werden lokal verwaltet
- Beispiel:
CREATE UNDO TABLESPACE userdata DATAFILE 'd:\prog\oracle\oradata\ora01\data01.dbf' SIZE 100M;
Temporäre Tablespaces
- werden für Sortiervorgänge verwendet (DISTINCT, ORDER BY, GROUP BY, UNION...)
- dürfen keine permanenten Objekte enthalten
- es wird empfohlen, Extents lokal zu verwalten
- Beispiel:
CREATE TEMPORARY TABLESPACE temp DATAFILE 'd:\prog\oracle\oradata\ora01\data01.dbf' SIZE 100M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;
Temporärer Tablespace als Default
- gibt für die gesamte Datenbank gültigen temporären Tablespace als Default an
- verhindert, dass der SYSTEM-Tablespace zum Speichern temporärer Daten verwendet wird, was die Performance verringern würde
- kann nur gelöscht werden, wenn zuvor ein neuer Default-Tablespace verfügbar gemacht wurde
- kann nicht offline gesetzt werden
- kann nicht in einen permanenten Tablespace geändert werden
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
Tablespaces können in den Modus "READ ONLY" gesetzt werden.
- Löst einen Checkpoint aus
- Daten sind nur für Lesevorgänge verfügbar
- Objekte können aus Tablespace gelöscht werden
- Beispiel:
ALTER TABLESPACE userdata READ ONLY;
Tablespace offline setzen
- nicht verfügbar für den Datenzugriff
- Folgende Tablespaces können nicht offline gesetzt werden:
- SYSTEM-Tablespace
- Tablespaces mit aktiven Undo-Segmenten
ALTER TABLESPACE tablespace [ONLINE|OFFLINE [NORMAL|IMMEDIATE|TEMPORARY]]
- NORMAL: leert alle Blöcke aus der SGA, kein Media-Recovery (die Standardoption)
- IMMEDIATE: kein Checkpoint, gegebenenfalls ist ein Media Recovery erforderlich
- TEMPORARY: lert alle Blöcke für Dateien, die online sind, gegebenenfalls ist ein Media Recovery erforderlich
Beispiel:
ALTER TABLESPACE userdata OFFLINE;
Tablespace online setzen:
ALTER TABLESPACE userdata ONLINE;
Änderung der Grösse eines Tablespace ist auf zwei Arten möglich:
- durch Änderung der Grösse der Datendatei
- automatisch mit der Klausel "AUTOEXTEND ON", sodass nur eine Datendatei benötigt wird. Beispiel:
CREATE TEMPORARY userdata DATAFILE 'd:\prog\oracle\oradata\ora01\data01.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
- manuelles Hinzufügen einer Datendatei mit ALTER TABLESPACE, wobei die Datendatei vergrösser oder verkleinert werden kann
- Nicht belegter Speicherplatz wird in der Datenbank freigegeben
- Beispiel:
ALTER DATABASE DATAFILE 'd:\prog\oracle\oradata\ora01\userdata02.dbf' RESIZE 200M;
Hinzufügen einer Datendatei zu Tablespace
- vergrössert den Tablespace durch Hinzufügen weiterer Datendateien (dadurch wird der Eintrag in der Kontrolldatei verändert)
- Hinzufügen der Datendatei mit der KLausel "ADD DATAFILE"
- Beispiel:
ALTER TABLESPACE ADD DATAFILE 'd:\prog\oracle\oradata\ora01\userdata02.dbf' SIZE 200M;
Methode mit ALTER TABLESPACE
- Tablespace muss offline sein (ALTER TABLESPACE userdata OFFLINE;)
- Zieldatendateien müssen vorhanden sein
- Datendatei wird mit Betriebssystembefehl kopiert
- Änderung
ALTER TABLESPACE userdata RENAME DATAFILE 'c:\u01\oradata\data01.dbf' TO 'c:\u02\oradata\data01.dbf';
- anschliessend Tablespace online setzen (ALTER TABLESPACE userdata online)
Methode mit ALTER DATABASE (z. B. wenn SYSTEM-Tablespace verschoben werden muss)
- Datenbank herunterfahren (shutdown immediate;)
- Datendatei wird mit Betriebssystembefehl kopiert
- Datenbank in Modus MOUNT setzen
- Ausführen des Befehls "ALTER DATABASE RENAME FILE"
ALTER DATABASE RENAME FILE 'd:\prog\oracle\oradata\ora01\u01.dbf' TO 'c:\prog\oracle\oradata\ora02\u01.dbf'
- Datenbank öffnen
Löschen von Tablespaces
- erfolgt mit Befehl "DROP TABLESPACE tablespace"
- Tablespace SYSTEM kann nicht gelöscht werden
- Löschen von Segmenten
DROP TABLESPACE userdata INCLUDING CONTENTS;
- Löschen von Datendateien (nur aus Sicht von Oracle - physisch sind sie noch da!)
DROP TABLESPACE userdata INCLUDING CONTENTS AND DATAFILES;
- Löschen aller referentiellen Integritäts-Constraints mit zusätzlichem "CASCADE CONSTRAINTS"
Anzeige von Informationen über Tablespaces
- DBA_TABLESPACES (Data Dictionary)
- V$TABLESPACE (select * from v$tablespace)
Anzeige von Informationen über Datendateien
- DBA_DATA_FILES (Data Dictionary)
- V$DATAFILE (select * from v$datafile)
Segmente
- sind die Objekte, die einem Tablespace zugewiesen werden können
- beispielsweise Tabellen, Indizes, Views, Undo-Daten usw.
Storage-Klausel (wichtig nur bis Oracle Database 8)
- Auf Segmentebene kann in einer Storage-Klausel angegeben werden, wie Extents einem Segment zugeordnet werden
- Alle auf Segmentebene festgelegten Speicherparameter setzen die auf Tablespace-Ebene eingestellten Optionen ausser Kraft (ausser MINIMUM EXTENT und UNIFORM SIZE)
Extents
- Speicherbereiche bestimmter Grösse, die einem Segment zugewisen werden
- ein Segment besteht aus einem oder mehreren Extents
Extent-Zuweisung und -Freigabe
- ein Extent ist ein von einem Segment belegter Speicherplatzbereich
- Zuweisung bei Erstellung, Erweiterung oder Änderung des Segments
- Freigabe bei Löschung, Änderung oder Leeren eines Segments
Datenblock
- kleinste Ein- bzw. Ausgabeeinheit
- besteht aus einem oder mehreren Betriebssystemblöcken und wird durch den Parameter "DB_BLOCK_SIZE" bestimmt
- jedes Extent besteht aus Datenbankblöcken von einer Grösse von 2, 4, 8, 16 oder 32 KB (anstatt einer grösseren Blockgrösse wäre zur Verbesserung der Performance auch ein zweiter DB-Buffer in Betracht zu ziehen)
- eine Datenbank kann mit einer Standardblockgrösse und bis zu vier Nicht-Standardblockgrössen erstellt werden
Inhalt eines Datenbankblocks
- der Block-Header enthält Datenbankblockadresse, Tabellenverzeichnis, Zeilenverzeichnis und Transaktionseinträge
- Der Datentyp varchar2() ist vorsichtig zu verwenden!
- im Datenspeicherplatz werden Zeilen von unten nach oben in den Block eingefügt
- freier Speicherplatz befindet sich in der Mitte des Blocks
Für Daten- und Indexsegmente kann die Speicherplatznutzung über Parameter für die Blocknutzung (auf Tabellenebene) gesteuert werden:
- INITTRANS: anfängliche Anzahl der Transaktionseinträge
- MAXTRANS: maximale Anzahl der Transaktionseinträge
- PCTFREE: Grösse des für das Wachstum bestehender Zeilen reservierten Speicherplatzes (von oben her; Standard 10%)
- PCTUSED: anzustrebender Mindestfüllgrad (von unten her; Standard 40%)
Ansehen der aktuellen Werte über "Administration > Schema: Datenbankobjekte > Tabellen > Erstellen > Speicherung".
Standardblockgrösse
- wird beim Erstellen der Datenbank mit dem Parameter "DB_BLOCK_SIZE" festgelegt
- kann nicht geändert werden, ohne die Datenbank neu zu erstellen
- wird für den SYSTEM-Tablespace und die TEMPORARY-Tablespaces verwendet
- Der Parameter DB_CACHE_SIZE gibt die Grösse für die Standard-Blockgrösse an:
- die Mindestgrösse ist ein Granulat (4 MB - oder 16 MB, falls SGA grösser als 100 MB ist)
- Standardwert ist 48 MB
Nicht-Standardblockgrösse
- Zusätzliche Caches können mit folgenden dynamischen Parametern erstellt werden:
- DB_2K_CACHE_SIZE für 2 KB-Blöcke
- DB_4K_CACHE_SIZE für 4 KB-Blöcke
- DB_8K_CACHE_SIZE für 8 KB-Blöcke
- DB_16K_CACHE_SIZE für 16 KB-Blöcke
- DB_32K_CACHE_SIZE für 32 KB-Blöcke
- DB_nK_CACHE ist nicht zulässig, wenn nK die Standardblockgrösse ist
- die Mindestgrösse für jeden Cache ist ein Granulat
Erstellung von Tablespaces mit Nicht-Standardblockgrösse
- Verwendung der BLOCKSIZE-Klausel zum Festlegen einer Nicht-Standardblockgrösse
CREATE TABLESPACE tbs_1 DATAFILE 'c:\oracle\oradata\tbs_1.dbf' SIZE 10M BLOCKSIZE 4K;
Anzeige von Speicherinformationen über folgende Views:
- DBA_EXTENTS
- DBA_SEGMENTS
- DBA_DATA_FILES