Oracle Database

Aus Mikiwiki
Wechseln zu: Navigation, Suche

Oracle Database (auch: Oracle Database Server, Oracle RDBMS) ist ein relationales Datenbankmanagementsystem der Firma Oracle. Damit können sowohl relationale Daten, als auch objektrelationale Daten gespeichert werden.

Inhaltsverzeichnis

Funktionsweise

Oracle Database besteht aus zwei Hauptbestandteilen:

  • das Datenbankmanagementsystem besteht im laufenden und aktiven Zustand aus folgenden Teilen:
    • einer oder mehrere Oracle Server-Prozessen (Schattenprozess, engl. shadow process), welche Datenbankabfragen (engl. queries) oder Datenveränderungsanweisungen (DML) in der Sprache SQL von den Datenbank-Clients entgegennehmen und diese ausführen bzw. Ergebnisdaten zurückliefern. Dabei arbeiten sie teilweise direkt auf den Datenbankdateien, teilweise übertragen sie aber auch Aktivitäten auf die Hintergrundprozesse der Oracle-Instanz.
    • eine oder mehrere Oracle-Instanzen, die gemeinsamen Arbeitsspeicher in Form von Shared Memory sowie zahlreiche darauf zugreifende Hintergrundprozesse bereitstellen. Die wichtigsten Hintergrundprozesse sind:
      • Der Database Writer / DBWR, der Änderungen an den Datenblöcken in die Datenbankdateien schreibt.
      • Der Log Writer / LGWR, der Redo-Informationen in die Redo Log-Dateien schreibt.
      • Der Archiver / ARCH, der Redo Log-Dateien archiviert, sofern sich die Datenbank im Archivelog-Modus befindet.
      • Der System Monitor / SMON, der Konsistenzinformationen in die Kontrolldateien sowie in die Header von Datenbankdateien und in Redo Log-Dateien schreibt. Beim Wiederanlauf einer Datenbank nach einem Crash prüft der System-Monitor diese Konsistenzinformationen in einem Quercheck über alle Kontrolldateien, Datenbankdateien und Redo Log-Dateien. Sollte der SMON Inkonsistenzen feststellen, so er eine Crash Recovery ein, bei der aus den Redo Log-Dateien solange fehlende Transaktionen in die Datenbankdateien übertragen werden, bis die Datenbank mit allen Datenbankdateien wieder in sich konsistent ist.
      • Der Prozess Monitor / PMON, der die Oracle-Prozesse überwacht.
    • einer oder mehrere Listener-Prozesse, die Verbindungswünsche bearbeiten und Oracle Server-Prozesse starten können
  • die Datenbankdateien bestehen meist aus Dateien in einem Dateisystem, es werden jedoch auch Raw Devices oder per ASM (Automatic Storage Management) verwaltete Diskgroups verwendet.
    • die Datendateien (engl. data files) entahlten die eigentlichen Dateninhalte.
    • die Redo Log-Dateien (engl. redo log files) sind sehr schnell schreibbare Dateien, die als Transaktionslogs dienen und die die Datenblockänderungen (Change-Vektoren) von Transaktionen aufnehmen. Diese gespeicherten Change-Vektoren dienen zur Wiederherstellung von Datenblöcken, falls ungeplant oder beabsichtigt das Datenbankmanagementsystem beendet werden muss. Noch nicht in die Datenbankdateien übertragene, festgeschriebene Änderungen können so wiederhergestellt und nachgefahren werden (roll forward). Anschliessend werden alle Änderungen nach dem letzten erfolgreichen Festschreibvorgang (check point) zurückgeschrieben (roll back).
    • die Kontrolldateien (engl. control files) enthalten unter anderem die Struktur- und Zustandsinformation der Datenbank. Hierzu zählen die System Change Number / SCN sowie die Pfade und Namen aller Datenbank- und Redo Log-Dateien.

Folgende Werkzeuge zur Entwicklung und Datenbankverwaltung werden von Oracle zur Verfügung gestellt:

  • SQL*Plus ist ein befehlszeilenorientiertes Verwaltungswerkzeug zur Verwaltung und Bedienung von Oracle-Datenbanken. Es steht auf jedem Rechner zur Verfügung, auf dem die Oracle Client- oder Serversoftware installiert ist. Damit lassen sich alle Verwaltungstätigkeiten sowie die Eingabe, Änderung, Abfrage und das Löschen der eigentlichen Dateninhalte durchführen. Der Aufruf von SQL*Plus erfolgt durch Eingabe von "sqlplus". Mit iSQL*Plus stellt Oracle auch eine Weboberfläche für SQL*Plus bereit.
  • Der Oracle SQL Developer (Project Raptor) ist Oracles kostenloses Werkzeug für den Datenbankentwickler. Es läuft als Java-Programm mit grafischer Benutzer­oberfläche und ermöglicht das Bearbeiten von Datenbankobjekten, das Erstellen und Testen von SQL-Statements und Skripten, das Erstellen und Debuggen von PL/SQL-Prozeduren und einfache Datenbankanalysen.
  • Der Oracle Enterprise Manager (Java-Konsole) ist eine grafische Bedienoberfläche zur Datenbankverwaltung auf Grundlage von Java.
  • Oracle Enterprise Manager Database Control ist eine webbasierende, grafische Oberfläche zur Verwaltung einer Datenbank.

Folgende Werkzeuge werden von anderen Herstellern zur Verfügung gestellt:

  • Tool for Oracle Application Developer / TOAD der Firma Quest Software ist ein grafisches Werkzeug zur Verwaltung und Entwicklung mit Oracle-Datenbanken.
  • Hora der Firma Keeptool ist ein grafisches Werkzeug zur Verwaltung und Entwicklung von Oracle Datenbanken.

Konzepte

Installation

Notizen vom Kurs "Oracle Administration" 21.-25. Juni 2010 in Köln

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Microsoft Windows XP

Falls die Oracle-Software bereits installiert ist:

