Im Allgemeinen ist ein Schema in Oracle dasselbe wie ein Benutzer. Oracle Database erstellt automatisch ein Schema, wenn Sie einen Benutzer erstellen. Eine Datei mit der Dateierweiterung DDL ist eine SQL Data Definition Language-Datei.
Neuen Benutzer erstellen (mit SQL Plus)
Grundlegende SQL Plus-Befehle:
- connect: connects to a database
- disconnect: logs off but does not exit
- exit: exists
Öffnen Sie SQL Plus und protokollieren Sie:
/ as sysdba
Die sysdba ist eine Rolle und ähnelt "root" unter Unix oder "Administrator" unter Windows. Es sieht alles, kann alles. Wenn Sie eine Verbindung als sysdba herstellen, wird Ihr Schemaname intern als SYS angezeigt.
Erstellen Sie einen Benutzer:
SQL> create user johny identified by 1234;
Alle Benutzer anzeigen und prüfen, ob der Benutzer johny da ist:
SQL> select username from dba_users;
Wenn Sie jetzt versuchen, sich als Johny anzumelden, wird eine Fehlermeldung angezeigt:
ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied
Der Benutzer, der sich anmeldet, muss mindestens ein Sitzungsprivileg erstellen, daher müssen wir dem Benutzer diese Berechtigungen gewähren:
SQL> grant create session to johny;
Jetzt können Sie als Benutzer Johny verbinden:
username: johny
password: 1234
Um den Benutzer loszuwerden, können Sie ihn fallen lassen:
SQL> drop user johny;
Dies war ein einfaches Beispiel, um zu zeigen, wie ein Benutzer erstellt wird. Es könnte komplexer sein. Oben haben wir einen Benutzer erstellt, dessen Objekte im Standardtabellenbereich der Datenbank gespeichert sind. Damit die Datenbank aufgeräumt wird, sollten wir Benutzerobjekte in seinem eigenen Bereich platzieren (Tabellenbereich ist eine Zuweisung von Speicherplatz in der Datenbank, der Schemaobjekte enthalten kann).
Bereits erstellte Tablespaces anzeigen:
SQL> select tablespace_name from dba_tablespaces;
Tabellenbereich erstellen:
SQL> create tablespace johny_tabspace
2 datafile 'johny_tabspace.dat'
3 size 10M autoextend on;
Temporären Tabellenbereich erstellen (Temporärer Tabellenbereich ist eine Zuweisung von Speicherplatz in der Datenbank, der vorübergehende Daten enthalten kann, die nur für die Dauer einer Sitzung bestehen bleiben. Diese vorübergehenden Daten können nach einem Prozess- oder Instanzfehler nicht wiederhergestellt werden.):
SQL> create temporary tablespace johny_tabspace_temp
2 tempfile 'johny_tabspace_temp.dat'
3 size 5M autoextend on;
Erstellen Sie den Benutzer:
SQL> create user johny
2 identified by 1234
3 default tablespace johny_tabspace
4 temporary tablespace johny_tabspace_temp;
Gewähren Sie einige Privilegien:
SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;
Melden Sie sich als Johny an und überprüfen Sie, welche Berechtigungen er hat:
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
Mit der Berechtigung zum Erstellen einer Tabelle kann der Benutzer Tabellen erstellen:
SQL> create table johny_table
2 (
3 id int not null,
4 text varchar2(1000),
5 primary key (id)
6 );
Daten einfügen:
SQL> insert into johny_table (id, text)
2 values (1, 'This is some text.');
Wählen:
SQL> select * from johny_table;
ID TEXT
--------------------------
1 This is some text.
Um DDL-Daten abzurufen, können Sie das Paket DBMS_METADATA verwenden, das "eine Möglichkeit bietet, Metadaten aus dem Datenbankwörterbuch als XML- oder Erstellungs-DDL abzurufen und das XML zum erneuten Erstellen des Objekts zu senden". (mit Hilfe von http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )
Für Tabelle:
SQL> set pagesize 0
SQL> set long 90000
SQL> set feedback off
SQL> set echo off
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u;
Ergebnis:
CREATE TABLE "JOHNY"."JOHNY_TABLE"
( "ID" NUMBER(*,0) NOT NULL ENABLE,
"TEXT" VARCHAR2(1000),
PRIMARY KEY ("ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "JOHNY_TABSPACE" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "JOHNY_TABSPACE"
Für den Index:
SQL> set pagesize 0
SQL> set long 90000
SQL> set feedback off
SQL> set echo off
SQL> SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) FROM USER_INDEXES u;
Ergebnis:
CREATE UNIQUE INDEX "JOHNY"."SYS_C0013353" ON "JOHNY"."JOHNY_TABLE" ("ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "JOHNY_TABSPACE"
Mehr Informationen:
DDL
DBMS_METADATA
Schemaobjekte
Unterschiede zwischen Schema und Benutzer
Privilegien
Benutzer / Schema erstellen
Tabellenbereich erstellen
SQL Plus-Befehle
create user foo ...
. Bitte lesen Sie das Handbuch