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 DDL-Dateierweiterung 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 melden Sie sich an:
/ as sysdba
Die sysdba ist eine Rolle und ist wie „root“ unter Unix oder „Administrator“ unter Windows. Es sieht alles, kann alles. Wenn Sie sich als sysdba verbinden, erscheint Ihr Schemaname intern als SYS.
Erstellen Sie einen Benutzer:
SQL> create user johny identified by 1234;
Alle Benutzer anzeigen und prüfen, ob der Benutzer johny vorhanden ist:
SQL> select username from dba_users;
Wenn Sie versuchen, sich jetzt als johny anzumelden, erhalten Sie eine Fehlermeldung:
ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied
Der Benutzer, der sich anmelden möchte, muss mindestens eine Sitzungsberechtigung erstellen, also müssen wir dem Benutzer diese Berechtigungen erteilen:
SQL> grant create session to johny;
Jetzt können Sie sich als Benutzer johny:
anmeldenusername: johny
password: 1234
Um den Benutzer loszuwerden, können Sie ihn löschen:
SQL> drop user johny;
Das war ein einfaches Beispiel, um zu zeigen, wie man einen Benutzer erstellt. Es könnte komplexer sein. Oben haben wir einen Benutzer erstellt, dessen Objekte im Standard-Tablespace der Datenbank gespeichert sind. Um die Datenbank aufgeräumt zu haben, sollten wir die Objekte des Benutzers in seinem eigenen Bereich platzieren (Tablespace ist eine Zuweisung von Speicherplatz in der Datenbank, die Schema-Objekte enthalten kann).
Bereits erstellte Tablespaces anzeigen:
SQL> select tablespace_name from dba_tablespaces;
Tablespace erstellen:
SQL> create tablespace johny_tabspace
2 datafile 'johny_tabspace.dat'
3 size 10M autoextend on;
Temporären Tablespace erstellen (Temporärer Tablespace ist eine Zuweisung von Speicherplatz in der Datenbank, die 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 Privilegien er hat:
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
Mit dem Recht zum Erstellen von Tabellen 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 Sie:
SQL> select * from johny_table;
ID TEXT
--------------------------
1 This is some text.
Um DDL-Daten zu erhalten, können Sie das DBMS_METADATA-Paket verwenden, das „eine Möglichkeit bietet, Metadaten aus dem Datenbankwörterbuch als XML oder Erstellungs-DDL abzurufen und das XML zu übermitteln, um das Objekt neu zu erstellen.“ (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"
Weitere Informationen:
DDL
DBMS_METADATA
- http://www.dba-oracle.com/t_1_dbms_metadata.htm
- http://docs.oracle. com/cd/E11882_01/appdev.112/e25788/d_metada.htm#ARPLS026
- http://docs.oracle. com/cd/B28359_01/server.111/b28310/general010.htm#ADMIN11562
Schema-Objekte
Unterschiede zwischen Schema und Benutzer
- https://dba. stackexchange.com/questions/37012/difference-between-database-vs-user-vs-schema
- Unterschied zwischen einem Benutzer und ein Schema in Oracle?
Privilegien
Benutzer/Schema erstellen
- http://docs.oracle.com/ cd/B19306_01/server.102/b14200/statements_8003.htm
- http://www.techonthenet.com/oracle/schemas/create_schema. php
Tablespace erstellen
SQL Plus-Befehle