Menü "Start > Programme > Oracle - OraDb10g_home1 > Konfigurations- und Migrations-Tools > Datenbank-Konfigurationsassistent"

  • Datenbank erstellen
  • Vorlage: Benutzerdefinierte Datenbank
    • Globaler Datenbankname: ora01.local
    • SID: ora01
  • Verwaltungsoptionen
    • Datenbank mit Enterprise Manager konfigurieren
    • Database Control zur Datenbankverwaltung verwenden (gemeint ist die Web-Administration)
  • Kennwort
    • Dasselbe Kennwort für alle Accounts verwenden
  • Speicherungsverfahren: Dateisystem
  • Speicherorte: Speicherot von Datenbankdateien aus Vorlage verwenden
  • Recovery-Optionen
    • Flash Recovery-Bereich angeben
  • Datenbankkomponenten
    • Enterprise Manager Repository
    • Standard-Datenbankkomponenten: alles abwählen
  • Schritt 10 von 12
    • Speicher
    • Skalierung
    • Zeichensätze: Standardwert; am verünftigsten ist jedoch "Unicode (AL32UTF8)"
      • Länderspezifischer Zeichensatz
      • Standardsprache: (entspricht NLS_LANGUAGE)
      • Standarddatumsformat: (entspricht NLS_TERRITORY)
    • Verbindungsmodus: Dedizierter Server-Modus
  • Schritt 11 von 12: Datenbankspeicherung zeigt Struktur der Datenbank
  • Schritt 12 von 12
    • Skripts für das Erstellen von Datenbanken generieren

Anschliessend sind unter "Dienste" sowohl der OracleService... und OracleDB... gestartet. Die Weboberfläche ist unter http://lunar61:5500/em aufrufbar.

D:\oracle\product\10.2.0\admin\ora01\scripts

Die Oracle-Instanz hat zwei Namen:

  • Der globale Datenbankname sollte ein weltweit eindeutiger Name sein, der die Oracle-Instanz bezeichnet. Der erste Teil sollte der SID entsprechen, daran anschliessend folgt der Domainname.
  • SID (Oracle System Identifier) bezeichnet den Namen der Oracle-Instanz. So heisst dann auch die Datenbank!

Client verbindet sich mit Hilfe der Datei "D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora" mit dem Oracle-Server (bzw. der Oracle-Instanz).

# tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

ORA01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = lunar61)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora01.local)
    )
  )

LUNAR61 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = lunar61)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = lunar61.gfu.net)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

Verbindung über Konsole mit "sqlplus system/passwort@ora01".

show parameter db_name;

Bearbeiten der Einstellungen manuell oder mit "Oracle Net-Konfigurationsassistent > Konfiguration von lokalem Net Service Name". Als "Service Name" muss dabei der globale Datenbankname angegeben werden. Der angegebene Rechner muss natürlich erreichbar sein (tnsping).

D:\Dokumente und Einstellungen\user1>tnsping lunar57
...
Parameterdateien benutzt:
D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora

Adapter EZCONNECT zur Auflösung des Alias benutzt
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=lunar57))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.50.157)(PORT=1521)))
OK (10 ms)

Als Net-Service Name kann eine beliebige Bezeichnung gewählt werden (hier "ORANEU"). Damit wird folgender Eintrag in die Datei "tnsnames.ora" eingefügt:

ORANEU =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = lunar57)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora01.local)
    )
  )

Damit ist folgende Verbindung möglich:

sqlplus system/passwort@oraneu


Auf Serverseite gibt es die Datei "listener.ora":

# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = lunar61)(PORT = 1521))
    )
  )

Weitere Einträge können wie folgt hinzugefügt werden:

    (SID_DESC =
      (SID_NAME = ORA01)
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (GLOBAL_DBNAME=ora01.local)
    )
    (SID_DESC =
      (SID_NAME = LUNAR61)
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (GLOBAL_DBNAME=lunar61.gfu.net)
    )
  • Test über Dienste und OracleOraDb10g_home1TNSListener neu starten.
  • Ausserdem auch die Instanzen OracleServiceOra01 und OracleServiceLunar61 neu starten.
sqlplus system/passwort@ora01 as sysdba
SQL> shutdown immediate;
SQL> startup;

Zusätzlichen Tablespace "index01" hinzufügen:

CREATE TABLESPACE index01 
  DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA01\index01.dbf'
  SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE 200M;

Tablespace wurde angelegt. 

Benutzer "scott" anlegen.



Der Oracle Server ist ein relationales Datenbankmanagementsystem, das einen offenen, umfassenden und integrierten Ansatz für die Informationsverwaltung bereitstellt. Er besteht aus

  • 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)

Oracle Universal Installer

  • wird zum Installieren, Aktualisieren oder Deinstallieren von Softwarekomponenten und zum Erstellen einer Datenbank verwendet
  • basiert auf einer Java-Engine

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 Database Configuration Assistant

  • Datenbank erstellen
  • Datenbankoptionen konfigurieren
  • Datenbanken löschen
  • Templates verwalten

iSQL*Plus ist ein 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
  • wird aufgerufen ü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)

