De um modo geral, um esquema no oracle é o mesmo que um usuário. O banco de dados Oracle cria automaticamente um esquema quando você cria um usuário. Um arquivo com a extensão DDL é um arquivo SQL Data Definition Language.
Criação de novo usuário (usando SQL Plus)
Comandos SQL Plus básicos:
- 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 "Administrador" no Windows. Ele vê tudo, pode fazer tudo. Internamente, se você se conectar como sysdba, o nome do seu esquema aparecerá como SYS.
Crie um usuário:
SQL> create user johny identified by 1234;
Visualize 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, portanto, 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 descartá-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 espaço de tabela padrão do banco de dados. Para ter o banco de dados organizado, devemos colocar os objetos do usuário em seu próprio espaço (o espaço de tabela é 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;
Crie um espaço de tabela:
SQL> create tablespace johny_tabspace
2 datafile 'johny_tabspace.dat'
3 size 10M autoextend on;
Crie um espaço de tabela temporário (o espaço de tabela 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 de criação de tabela, 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 );
Insira os 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
Objetos de esquema
Diferenças entre esquema e usuário
Privilégios
Criando usuário / esquema
Criação de tablespace
Comandos SQL Plus
create user foo ...
. Por favor, leia o