Como criar um novo esquema / novo usuário no Oracle Database 11g?

86

Candidatei-me a um estágio numa empresa e, como questão, pediram-me para criar um esquema para a sua empresa com determinados requisitos e enviar-lhes o ficheiro DDL . Instalei o banco de dados Oracle 11g Express edition, mas como faço para criar um novo esquema no banco de dados Oracle 11g? Procurei na net por uma solução mas não consegui entender o que fazer. E depois de criar um esquema, qual arquivo devo enviá-los?

acoder
fonte
create user foo .... Por favor, leia o
manual-
posso saber o que é cluster de gerenciamento de armazenamento automático da oracle?
acoder
4
Este site não é um substituto para fazer sua própria pesquisa e aprender com a documentação do produto. Pesquisar o link que Ben deu para esse termo também mostrará o que é ASM. Você precisa começar do início. Você não pode esperar que as pessoas aqui expliquem toda a Oracle, é um tópico muito grande; ou até mesmo explicar cada novo termo que encontrar. Talvez você deva explicar para a empresa que não tem nenhum conhecimento em Oracle, mas gostaria de aprender e ver se eles podem fornecer treinamento para você.
Alex Poole
1
Para novatos no Oracle, o processo é simplificado se você puder usar o Oracle Database XE. O XE fornece uma IU da Web para criar um novo usuário / esquema (também conhecido como "Application Express Workspace"). Tentei isso no XE 11.2. Agradecemos a @vitfo pela resposta completa 11g detalhada abaixo.
Paul de

Respostas:

240

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

vitfo
fonte
3
No / as sysdbainício significa executar " c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba" a partir de um shell de comando do Windows.
Uwe Keim
3
Também útil ter: GRANT CREATE VIEW TO <user>; GRANT CREATE SEQUENCE TO <user>;
Witold Kaczurba
Liguei usando sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=XE)))e digitei todos esses comandos seus. Mas então, ao fazer um connect myuser, recebo o erroORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
Stephane
Você poderia nos dar o sqlpluscomando completo ? Tipo, com base no usuário recém-criado acima, tendo o comando completosqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Stephane
Recebo um erro ORA-65096: invalid common user or role nameao executar o create user ... default tablespace ...comando
cryanbhu
15

Vamos começar. Você tem algum conhecimento em Oracle?

Primeiro você precisa entender o que é um ESQUEMA. Um esquema é uma coleção de estruturas lógicas de dados ou objetos de esquema. Um esquema pertence a um usuário de banco de dados e tem o mesmo nome desse usuário. Cada usuário possui um único esquema. Objetos de esquema podem ser criados e manipulados com SQL.

  1. CREATE USER acoder; - sempre que você cria um novo usuário no Oracle, um esquema com o mesmo nome do nome de usuário é criado, onde todos os seus objetos são armazenados.
  2. GRANT CREATE SESSION TO acoder; - Deixar de fazer isso você não pode fazer nada.

Para acessar o esquema de outro usuário, você precisa ter privilégios concedidos a um objeto específico nesse esquema ou, opcionalmente, ter a função SYSDBA atribuída.

Isso deve ajudar você a começar.

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

No desenvolvedor Oracle Sql, execute o seguinte na planilha sql:

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

em seguida, clique com o botão direito do mouse em "Conexão Oracle" -> nova conexão e faça tudo testado, desde o nome da conexão até o nome do usuário e a senha. A conexão de teste deve passar. Depois de conectado, você verá o esquema.

Feng Zhang
fonte