...

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 [<u>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".

analyze table scott.dept compute statistics;
select * from dba_tables where owner='SCOTT';

Nach Berechnung aller Statistiken sollte keine Spalte grösser 0 sein.

select * from dba_tables where chain_cnt > 0;

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 (desc dba_extents;)
  • DBA_DATA_FILES

Undo-Segmente

Zweck

  • Transaktionsrollback (während normalem Datenbankbetrieb)
  • Transaktionsrecovery (während Recovery-Vorgang)
  • Lesekonsistenz

Arten (seit Oracle Database 9):

  • SYSTEM: Verwendung für Objekte im SYSTEM-Tablespace
  • Non-System:
    • automatischer Modus: erfordert einen UNDO-Tablespace (empfohlen ab Oracle Database 9)
    • manuell: erfordert mindestens ein UNDO-Segment (alt, nicht empfohlen)

Automatisches UNDO-Management

  • Konfiguration der folgenden beiden Parameter in der Initialisierungsdatei
    • UNDO_MANAGEMENT
    • UNDO_TABLESPACE
  • Erstellung von mindestens einem UNDO-Tablespace

UNDO-Tablespace wechseln

  • Es kann von einem UNDO-Tablespace zu einem anderen gewechselt werden
  • Einer Datenbank kann immer nur ein UNDO-Tablespace zugeordnet werden
  • Eine Oracle-Instanz kann mehrere UNDO-Tablespace enthalten, aber nur einer kann aktiv sein
  • Wechseln des UNDO-Tablespace
ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;

Tipps über "Administration > Datenbankverwaltung: Datenbankkonfiguration > Undo-Management > Undo-Advisor". (u. a. Häufigkeit der Undo-Erhaltung)

Zum Festlegen der Grösse des UNDO-Tablespace werden drei Informationen benötigt:

  • (UR) UNDO_RETENTION in Sekunden
  • (UPS) Anzahl der pro Sekunde erzeugten UNDO-Datenblöcke
  • Blockgrösse (DB_BLOCK_SIZE)

Datentypen

Die häufigsten Datentypen sind:

  • VARCHAR2(size): Zeichenketten variabler Länge
  • CHAR(size): Zeichenketten fester Länge
  • NUMBER(p,s): Numerische Daten variabler Länge mit Angabe der Gesamt- bzw. Nachkommastellenzahl
  • DATE: Datumswerte (zurück bis etwa 5000 v. u. Z.)
  • LONG: Zeichendaten variabler Länge bis 4 GB
  • BLOB: Binärdaten bis zu 4 GB

Jede Oracle-Datenbank hat ein Standard-Datumsformat:

select sysdate from dual;

Datentyp ROWID

  • ROWID ist ein eindeutiger Indikator für jede Zeile in einer Datenbank
  • ROWID ist die schnellste Möglichkeit des Zugriffs auf eine Tabellenzeile
  • ROWID werden in Indizes gespeichert, um bestimmte Zeilen einer Tabelle zu finden

Eine ROWID benötigt 10 Byte Plattenspeicher und wird mit 18 Zeichen dargestellt:

  • Data Object Number: Jedes Datenbankobjekt bekommt eine eindeutige Objektnummer zugewiesen (5)
  • Relative File Number: Jede Datei erhält eine eindeutige Dateinummer (5)
  • Block Number: Angabe der Position des Blocks in der Datei (5)
  • Row Number: Zeilennummer identifiziert die Position im Block (3)
select * from scott.dept
select rowid from scott.dept

Datetime-Unterstützung

  • In Oracle können Zeitzonen in Datumsdaten einbezogen werden
  • Zu DATE wurden drei neue Datentypen hinzugefügt:
    • TIMESTAMP
    • TIMESTAMP WITH TIMEZONE (TSTZ)
    • TIMESTAMP WITH LOCAL TIMEZONE (TSLTZ)

Benennungsregeln für Bezeichner

  • müssen mit einem Buchstaben beginnen
  • dürfen 1 bis 30 Zeichen enthalten
  • dürfen nur die folgenden Zeichen enthalten: A-Z, a-z, _, $, #, 0-9
  • dürfen nicht den Namen eines anderen Objektes duplizieren, das dem gleichen Benutzer gehört
  • dürfen keinem Schlüsselwort entsprechen

Anweisung CREATE TABLE

CREATE TABLE [schema.]table
  (column datatype[DEFAULT exp][,...]);

Folgendes ist anzugeben:

  • Tabellenname
  • Spaltenname und Datentyp der Spalte

Beispiel:

CREATE TABLE dept
  (deptno NUMBER(6),
   dname  VARCHAR2(14),
   loc    VARCHAR2(13));

Richtlinien zum Erstellen von Tabellen

  • Tabellen in separaten Tablespaces speichern
  • Verwendung lokal verwalteter Tablespaces, um Fragmentierung zu vermeiden
  • wenige Standard-Extent-Grössen verwenden

Einstellen von PCTFREE

Ein höherer Wert sollte eingestellt werden, wenn die Tabelle folgendes enthält:

  • Spalten, die anfänglich auf NULL eingestellt sind und erst später durch einen Wert aktualisiert werden
  • Spalten, deren Grösse wahrscheinlich als Folge der Aktualisierung wachsen wird

Ein höherer Wert von PCTFREE führt zu einer geringeren Blockdichte.

Zeilenmigration

  • Wird PCTFREE auf einen niedrigen Wert eingestellt, so enthält der Block nicht genügend Speicherplatz um eine Zeile aufzunehmen, die als Folge einer Aktualisierung wächst
  • wird eine vollständige Zeile wird in einen anderen Block verschoben, so verschlechtert sich die Performance

Zeilenverkettung

  • erfolgt, wenn eine Zeile zu gross ist, um in einen beliebigen Block geschrieben zu werden
  • in diesem Fall werden Zeilen in Chunks aufgeteilt und in unterschiedlichen Blöcken gespeichert (also grössere Blockgrösse wählen!)

Tabellen leeren

  • Beim Leeren einer Tabelle werden alle Zeilen einer Tabelle gelöscht und belegter Speicherplatz freigegeben.
  • Dazugehörige Indizes werden geleert

Beispiel:

TRUNCATE TABLE hr.employees;

Datenintegrität

Daten in einer Datenbank müssen den Integritätsregeln entsprechen. Dies wird erreicht durch:

  • Anwendungscode
  • Datenbanktrigger
  • deklarative Integritäts-Constraints

Constraints (Einschränkungen)

  • Constraints erzwingen Regeln auf Tabellenebene
  • erzwingen Regeln für DML-Befehle (INSERT, UPDATE, DELETE)
  • verhindern das Löschen einer Tabelle, wenn Abhängigkeiten vorhanden sind
  • können während oder nach der Tabellenerstellung definiert werden

Constraint-Typen

  • NOT NULL: Spalte darf keinen NULL-Wert enthalten ( ist nicht NULL!)
  • UNIQUE: gibt eine Spalte oder eine Spaltenkombination an, deren Werte in allen Spalten eindeutig sein müssen
  • PRIMARY KEY: identifiziert jede Zeile eindeutig
  • FOREIGN KEY: richtet Fremdschlüsselbeziehung ein
  • CHECK: gibt eine Bedingung ein, die erfültt werden muss

UNIQUE-Constraint

  • jeder Wert einer Spalte oder Spaltengruppe muss eindeutig sein
  • lässt die Eingabe von NULL-Werten zu
  • Beispiel:
CREATE TABLE mitarbeiter
  (...
   email VARCHAR2(25)
   ...
   CONSTRAINT emp_email_uk UNIQUE (email),
  ...);

Primary Key-Constraint

  • erstellt für jede Tabelle einen Primärschlüssel
  • für jede Tabelle kann nur ein Primärschlüssel erstellt werden
  • Beispiel
dept_id NUMBER(6),
  ...
CONSTRAINT dept_id_pk PRIMARY KEY (dep_id),
  ...

Foreign Key-Constraint

  • bestimmt eine Spalte oder Spaltenkombination als Fremdschlüssel
  • Fremdschlüssel muss einem vorhandenen Wert in der übergeordneten Tabelle entsprechen
  • Beispiel:
...
CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id)
  REFERENCES departments(dep_id),
