Generelt set er et skema i oracle det samme som en bruger. Oracle Database opretter automatisk et skema, når du opretter en bruger. En fil med filtypenavnet DDL er en SQL Data Definition Language-fil.
Oprettelse af ny bruger (ved hjælp af SQL Plus)
Grundlæggende SQL Plus-kommandoer:
- connect: connects to a database
- disconnect: logs off but does not exit
- exit: exists
Åbn SQL Plus og log:
/ as sysdba
Sysdba er en rolle og er ligesom "root" på unix eller "administrator" på Windows. Den ser alt, kan alt. Internt, hvis du forbinder som sysdba, vil dit skemanavn se ud til at være SYS.
Opret en bruger:
SQL> create user johny identified by 1234;
Se alle brugere og tjek om brugeren johny er der:
SQL> select username from dba_users;
Hvis du prøver at logge ind som johny nu, får du en fejlmeddelelse:
ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied
Brugeren til at logge ind skal i det mindste oprette sessionsprivilegier, så vi er nødt til at give brugeren disse privilegier:
SQL> grant create session to johny;
Nu er du i stand til at oprette forbindelse som brugeren johny:
username: johny
password: 1234
For at slippe af med brugeren kan du droppe den:
SQL> drop user johny;
Det var et grundlæggende eksempel for at vise, hvordan man opretter en bruger. Det kan være mere komplekst. Ovenfor har vi oprettet en bruger, hvis objekter er gemt i databasens standard tablespace. For at få ryddet op i databasen bør vi placere brugerobjekter til hans eget rum (tablespace er en tildeling af plads i databasen, der kan indeholde skemaobjekter).
Vis allerede oprettede tablespaces:
SQL> select tablespace_name from dba_tablespaces;
Opret tablespace:
SQL> create tablespace johny_tabspace
2 datafile 'johny_tabspace.dat'
3 size 10M autoextend on;
Opret midlertidigt tablespace (Temporaty tablespace er en tildeling af plads i databasen, der kan indeholde forbigående data, der kun eksisterer i varigheden af en session. Disse forbigående data kan ikke gendannes efter proces- eller instansfejl.):
SQL> create temporary tablespace johny_tabspace_temp
2 tempfile 'johny_tabspace_temp.dat'
3 size 5M autoextend on;
Opret brugeren:
SQL> create user johny
2 identified by 1234
3 default tablespace johny_tabspace
4 temporary tablespace johny_tabspace_temp;
Giv nogle privilegier:
SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;
Log ind som johny og tjek hvilke privilegier han har:
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
Med oprettelse af tabelrettigheder kan brugeren oprette tabeller:
SQL> create table johny_table
2 (
3 id int not null,
4 text varchar2(1000),
5 primary key (id)
6 );
Indsæt data:
SQL> insert into johny_table (id, text)
2 values (1, 'This is some text.');
Vælg:
SQL> select * from johny_table;
ID TEXT
--------------------------
1 This is some text.
For at få DDL-data kan du bruge DBMS_METADATA-pakken, der "giver en måde for dig at hente metadata fra databaseordbogen som XML eller oprettelses-DDL og til at indsende XML for at genskabe objektet.".(med hjælp fra http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )
Til bord:
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;
Resultat:
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"
Til indeks:
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;
Resultat:
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"
Flere oplysninger:
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
Skemaobjekter
Forskelle mellem skema og bruger
- https://dba. stackexchange.com/questions/37012/difference-between-database-vs-user-vs-schema
- Forskel mellem en bruger og et skema i Oracle?
Privilegier
Opretter bruger/skema
- http://docs.oracle.com/ cd/B19306_01/server.102/b14200/statements_8003.htm
- http://www.techonthenet.com/oracle/schemas/create_schema. php
Oprettelse af tablespace
SQL Plus-kommandoer