Create SCHEMA Oracle 11g

Lo Schema è un'area logica del database che contiene la totalità degli oggetti di pertinenza di un utente. Può essere visto come un database all'interno del vero database .

Differenza tra Schema e User:
Schema e User sono emrambi utenti del database ma quando un utente possiede oggetti allora si chiama schema.

L'istruzione CREATE SCHEMA non crea realmente uno schema ma è un contenitore vuoto che viene creato automaticamente da Oracle quando viene creato uno User. Include la creazione di oggetti come Create Table e Create View e istruzioni di Grant sugli oggetti. Uno User di default può accedere agli oggetti del proprio schema, ma uno schema potrebbe essere usato per memorizzare dati che devono essere acceduti da altri User; per questo motivo occorre assegnare privilegi su oggetti ad altri utenti.

Di seguito i passi da seguire per creare uno schema Oracle.

0) Creare un tablespace di riferiemnto

CREATE TABLESPACE demo_tbs1
DATAFILE '/u01/app/oracle/oradata/SALES/datafile/deomo_tbs1.dbf'
SIZE 1024M AUTOEXTEND ON NEXT 50M MAXSIZE 2048M
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO;

1) Creare un nuovo user.

CREATE USER comics
IDENTIFIED BY comics
DEFAULT TABLESPACE demo_tbs1
TEMPORARY TABLESPACE TEMP
ACCOUNT UNLOCK
PROFILE DEFAULT
QUOTA 10M|UNLIMITED ON  demo_tbs1;

2) Assegnare privilegi al nuovo user
Non è possibile connettersi come user "comics" perché non gli è stato assegnato alcun privilegio.
CREATE SESSION concede all'utente specificato la capacità di connettersi al proprio database.

GRANT CREATE SESSION  TO comics;
GRANT CREATE TABLE TO comics;
GRANT CREATE VIEW TO comics;
GRANT CREATE SEQUENCE TO comics;
GRANT CREATE SYNONYM TO comics;
GRANT CREATE ANY TRIGGER TO comics;
GRANT CREATE ANY PROCEDURE TO comics;

3) Creare oggetti all'interno del nuovo schema (tabelle, viste, sinonimi).
Collegarsi con il nuovo schema ed eseguire ad esempio i comandi:

CREATE TABLE editore(
id_edit number constraint id_edit_pk primary key,
nome varchar2(20));
CREATE VIEW editore_view AS select * from editore ;

4) Assegnare i privilegi ad altri user\schema che devono accedere agli oggetti del nuovo schema.

GRANT SELECT ON editore_view TO hr;

Se il nuovo utente "comics" vuole fornire a tutti gli utenti le grant di select sulla sua tabella deve eseguire il comando seguente:
GRANT select ON editore TO PUBLIC;


La seguente  sintassi non crea uno schema ma è una scorciatoia per creare diverse tabelle, viste ed assegnare multiple grant in una singola istruzione.

CREATE SCHEMA AUTHORIZATION schema_name
    [create_table_statement]
    [create_view_statement]
    [grant_statement];


Esempio:
CREATE SCHEMA AUTHORIZATION comics
   CREATE TABLE testate
   (id_test NUMBER CONSTRAINT id_test_pk PRIMARY KEY,nome VARCHAR2(20))
   CREATE TABLE SERIE
  (id_serie NUMBER CONSTRAINT id_serie_pk PRIMARY KEY,nome VARCHAR2(20),numero number , anno date , note varchar2(30) )
CREATE VIEW testate_view AS SELECT * FROM testate
CREATE VIEW SERIE_view AS SELECT * FROM serie
GRANT SELECT ON testate_view TO hr
GRANT SELECT ON serie_view TO hr;

Per cambiare nella sessione in corso lo schema eseguire il comando seguente:

ALTER SESSION SET CURRENT_SCHEMA = <nome_schema>; 

Verifica

select sys_context( 'userenv', 'current_schema' ) from dual;


Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database