De um modo geral, um esquema no oracle é o mesmo que um usuário. O Oracle Database cria automaticamente um esquema quando você cria um usuário. Um arquivo com a extensão de arquivo DDL é um arquivo SQL Data Definition Language.
Criando novo usuário (usando SQL Plus)
Comandos básicos do SQL Plus:
- connect: connects to a database
- disconnect: logs off but does not exit
- exit: exists
Abra o SQL Plus e registre:
/ as sysdba
O sysdba é uma função e é como "root" no unix ou "Administrator" no Windows. Ele vê tudo, pode fazer tudo. Internamente, se você se conectar como sysdba, seu nome de esquema parecerá SYS.
Crie um usuário:
SQL> create user johny identified by 1234;
Veja todos os usuários e verifique se o usuário johny está lá:
SQL> select username from dba_users;
Se você tentar fazer login como johny agora, receberá um erro:
ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied
O usuário para fazer login precisa pelo menos criar privilégios de sessão, então temos que conceder esses privilégios ao usuário:
SQL> grant create session to johny;
Agora você pode se conectar como o usuário johny:
username: johny
password: 1234
Para se livrar do usuário, você pode soltá-lo:
SQL> drop user johny;
Esse foi um exemplo básico para mostrar como criar um usuário. Pode ser mais complexo. Acima criamos um usuário cujos objetos são armazenados no tablespace padrão do banco de dados. Para ter o banco de dados arrumado devemos colocar os objetos dos usuários em seu próprio espaço (tablespace é uma alocação de espaço no banco de dados que pode conter objetos de esquema).
Mostrar tablespaces já criados:
SQL> select tablespace_name from dba_tablespaces;
Criar espaço de tabela:
SQL> create tablespace johny_tabspace
2 datafile 'johny_tabspace.dat'
3 size 10M autoextend on;
Criar tablespace temporário (tablespace temporário é uma alocação de espaço no banco de dados que pode conter dados transitórios que persistem apenas durante uma sessão. Esses dados transitórios não podem ser recuperados após falha de processo ou instância.):
SQL> create temporary tablespace johny_tabspace_temp
2 tempfile 'johny_tabspace_temp.dat'
3 size 5M autoextend on;
Crie o usuário:
SQL> create user johny
2 identified by 1234
3 default tablespace johny_tabspace
4 temporary tablespace johny_tabspace_temp;
Conceda alguns privilégios:
SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;
Faça login como johny e verifique quais privilégios ele possui:
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
Com o privilégio create table o usuário pode criar tabelas:
SQL> create table johny_table
2 (
3 id int not null,
4 text varchar2(1000),
5 primary key (id)
6 );
Inserir dados:
SQL> insert into johny_table (id, text)
2 values (1, 'This is some text.');
Selecione:
SQL> select * from johny_table;
ID TEXT
--------------------------
1 This is some text.
Para obter dados DDL, você pode usar o pacote DBMS_METADATA que "fornece uma maneira de recuperar metadados do dicionário do banco de dados como XML ou DDL de criação e enviar o XML para recriar o objeto.".(com ajuda de http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )
Para mesa:
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;
Resultado:
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"
Para índice:
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;
Resultado:
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"
Mais informações:
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
Objetos de esquema
Diferenças entre esquema e usuário
- https://dba. stackexchange.com/questions/37012/difference-between-database-vs-user-vs-schema
- Diferença entre um usuário e um esquema no Oracle?
Privilégios
Criando usuário/esquema
- http://docs.oracle.com/ cd/B19306_01/server.102/b14200/statements_8003.htm
- http://www.techonthenet.com/oracle/schemas/create_schema. php
Criando tablespace
Comandos SQL Plus