Oracle
 sql >> Database >  >> RDS >> Oracle

Come creare un nuovo schema/nuovo utente in Oracle Database 11g?

In generale, uno schema in Oracle è lo stesso di un utente. Oracle Database crea automaticamente uno schema quando crei un utente. Un file con estensione DDL è un file SQL Data Definition Language.

Creazione di un nuovo utente (tramite SQL Plus)

Comandi di base di SQL Plus:

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

Apri SQL Plus e registra:

/ as sysdba

Il sysdba è un ruolo ed è come "root" su unix o "Administrator" su Windows. Vede tutto, può fare tutto. Internamente, se ti connetti come sysdba, il nome del tuo schema apparirà come SYS.

Crea un utente:

SQL> create user johny identified by 1234;

Visualizza tutti gli utenti e controlla se l'utente johny è presente:

SQL> select username from dba_users;

Se provi ad accedere come johny ora otterresti un errore:

ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied

L'utente per accedere deve almeno creare privilegi di sessione, quindi dobbiamo concedere questi privilegi all'utente:

SQL> grant create session to johny;

Ora puoi connetterti come utente johny:

username: johny
password: 1234

Per sbarazzarti dell'utente puoi rilasciarlo:

SQL> drop user johny;

Quello era un esempio di base per mostrare come creare un utente. Potrebbe essere più complesso. Sopra abbiamo creato un utente i cui oggetti sono archiviati nel tablespace predefinito del database. Per avere il database in ordine, dovremmo posizionare gli oggetti degli utenti nel proprio spazio (il tablespace è un'allocazione di spazio nel database che può contenere oggetti dello schema).

Mostra tablespace già creati:

SQL> select tablespace_name from dba_tablespaces;

Crea tablespace:

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

Crea spazio tabella temporaneo (lo spazio tabella temporaneo è un'allocazione di spazio nel database che può contenere dati temporanei che persistono solo per la durata di una sessione. Questi dati temporanei non possono essere recuperati dopo un errore del processo o dell'istanza.):

SQL> create temporary tablespace johny_tabspace_temp
  2  tempfile 'johny_tabspace_temp.dat'
  3  size 5M autoextend on;

Crea l'utente:

SQL> create user johny
  2  identified by 1234
  3  default tablespace johny_tabspace
  4  temporary tablespace johny_tabspace_temp;

Concedi alcuni privilegi:

SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;

Accedi come johny e controlla quali privilegi ha:

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

Con il privilegio di creazione tabella l'utente può creare tabelle:

SQL> create table johny_table
  2  (
  3     id int not null,
  4     text varchar2(1000),
  5     primary key (id)
  6  );

Inserisci dati:

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

Seleziona:

SQL> select * from johny_table;

ID  TEXT
--------------------------
1   This is some text.

Per ottenere i dati DDL è possibile utilizzare il pacchetto DBMS_METADATA che "fornisce un modo per recuperare i metadati dal dizionario del database come XML o DDL di creazione e per inviare l'XML per ricreare l'oggetto.".(con l'aiuto di http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )

Per la tavola:

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;

Risultato:

  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"

Per 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;

Risultato:

  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"

Maggiori informazioni:

DDL

DBMS_METADATI

Oggetti dello schema

Differenze tra schema e utente

Privilegi

Creazione utente/schema

Creazione tablespace

Comandi SQL Plus