web-dev-qa-db-fra.com

Comment créer un nouveau schéma / nouvel utilisateur dans Oracle Database 11g?

J'ai postulé pour un stage dans une entreprise. Ils m'ont demandé de créer un schéma pour leur entreprise avec certaines exigences et de leur envoyer le fichier DDL. J'ai installé Oracle édition de base de données 11g Express Edition, mais comment puis-je créer un nouveau schéma dans Oracle Database 11g? J'ai cherché une solution sur le net, mais je ne comprenais pas quoi faire. Et après avoir créé un schéma, quel fichier dois-je leur envoyer?

76
acoder

En règle 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 de base SQL Plus:

  - connect: connects to a database
  - disconnect: logs off but does not exit
  - exit: exists

Ouvrez SQL Plus et connectez-vous:

/ as sysdba

La sysdba est un rôle et ressemble à "root" sous unix ou à "administrateur" sous Windows. Il voit tout, peut tout faire. En interne, si vous vous connectez en tant que sysdba, votre nom de schéma semblera être SYS.

Créer un utilisateur:

SQL> create user johny identified by 1234;

Voir 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

L'utilisateur à connecter doit au moins créer le privilège de session. Nous devons donc lui octroyer ces privilèges:

SQL> grant create session to johny;

Vous pouvez maintenant 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. C'est peut-être plus complexe. Nous avons créé ci-dessus 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 utilisateurs dans son propre espace (l’espace table est une allocation d’espace dans la base de données pouvant contenir des objets de schéma).

Afficher les espaces de table déjà créés:

SQL> select tablespace_name from dba_tablespaces;

Créer un espace de table:

SQL> create tablespace johny_tabspace
  2  datafile 'johny_tabspace.dat'
  3  size 10M autoextend on;

Créer un espace de table temporaire (Espace de table temporaire est une allocation d'espace dans la base de données pouvant contenir des données transitoires persistant uniquement 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;

Accorder 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 quels sont ses privilèges:

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 des données:

SQL> insert into johny_table (id, text)
  2  values (1, 'This is some text.');

Sélectionner:

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 "vous permet d'extraire les métadonnées du dictionnaire de base de données au format XML ou DDL de création et de soumettre le code 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'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

DBMS_METADATA

Objets de schéma

Différences entre schéma et utilisateur

Privilèges

Création d'utilisateur/schéma

Création de tablespace

Commandes SQL Plus

223
vitfo

C'est un exemple de travail:

CREATE USER auto_exchange IDENTIFIED BY 123456;
GRANT RESOURCE TO auto_exchange;
GRANT CONNECT TO auto_exchange;
GRANT CREATE VIEW TO auto_exchange;
GRANT CREATE SESSION TO auto_exchange;
GRANT UNLIMITED TABLESPACE TO auto_exchange;
15
D Vy

Commençons. Avez-vous des connaissances dans Oracle?

Vous devez d’abord comprendre ce qu’est un SCHEMA. Un schéma est un ensemble de structures logiques de données ou d’objets de schéma. Un schéma appartient à un utilisateur de 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.

  1. CREATE USER acoder; - chaque fois que vous créez un nouvel utilisateur dans Oracle, un schéma portant le même nom que le nom d'utilisateur est créé, dans lequel tous ses objets sont stockés.
  2. GRANT CREATE SESSION TO ACODE; - Si vous ne le faites pas, 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, le rôle SYSDBA doit être attribué.

Cela devrait vous aider à démarrer.

14
Tav
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>
4
Raj Sharma

Depuis le développeur Oracle Sql, exécutez la feuille de calcul ci-dessous dans SQL:

create user lctest identified by lctest;
grant dba to lctest;

cliquez ensuite avec le bouton droit de la souris sur "Connexion Oracle" -> Nouvelle connexion, puis effectuez tout ce qui va du nom de la connexion au nom de l'utilisateur, mot de passe. Connexion de test doit passer. Ensuite, après connexion, vous verrez le schéma.

0
Feng Zhang