Oracle Database

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

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 SYSTEM kann nicht gelöscht werden
  • Löschen von Segmenten mit INCLUDING CONTENTS
  • Löschen von Datendateien mit INCLUDING CONTENTS AND DATAFILES
DROP TABLESPACE userdata
  INCLUDING CONTENTS AND DATAFILES;
  • Löschen aller referentiellen Integritäts-Constraints mit CASCADE CONSTRAINTS

Anzeige von Informationen über Tablespaces

  • DBA_TABLESPACES
  • V$TABLESPACE

Anzeige von Informationen über Datendateien

  • DBA_DATA_FILES
  • V$DATAFILE

Segmente

  • sind die Objekte, die einem Tablespace zugewiesen werden können
  • beispielsweise Tabellen, Indizes, Views, Undo-Daten usw.

Storage-Klausel

  • 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, die in den meisten Implementierungen 2 bis 8 KB gross sind

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 oder 16 MB)
    • Standardwert ist 48 MB

Unterstützung verschiedener Blockgrössen

  • eine Datenbank kann mit einer Standardblockgrösse und bis zu vier Nicht-Standardblockgrössen erstellt werden
  • die Blockgrösse kann eine beliebige Potenz von 2 zwischen 2 und 32 KB sein

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_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;

Inhalt eines Datenbankblocks

  • der Block-Header enthält Datenbankblockadresse, Tabellenverzeichnis, Zeilenverzeichnis und Transaktionseinträge
  • 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 gesteuert werden:

  • INITTRANS: anfängliche Anzahl der Transaktionseinträge
  • MAXTRANS: maximale Anzahl der Transaktionseinträge
  • PCTFREE: Grösse des für das Wachstum reservierten Speicherplatzes
  • PCTUSED: anzustrebender Mindestfüllgrad

Anzeige von Speicherinformationen über folgende Views:

  • DBA_EXTENTS
  • DBA_SEGMENTS
  • DBA_DATA_FILES