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?
86
create user foo ...
. Por favor, leia oRespostas:
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:
Abra o SQL Plus e registre:
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:
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
fonte
/ as sysdba
iní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.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 umconnect myuser
, recebo o erroORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
sqlplus
comando 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=???))
ORA-65096: invalid common user or role name
ao executar ocreate user ... default tablespace ...
comandoÉ um exemplo prático:
CREATE USER auto_exchange IDENTIFIED BY 123456; GRANT RESOURCE TO auto_exchange; GRANT CONNECT TO auto_exchange; GRANT CREATE VIEW TO auto_exchange; GRANT CREATE SESSION TO auto_exchange; GRANT UNLIMITED TABLESPACE TO auto_exchange;
fonte
alter session set "_ORACLE_SCRIPT"=true;
".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.
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.
fonte
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>
fonte
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.
fonte