J'ai postulé pour un stage dans une entreprise et, en guise de question, ils m'ont demandé de créer un schéma pour leur entreprise avec certaines exigences et de leur envoyer par courrier le DDL fichier. J'ai installé Oracle database 11g Express edition, mais comment créer un nouveau schéma dans Oracle database 11g ? J'ai cherché une solution sur le net mais je n'ai pas compris ce qu'il fallait faire. Et après avoir créé un schéma, quel fichier dois-je leur envoyer ?
Réponses
Trop de publicités?D'une manière générale, un schéma dans oracle est la même chose qu'un utilisateur. La base de données Oracle crée automatiquement un schéma lorsque vous créez un utilisateur. Un fichier portant l'extension DDL est un fichier SQL Data Definition Language.
Création d'un nouvel utilisateur (en utilisant SQL Plus)
Commandes SQL Plus de base :
- connect: connects to a database
- disconnect: logs off but does not exit
- exit: exits
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, le nom de votre schéma sera SYS.
Créer un utilisateur :
SQL> create user johny identified by 1234;
Afficher tous les utilisateurs et vérifier si l'utilisateur johny est présent :
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
Pour se connecter, l'utilisateur doit au moins créer un privilège de session. Nous devons donc accorder ce privilège à l'utilisateur :
SQL> grant create session to johny;
Maintenant vous pouvez vous connecter en tant qu'utilisateur johny :
username: johny
password: 1234
Pour se débarrasser de l'utilisateur, vous pouvez le laisser tomber :
SQL> drop user johny;
C'était un exemple de base pour montrer comment créer un utilisateur. Cela peut être plus complexe. Ci-dessus, nous avons créé un utilisateur dont les objets sont stockés dans le tablespace 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 tablespace temporaire (Le tablespace 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 l'échec du processus ou de l'instance) :
SQL> create temporary tablespace johny_tabspace_temp
2 tempfile 'johny_tabspace_temp.dat'
3 size 5M autoextend on;
Créer l'utilisateur :
SQL> create user johny
2 identified by 1234
3 default tablespace johny_tabspace
4 temporary tablespace johny_tabspace_temp;
Accordez certains 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 les privilèges dont il dispose :
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
Avec le privilège create 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 les 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 paquet DBMS_METADATA qui "fournit un moyen pour vous de récupérer les métadonnées du dictionnaire de la base de données en tant que XML ou DDL de création 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 la table :
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'indice :
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
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
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éation d'un tablespace
Commandes SQL Plus
Commençons. Avez-vous des connaissances en Oracle ?
Vous devez d'abord comprendre ce qu'est un SCHEMA. Un schéma est une collection de structures logiques de données, ou objets de schéma. Un schéma est la propriété d'un utilisateur de la base de données et porte le même nom que cet utilisateur. Chaque utilisateur possède un seul schéma. Les objets de schéma peuvent être créés et manipulés avec SQL.
- CREATE USER acoder ; -- chaque fois que vous créez un nouvel utilisateur dans Oracle, un schéma avec le même nom que le nom d'utilisateur est créé où tous ses objets sont stockés.
- GRANT CREATE SESSION TO acoder ; -- Si vous ne faites pas cela, vous ne pouvez rien faire.
Pour accéder au schéma d'un autre utilisateur, vous devez disposer de privilèges sur un objet spécifique de ce schéma ou, éventuellement, du rôle SYSDBA.
Cela devrait vous permettre de commencer.
SQL> select Username from dba_users
2 ;
USERNAME
------------------------------
SYS
SYSTEM
ANONYMOUS
APEX_PUBLIC_USER
FLOWS_FILES
APEX_040000
OUTLN
DIP
ORACLE_OCM
XS$NULL
MDSYS
USERNAME
------------------------------
CTXSYS
DBSNMP
XDB
APPQOSSYS
HR
16 rows selected.
SQL> create user testdb identified by password;
User created.
SQL> select username from dba_users;
USERNAME
------------------------------
TESTDB
SYS
SYSTEM
ANONYMOUS
APEX_PUBLIC_USER
FLOWS_FILES
APEX_040000
OUTLN
DIP
ORACLE_OCM
XS$NULL
USERNAME
------------------------------
MDSYS
CTXSYS
DBSNMP
XDB
APPQOSSYS
HR
17 rows selected.
SQL> grant create session to testdb;
Grant succeeded.
SQL> create tablespace testdb_tablespace
2 datafile 'testdb_tabspace.dat'
3 size 10M autoextend on;
Tablespace created.
SQL> create temporary tablespace testdb_tablespace_temp
2 tempfile 'testdb_tabspace_temp.dat'
3 size 5M autoextend on;
Tablespace created.
SQL> drop user testdb;
User dropped.
SQL> create user testdb
2 identified by password
3 default tablespace testdb_tablespace
4 temporary tablespace testdb_tablespace_temp;
User created.
SQL> grant create session to testdb;
Grant succeeded.
SQL> grant create table to testdb;
Grant succeeded.
SQL> grant unlimited tablespace to testdb;
Grant succeeded.
SQL>
A partir d'oracle Sql developer, exécutez ce qui suit dans la feuille de travail sql :
create user lctest identified by lctest;
grant dba to lctest;
puis clic droit sur "Connexion Oracle" -> nouvelle connexion, puis faire tout lctest du nom de connexion au nom d'utilisateur mot de passe. La connexion de test doit passer. Ensuite, après la connexion, vous verrez le schéma.