...

CHECK-Constraint

  • definiert eine Bedingung, die jede Zeile erfüllen muss
  • Beispiel:
...
salary NUMBER(6), CONSTRAINT emp_salary_min CHECK (salary > 0),
...

Beispiel:

drop table auftrag;

drop table kunde;

create table kunde
  (kunden_id number(8),
   nachname varchar2(32),
   plz varchar2(8),
   ort varchar2(24),
   status char(2),
   constraint kunden_id_pk primary key (kunden_id)
  );

create table auftrag
  (auftrag_id number(8),
   kunden_nr number(8),
   auftrag_menge number(8),
   menge_gel number(8),
   erfuellt char(2),
   datum_ert date,
   datum_erf date,
   bemerkung varchar2(256),
   artikel_nr number(8),
   mitarbeiter_nr number(8),
   constraint auftrag_id_pk primary key (auftrag_id),
   constraint kunden_nr_fk foreign key (kunden_nr) references kunde (kunden_id)
  );

Constraints hinzufügen mit ALTER TABLE: Die Anweisung ALTER TABLE ermöglicht

  • Hinzufügen oder Löschen eines Constraints, ohne jedoch seine Struktur zu ändern
  • Aktivierung oder Deaktivierung eines Constraints
  • Beispiel:
ALTER TABLE managers
  ADD CONSTRAINT emp_manager_fk
  FOREIGN KEY (manager_id) REFERENCES employees(employee_id);

Constraint löschen

ALTER TABLE employees DROP CONSTRAINT emp_manager_fk;

Constraint aktivieren

ALTER TABLE employees ENABLE CONSTRAINT emp_emp_id_pk;

Constraint deaktivieren

ALTER TABLE employees DISABLE CONSTRAINT emp_emp_id_pk;

Referentielle Integrität: Zeilen mit einem Primärschlüssel können nicht gelöscht werden, wenn sie in einer anderen Tabelle als Fremdschlüssel dienen.

Index

  • ist ein Schema-Objekt
  • wird vom Oracle Server verwendet, um den Abruf von Zeilen zu beschleunigen
  • reduziert Datenträgerzugriffspfade
  • ist unabhängig von der indizierten Tabelle
  • wird vom Oracle Server automatisch verwendet und verwaltet - es kann aber auch sein, dass der eingebaute Optimizer stattdessen einen full table scan macht

Nachführen des Index kostet Zeit (pro Spalte etwa Faktor 3). Natürlich benötigt der Index auch Platz.

Index erstellen wenn

  • überhaupt nach dem Spalteninhalt gesucht wird
  • Selektivität (je mehr verschiedene Werte es gibt, desto sinnvoller ist ein Index; so macht es etwa wenig Sinn, einen Index über das Geschlecht zu erstellen; sinnvoll wird es unter 10-15% der Sätze, ansonsten macht der Optimzer eine full table scan)

Indizes-Klassifizierung

Logisch

  • einspaltige (z. B. Postleitzahl) oder verknüpfte Indizes (z. B. Postleitzahl und Ort)
  • eindeutige oder nicht eindeutige Indizes
  • funktionsbasierte Indizes (z. B. für ... WHERE upper(name)='MEYER')

Physisch

  • partitionierte oder nicht partitionierte Indizes
  • B*-Baum-Indizes (B-Tree)
    • speichert eine Liste von ROWIDs für jeden Schlüssel
    • es gibt keinen Indexeintrag für eine Zeile, in der eine Schlüsselspalte den Wert "NULL" enthält (Abfragen auf "IS NULL" ist also schlecht und greift nicht auf den Index zurück)
    • DML-Befehle (INSERT, UPDATE, DELETE) führen zu einem Umbau des Index
  • Bitmap-Indizes
    • ist ebenfalls als B*-Baum organisiert, anstatt ROWIDs wird ein Bitmap für jeden Schlüsselwert gespeichert
    • gut geeignet für Tabellen mit sehr vielen Zeilen (ab etwa einer Million) und geringer Kardinalität, Zeilen werden selten oder gar nicht geändert

Index erstellen

Richtlinien:

  • Abfrage- und DML-Anforderungen ausgewogen berücksichtigen (z. B. Indizes nur während der Zeiten zur Verfügung stellen, wenn sie wirklich benötigt werden)
  • Dateninhalte und Indizes in separaten Tablespaces auf unterschiedlichen Festplatten speichern
  • NOLOGGING für grosse Indizes berücksichtigen (standardmässig werden Indizes mitgeloggt, was aber nicht notwendig ist)

Automatisch: wenn PRIMARY KEY oder UNIQUE-Constraint verwendet wird

CREATE INDEX index_name ON table (column[,column ...]);

Beispiel:

CREATE INDEX emp_last_name ON employees (last_name);

Beispiel B*-Baum-Index:

CREATE INDEX hr.employees_last_name_idx ON hr.employees (last_name);

Beispiel Bitmap-Index:

CREATE BITMAP INDEX orders_region_id_idx ON orders (region_id);

Index neu erstellen

