D'une manière générale, un schéma dans Oracle est identique à un utilisateur. Oracle Database crée automatiquement un schéma lorsque vous créez un utilisateur. Un fichier avec l'extension de fichier DDL est un fichier SQL Data Definition Language.
Création d'un nouvel utilisateur (à l'aide de SQL Plus)
Commandes SQL Plus de base :
- connect: connects to a database
- disconnect: logs off but does not exit
- exit: exists
Ouvrez SQL Plus et connectez-vous :
/ as sysdba
Le sysdba est un rôle et est comme "root" sur unix ou "Administrator" sur Windows. Il voit tout, peut tout faire. En interne, si vous vous connectez en tant que sysdba, votre nom de schéma apparaîtra comme étant SYS.
Créer un utilisateur :
SQL> create user johny identified by 1234;
Voir tous les utilisateurs et vérifier si l'utilisateur johny est là :
SQL> select username from dba_users;
Si vous essayez de vous connecter en tant que johny maintenant, vous obtiendrez une erreur :
ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied
L'utilisateur pour se connecter doit au moins créer un privilège de session, nous devons donc accorder ces privilèges à l'utilisateur :
SQL> grant create session to johny;
Vous pouvez maintenant vous connecter en tant qu'utilisateur johny :
username: johny
password: 1234
Pour vous débarrasser de l'utilisateur, vous pouvez le supprimer :
SQL> drop user johny;
C'était un exemple de base pour montrer comment créer un utilisateur. C'est peut-être plus complexe. Ci-dessus, nous avons créé un utilisateur dont les objets sont stockés dans l'espace de table par défaut de la base de données. Pour que la base de données soit bien rangée, nous devons placer les objets de l'utilisateur dans son propre espace (le tablespace est une allocation d'espace dans la base de données qui peut contenir des objets de schéma).
Afficher les tablespaces déjà créés :
SQL> select tablespace_name from dba_tablespaces;
Créer un tablespace :
SQL> create tablespace johny_tabspace
2 datafile 'johny_tabspace.dat'
3 size 10M autoextend on;
Créer un espace de table temporaire (l'espace de table temporaire est une allocation d'espace dans la base de données qui peut contenir des données transitoires qui ne persistent que pendant la durée d'une session. Ces données transitoires ne peuvent pas être récupérées après un échec de processus ou d'instance.) :
SQL> create temporary tablespace johny_tabspace_temp
2 tempfile 'johny_tabspace_temp.dat'
3 size 5M autoextend on;
Créez l'utilisateur :
SQL> create user johny
2 identified by 1234
3 default tablespace johny_tabspace
4 temporary tablespace johny_tabspace_temp;
Accordez des privilèges :
SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;
Connectez-vous en tant que johny et vérifiez ses privilèges :
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
Avec le privilège de création de table, l'utilisateur peut créer des tables :
SQL> create table johny_table
2 (
3 id int not null,
4 text varchar2(1000),
5 primary key (id)
6 );
Insérer des données :
SQL> insert into johny_table (id, text)
2 values (1, 'This is some text.');
Sélectionnez :
SQL> select * from johny_table;
ID TEXT
--------------------------
1 This is some text.
Pour obtenir des données DDL, vous pouvez utiliser le package DBMS_METADATA qui "fournit un moyen pour vous de récupérer les métadonnées du dictionnaire de base de données sous forme de XML ou de création DDL et de soumettre le XML pour recréer l'objet.". (avec l'aide de http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )
Pour le tableau :
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;
Résultat :
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"
Pour l'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;
Résultat :
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"
Plus d'informations :
DDL
SGBD_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
Objets de schéma
Différences entre schéma et utilisateur
- https://dba. stackexchange.com/questions/37012/difference-between-database-vs-user-vs-schema
- Différence entre un utilisateur et un schéma dans Oracle ?
Privilèges
Création d'un utilisateur/schéma
- http://docs.oracle.com/ cd/B19306_01/server.102/b14200/statements_8003.htm
- http://www.techonthenet.com/oracle/schemas/create_schema. php
Créer un tablespace
Commandes SQL Plus