Der Befehl ALTER INDEX eignet sich für folgende Aktionen:

  • Index in einen anderen Tablespace verschieben
  • Speichernutzung durch Entfernen gelöschter Einträge verbessern

Beispiel:

ALTER INDEX orders_region_id_idx REBUILD TABLESPACE ind02;

Indizes löschen

  • Löschen der Indizes vor dem Laden grosser Datenmengen
  • selten verwendete Indizes erst erstellen, wenn sie benötigt werden

Indexdaten abrufen

Informationen über Indizes erhält man durch Abfrage folgender Views:

  • DBA_INDEXES: Informationen über die Indizes
  • DBA_IND_COLUMNS: Informationen über die indizierten Spalten

Vergleich

B*-Baum-Indizes Bitmap-Indizes
Eignung für Spalten hoher Kardinalität Spalten geringer Kardinalität
Aktualisierung von Schlüsselspalten einfach aufwendig
Für Abfragen mit OR-Vergleichen ungeeignet geeignet
Geeignet für OLTP Data Warehousing

Benutzer

Erstellen von Benutzern

  • Tablespaces festlegen, in denen der Benutzer Objekte speichern soll
  • Quotas für jeden Tablespace festlegen
  • Default-Tablespace und temporären Tablespace festlegen
  • Privilegien und Rollen an Benutzer vergeben

Datenbankschema

  • ein Schema ist eine benannte Gruppe von Objekten
  • beim Erstellen eines Benutzers wird gleichzeitig ein entsprechendes Schema angelegt
  • ein Benutzer kann nur einem Schema zugeordnet werden

Schema-Objekte

  • Tabellen
  • Constraints
  • Trigger
  • Indizes
  • Views
  • gespeicherte Programmblöcke
  • Datenbanklinks usw.

Syntax CREATE USER:

CREATE USER user
  IDENTIFIED {BY password|EXTERNALLY}
  [DEFAULT TABLESPACE tablespace]
  [TEMPORARY TABLESPACE tablespace]
  [QUOTA {integer[K|M]|UNLIMITED} ON tablespace]...]
  [PASSWORD EXPIRE]
  [ACCOUNT LOCK {LOCK|UNLOCK}]
  [PROFILE {profile|DEFAULT}]

Beispiel (Benutzer "sys" und "system" dürfen das):

CREATE USER aaron
  IDENTIFIED BY soccer
  DEFAULT TABLESPACE userdata
  TEMPORARY TABLESPACE temp
  QUOTA 15M ON userdata;

Ein so angelegter Benutzer kann sich allerdings noch nicht anmelden:

D:>sqlplus aaron/soccer
...
ERROR:
ORA-01045: user AARON lacks CREATE SESSION privilege; logon denied
Benutzernamen eingeben:

Syntax ALTER USER:

ALTER USER user
  [DEFAULT TABLESPACE tablespace]
  [TEMPORARY TABLESPACE tablespace]
  [QUOTA {integer[K|M]|UNLIMITED} ON tablespace]...]

Benutzer-Quota ändern

Tablespace-Quotas können in folgenden Situationen geändert werden:

  • Tabellen wachsen unerwartet schnell an
  • Anwendung wird weiterentwickelt und benötigt zusätzliche Tabellen und Indizes

Objekte werden bei einer Änderung der Quota neu organisiert und in andere Tablespaces gestellt.

Benutzer löschen

  • Klausel CASCADE verwenden, um alle Objekte im Schema zu löschen
  • angemeldete Benutzer können nicht gelöscht werden

Beispiel (Löschen des Benutzers und seines Schemas):

DROP USER aaron CASCADE;

Benutzerinformationen abrufen

Abfrage folgender Views:

  • Weboberfläche (Administration > Schema: Benutzer & Berechtigungen: Benutzer
  • DBA_USERS
  • DBA_TS_QUOTAS

Privilegien

Ein Privileg ist die Berechtigung, eine bestimmte Art von SQL-Befehl auszuführen. Beispiele:

  • Anmelden an die Datenbank
  • Erstellung einer Tabelle
  • Zeilen aus der Tabelle eines anderen Benutzers abfragen

Benutzerprivilegien

  • System: ermöglicht Benutzern, bestimmte allgemeine Aktionen auf der Datenbank auszuführen
  • Objekte: ermöglicht Benutzern, auf ein bestimmtes Objekt zuzugreifen und etwas damit zu tun

...Bild S. 170...

Objektprivilegien definieren die zulässigen Operationen eines Benutzers auf folgende Datenbankobjekte:

  • Tabellen
  • Views
  • PL/SQL-Programme
  • Sequenzen
  • Schnappschüsse usw.

...Tabelle S. 172...

Systemprivilegien definieren Operationen, die innerhalb des Datenbankservers durchgeführt werden dürfen:

  • das Erstellen einer Tabelle (CREATE TABLE)
  • das Ändern eines Tablespace (ALTER TABLESPACE)
  • das Anlegen eines Rollback-Segments (CREATE ROLLBACK SEGMENT)

Wird ein Benutzer mit CREATE USER angelegt, so besitzt er vorerst keine Privilegien und kann keine Aktionen auf der Datenbank durchführen.

  • Es gibt über 100 verschiedene Systemprivilegien.
  • das Schlüsselwort ANY bedeutet, dass Benutzer diese Berechtigung in jedem Schema besitzen
  • der Befehl GRANT vergibt ein Privileg an einen Benutzer oder eine Gruppe von Benutzern
  • der Befehl REVOKE löscht die vergebenen Privilegien

Syntax GRANT:

GRANT {system_privilege|role}[, {system_privilege|role}]...
  TO {user|role|PUBLIC}[, {user|role|PUBLIC}]...
  [WITH ADMIN OPTION]

Beispiel:

GRANT CREATE SESSION TO aaron;
GRANT CREATE SESSION TO aaron WITH ADMIN OPTION;

Systemprivilegien entziehen

  • Befehl REVOKE verwenden, um Benutzern ein Systemprivileg zu entziehen
  • Nur Benutzer mit der ADMIN OPTION für Systemprivilegien können Systemprivilegien entziehn
  • Beim Entziehen von Systemprivilegien gibt es keine kaskadierenden Wirkungen

Syntax REVOKE:

REVOKE {system_privilege|role}[, {system_privilege|role}]...
  FROM {user|role|PUBLIC}[, {user|role|PUBLIC}]...

Beispiel:

REVOKE CREATE TABLE FROM aaron;

Objektprivilegien vergeben

Mit dem Befehl "GRANT" werden Objektprivilegien vergeben. Das Privileg muss sich im Schema des Privilegienverleihers befinden oder der Privilegienverleiher muss über die Option "WITH GRANT OPTION" verfügen.

Objektprivilegien entziehen

  • Befehl "REVOKE" verwenden, um Objektprivilegien zu entziehen.
  • Mit jedem Aufruf kann jeweils immer nur ein Objekt entzogen werden (?)
  • Objektprivilegien können nur vom Benutzer entzogen werden, der das Privileg ursprünglich vergeben hat.
  • Der Entzug von Objektprivilegien hat kaskadierende Wirkungen

Beispiel:

REVOKE SELECTION ON emi.orders FROM jeff;

Informationen über Privilegien abrufen

Folgende Views:

  • DBA_SYS_PRIVS
  • DBA_TAB_PRIVS
  • DBA_COL_PRIVS
select * from dba_sys_privs where grantee='AARON';

Rollenkonzept

Beliebige Objekt- und Systemprivilegien können in einer Rollendefinition zusammengefasst werden.

  • Eine Rolle ist dabei ein Datenbankobjekt, das von einem Benutzer mit CREATE ROLE-Privileg erstellt werden kann.
  • Eine solche Rolle kann einem anderen Benutzer oder einer anderen Rolle zugewiesen werden.
  • Rollen haben keinen Eigentümer
  • Rollenbeschreibungen werden im Data Dictionary gespeichert
  • Eine Rolle kann aktiviert oder deaktiviert werden
  • Zum Aktivieren einer Rolle muss eventuell ein Passwort angegeben werden

Syntax:

...S. 185-194...

Profile

  • Ein Profil ist die Angabe von Passwort- und Ressourcengrenzen
  • Profile werden von den Benutzern mit dem Befehl CREATE USER oder ALTER USER zugewiesen
  • Profile können aktiviert oder deaktiviert werden
  • Profile können sich auf das DEFAULT-Profil beziehen

Profile-Inhalt

  • Passwortalterung und Gültigkeitsablauf des Passworts
  • Passworthistorie
  • Prüfen der Passwortkomplexität
  • Account-Sperren
  • CPU-Zeit
  • Verbindungsdauer
  • Speicherplatz
  • gleichzeitige Sitzungen usw.

DEFAULT-Profil

  • wird automatisch bei der Datenbankerstellung angelegt
  • für die Benutzer, denen nicht ausdrücklich ein bestimmtes Profil zugewiesen wurde, gelten die Grenzen des DEFAULT-Profils
  • alle Grenzen des DEFAULT-Profils sind zunächst unbegrenzt
Parameter Beschreibung
FAILED_LOGIN_ATTEMPTS Anzahl von Fehlversuchen bei der Anmeldung
PASSWORD_LOCK_TIME Anzahl von Tagen, die ein Benutzerkonto gesperrt bleibt
PASSWORD_LIFE_TIME Lebensdauer des Passworts in Tagen
PASSWORD_GRACE_TIME Nachfrist in Tagen für die Änderung des Passworts
PASSWORD_REUSE_TIME Zeitspanne in Tagen, die vergehen muss, bevor ein Passwort erneut verwendet werden darf
PASSWORD_REUSE_MAX Maximale Anzahl der zulässigen Wiederverwendungen eines Passworts
PASSWORD_VERIFY_FUNCTION PL/SQL-Funktion, die eine Komplexitätsprüfung vornimmt, bevor das Passwort zugewisen wird

....S. 153-158...

create profile kuhn limit sessions_per_user 2;
alter profile kuhn limit sessions_per_user 3;

Globalisierung

  • Sprachenunterstützung
  • Länderunterstützung
  • Zeichensatzunterstützung
  • Linguistisches Sortieren
  • Datums- und Zeitformate
  • Numerische Formate
  • Währungsformate

Zeichensätze

  • Einzel-Byte-Zeichensätze (7-Bit, 8-Bit)
  • Mehr-Byte-Zeichensätze variabler Breite
  • Mehr-Byte-Zeichensätze fester Breite
  • Unicode (physikalisch: AL32UTF8, AL16UTF16, UTF8)

Datenbankzeichensätze und länderspezifische Zeichensätze

Datenbank-Zeichensätze Länderspezifische Zeichensätze
werden zur Zeit der Erstellung definiert
können nur durch Neuerstellung geändert werden
speichern Datentypen vom Typ CHAR, VARCHAR2, CLOB, LONG
können Zeichensätze variabler Länge speichern können Unicode mit AL16UTF16 oder UTF8 speichern

Richtlinien für die Auswahl eines länderspezifischen Oracle-Zeichensatzes (wird üblicherweise nicht benötigt)

...S. 203-208...

Sprachabhängiges Verhalten für die Sitzung angeben

Umgebungsvariable

 NLS_LANG=<language>_<territory>.<charset>

Jede Komponente steuert dabei eine Untermenge der NLS-Funktionen. Beispiel:

NLS_LANG=French_France.UTF8

Zusätzleiche Umgebungsvariablen: Für die Initialisierungsparameter stehen die entsprechenden Umgebungsvariablen zur Verfügung.

Linguistisches Sortieren

  • Binäre Sortierung: Hierbei erfolgt die Sortierung entsprechend den Binärwerten der kodierten Zeichen
  • Einsprachiges Sortieren
  • Multilinguales Sortieren: Basiert auf dem neuen Standard ISO 14651

NLS-Parameter in SQL-Funktionen sortieren

Einige SQL-Funktionen erforden die ausdrückliche Angabe von NLS-Parametern als Teil ihrer Parameterliste. Beispiel:

SELECT TO_CHAR (hire_date, 'DD.Mon.YYYY','NLS_DATE_LANGUAGE=FRENCH') 
  FROM employees;

Auf SQL-Ebene in der Funktion "to_char":

select sysdate from dual;
select to_char(sysdate, 'ddd') from dual;
select to_char(sysdate, 'ww') from dual;
select to_char(sysdate, 'month') from dual;
select to_char(sysdate, 'year') from dual;
select to_char(sysdate, 'month dd, yyyy') from dual;
select to_char(sysdate, 'hh24:mi') from dual;
select to_char(sysdate, 'month', 'NLS_DATE_LANGUAGE=FRENCH') from dual;

Informationen über Zeichensätze und NLS-Einstellungen

  • NLS_DATABASE_PARAMETERS
  • NLS_INSTANCE_PARAMETERS
  • NLS_SESSION_PARAMETERS

Backup / Recovery

Physisches Backup (Dateien bzw. Datenblöcke im Dateisystem kopieren)

  • kaltes Backup (offline)
    • Datenbank wird heruntergefahren und gesichert
    • Datenbank kann im Archivelog- oder Noarchivelog-Modus laufen
    • Vollständige Sicherung der Datenbank (alle Datendateien, Redo Log-Dateien, Kontrolldateien)
  • heisses Backup (online)
    • im laufenden Betrieb, womöglich ergeben sich dabei Performanceverluste
    • Datenbank läuft dabei zwingend im Archivelog-Modus
    • Sicherung erfolgt auf Ebene der Tablespaces

Durchführung der physischen Backups:

  • Befehle des Betriebssystems
    • hoher Verwaltungsaufwand bzw. hohe Fehlerquote
  • Oracle Recovery Manager / RMAN
    • prüft zuvor alle Datenblöcke
    • inkrementelle Sicherungen möglich
    • Recovery-Katalog
    • betriebssystemunabhängige Befehle

Logisches Backup (SQL-Dump): Sichert keine Transaktionen, also erfolgt vermutlich Datenverlust; eignet sich für Datenaustausch oder Updatevorgänge

  • mit Export-Tool (Client-Programm)
  • Oracle Data Pump (läuft auf Oracle-Server; seit Oracle 10)

Logische Sicherung mit exp

exp -help

Datenbank-Modus: Export sämtlicher Objekte der Datenbank

exp system/miro@instanzname full=y file=c:\temp\full1.dmp

Schema-Modus

exp system/miro@instanzname owner=jeff,scott file=c:\temp\full2.dmp

Tabellen-Modus

exp system/miro@instanzname tables=scott.kunde file=c:\temp\full3.dmp

Logische Wiederherstellung mit imp

imp -help

Einlesen der Schemas von Benutzer "scott" und "jeff" und Zuweisung an die vorhandenen Benutzer "ann" und "cathy" in der Zieldatenbank.

imp system/miro@instanzname fromuser=scott,jeff touser=ann,cathy file=c:\temp\full2.dmp

Falls für den Tablespace "users" keine Berechtigung vorhanden ist, muss dem Benutzer die entsprechende Quota angepasst werden.

Logische Sicherung mit expdp

Data Pump

expdp -help

Kalte Sicherung mit Betriebssystembefehl

sqlplus sys/miro@lunar61 as sysdba
SQL> desc dba_data_files
Name                                      Null?    Typ
----------------------------------------- -------- ----------------------------
FILE_NAME                                          VARCHAR2(513)
FILE_ID                                            NUMBER
TABLESPACE_NAME                                    VARCHAR2(30)
BYTES                                              NUMBER
BLOCKS                                             NUMBER
STATUS                                             VARCHAR2(9)
RELATIVE_FNO                                       NUMBER
AUTOEXTENSIBLE                                     VARCHAR2(3)
MAXBYTES                                           NUMBER
MAXBLOCKS                                          NUMBER
INCREMENT_BY                                       NUMBER
USER_BYTES                                         NUMBER
USER_BLOCKS                                        NUMBER
ONLINE_STATUS                                      VARCHAR2(7)


SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------

D:\ORACLE\PRODUCT\10.2.0\ORADATA\LUNAR61\USERS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\LUNAR61\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\LUNAR61\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\LUNAR61\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\LUNAR61\EXAMPLE01.DBF
C:\U03\ORADATA\DATA01.DBF

6 Zeilen ausgewõhlt.
shutdown immediate

Danach werden mit Betriebssystembefehlen alle Dateien gesichert.

Beim Wiederherstellen müssten mit ALTER DATABASE die Pfade der gesicherten Datenbank angepasst werden.

Heisses Backup mit Betriebssystembefehlen

Ansehen der Grundeinstellungen:

desc v$database
SQL> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG

Für diese Art Sicherung muss die Datenbank im Modus ARCHIVELOG laufen.

1. Datenbank herunterfahren

shutdown immediate;

2. In den MOUNT-Modus hochfahren

startup mount;

3. Archivelog-Modus einschalten

alter database archivelog;

4. Datenbank hochfahren

alter database open;

5. Überprüfen

SQL> select log_mode from v$database;

LOG_MODE
------------
ARCHIVELOG

Wechsel der Protokolldatei.

alter system switch logfile;

Nun sollte einmalig eine vollständige Sicherung durchgeführt werden!

Heisses Backup

Die Sicherung wird bei geöffneter Datenbank durchgeführt.

Backup eines Online-Tablespace

ALTER TABLESPACE ... BEGIN BACKUP

Sichern der Datendateien des Tablespace mit Betriebssystembefehlen.

ALTER TABLESPACE ... END BACKUP


1. Anlegen Verzeichnis "d:\backup-heiss"

2.

sqlplus system/miro@lunar61

3. Tablespace "users" in den Backup-Modus versetzen.

alter tablespace users begin backup;

4.

SQL> desc v$backup;
 Name                                      Null?    Typ
 ----------------------------------------- -------- ----------------------------

 FILE#                                              NUMBER
 STATUS                                             VARCHAR2(18)
 CHANGE#                                            NUMBER
 TIME                                               DATE
SQL> select * from v$backup;

     FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- --------
         1 NOT ACTIVE                  0
         2 NOT ACTIVE                  0
         3 NOT ACTIVE                  0
         4 ACTIVE                 800417 25.06.10
         5 NOT ACTIVE                  0
         6 NOT ACTIVE                  0

5. Kopieren des Tablespace "users" auf Betriebssystemebene

6. Backup-Modus für Tablespace "users" beenden.

SQL> alter tablespace users end backup;
SQL> select * from v$backup;

     FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- --------
         1 NOT ACTIVE                  0
         2 NOT ACTIVE                  0
         3 NOT ACTIVE                  0
         4 NOT ACTIVE             800417 25.06.10
         5 NOT ACTIVE                  0
         6 NOT ACTIVE                  0

7. Für eine Wiederherstellung müssen alle gesicherten Tablespaces zurückkopiert und ausserdem die zugehörigen Redo Log-Dateien nachgeschoben werden.




Zeile in Tabelle einfügen:

INSERT INTO kunde VALUES(1,'Siemens','8000','München',1);
INSERT INTO auftrag VALUES
 (1,1,22.5,0,1,to_date('23.06.2010','dd.mm.yyyy'),null,'Eine Bemerkung',1,1
 );
commit;
select * from kunde;
KUNDEN_ID              NACHNAME                         PLZ      ORT                      STATUS 
---------------------- -------------------------------- -------- ------------------------ ------ 
1                      Siemens                          8000     München                  1      

1 rows selected

FAQ

Datenbank entladen

login: sisis
$ . /opt/lib/sisis/etc/ora.rc
$ ORACLE_HOME=/opt/oracle/oracle/product/10.2.0/db_1
$ nohup $ORACLE_HOME/bin/exp sisis/sisis FILE=/tmp/sisis.exp \
    OWNER=sisis LOG=log.txt &
Export: Release 10.2.0.1.0 - Production on Mi Sep 21 16:20:44 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Angemeldet bei: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning and Data Mining options
Exportieren in WE8ISO8859P1-Zeichensatz und AL16UTF16-NCHAR-Zeichensatz durchgef�hrt

Spezifizierte Benutzer werden gleich exportiert ...
. Prozedurale Pre-Schema-Objekte und -Aktionen werden exportiert
. Fremdfunktions-Bibliotheksnamen für Benutzer SISIS werden exportiert 
. Synonyme vom Typ PUBLIC werden exportiert
. Synonyme vom Typ PRIVATE werden exportiert
. Objekttypdefinitionen für Benutzer SISIS  werden exportiert 
SISIS Objekte werden gleich exportiert ...
. Datenbank-Links werden exportiert
. Sequenzzahlen werden exportiert
. Clusterdefinitionen werden exportiert
. Tabellen von SISIS werden gleich exportiert ... über 'Conventional Path'
. . Export der Tabelle                     ABOAUFTRAG          0 Zeilen exportiert
...
. . Export der Tabelle                    Z39_ATTRSET          2 Zeilen exportiert
. Synonyme werden exportiert
. Views werden exportiert
. Gespeicherte Prozeduren werden exportiert
. Operatoren werden exportiert
. Referentielle Integritäts-Constraints werden exportiert
. Trigger werden exportiert
. Indextypen werden exportiert
. Bitmap-, funktionale und erweiterbare Indizes werden exportiert
. Exportieren von Posttable-Aktionen
. Materialized Views werden exportiert
. Snapshot-Log werden exportiert
. Exportieren von Job-Queues
. Exportieren von Aktualisierengruppen und untergeordneten Gruppen
. Dimensionen werden exportiert
. Prozedurale Post-Schema-Objekte und -Aktionen werden exportiert
. Statistiken werden exportiert
Export erfolgreich ohne Warnungen beendet.

Datenbank laden

login: sisis
$ . /opt/lib/sisis/etc/ora.rc
$ ORACLE_HOME=/opt/oracle/oracle/product/10.2.0/db_1
$ nohup $ORACLE_HOME/bin/imp sisis/sisis FILE=/backup/OLDHOST/EXPORTsisis/sisis.exp \
    FROMUSER=sisis TOUSER=sisis LOG=log.txt RECALCULATE_STATISTICS=Y &

Tabelle entladen

login: sisis
$ . /opt/lib/sisis/etc/ora.rc
$ ORACLE_HOME=/opt/oracle/oracle/product/10.2.0/db_1
$ nohup $ORACLE_HOME/bin/exp sisis/sisis FILE=d02ben.exp \
    TABLES='\"D02BEN\"' DIRECT=Y LOG=explog.txt &
Export: Release 10.2.0.1.0 - Production on Di Sep 29 12:10:04 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Angemeldet bei: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning and Data Mining options
Exportieren in WE8ISO8859P9-Zeichensatz und AL16UTF16-NCHAR-Zeichensatz durchgef
Server verwendet Zeichensatz AL32UTF8 (Zeichensatzkonvertierung möglich)

Angegebene Tabellen werden gleich exportiert über 'Direct Path'
. . Export der Tabelle                         D02BEN      34395 Zeilen exportiert
EXP-00091: Fragliche Statistiken werden exportiert.
EXP-00091: Fragliche Statistiken werden exportiert.
EXP-00091: Fragliche Statistiken werden exportiert.
Der Exportvorgang endete erfolgreich, aber mit einigen Warnungen.

Tabelle laden

login: sisis
$ . /opt/lib/sisis/etc/ora.rc
$ ORACLE_HOME=/opt/oracle/oracle/product/10.2.0/db_1
$ nohup $ORACLE_HOME/bin/imp sisis/sisis FILE=d02ben.exp \
    TABLES='\"D02BEN\"' IGNORE=Y LOG=implog.txt &

Umbenennung Rechner

Bei Umbenennung des Rechners müssen auch folgende für Oracle wichtige Dateien angepasst werden, da diese den Rechnernamen enthalten:

  • ORACLE_HOME=/opt/oracle/oracle/product/10.2.0/db_1
  • $ORACLE_HOME/network/admin/listener.ora
  • $ORACLE_HOME/network/admin/tnsnames.ora

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
country DE.gif Wikipedia ger Oracle (Datenbanksystem)wbm Enzyklopädischer Artikel