¿Cómo crear un nuevo esquema / nuevo usuario en Oracle Database 11g?


86

He solicitado una pasantía en una empresa y como pregunta me han pedido que cree un esquema para su empresa con ciertos requisitos y les envíe por correo el archivo DDL . He instalado la edición Express de la base de datos Oracle 11g, pero ¿cómo creo un nuevo esquema en la base de datos Oracle 11g? He buscado en la red una solución pero no pude entender qué hacer. Y después de crear un esquema, ¿qué archivo debo enviarles por correo?


create user foo .... Lea el manual-
a_horse_with_no_name

¿Puedo saber qué es el clúster de administración de almacenamiento automático de Oracle?
acoder

4
Este sitio no es un sustituto de su propia investigación y aprendizaje de la documentación del producto. Al buscar en el enlace que Ben dio para ese término, también obtendrá información sobre qué es ASM. Tienes que empezar por el principio. No puede esperar que la gente aquí explique todo Oracle, es un tema demasiado grande; o incluso explicar cada término nuevo que encuentre. Tal vez debería explicarle a la empresa que no tiene ningún conocimiento de Oracle, pero le gustaría aprender y ver si pueden brindarle capacitación.
Alex Poole

1
Para los recién llegados a Oracle, el proceso se simplifica si puede utilizar Oracle Database XE. XE proporciona una interfaz de usuario web para crear un nuevo usuario / esquema (también conocido como "Application Express Workspace"). Probé esto en XE 11.2. Crédito a @vitfo por la respuesta detallada completa de 11g a continuación.
Paul

Respuestas:


240

En general, un esquema en Oracle es lo mismo que un usuario. Oracle Database crea automáticamente un esquema cuando crea un usuario. Un archivo con la extensión de archivo DDL es un archivo de lenguaje de definición de datos SQL.

Creando un nuevo usuario (usando SQL Plus)

Comandos básicos de SQL Plus:

  - connect: connects to a database
  - disconnect: logs off but does not exit
  - exit: exists

Abra SQL Plus y registre:

/ as sysdba

El sysdba es un rol y es como "root" en Unix o "Administrador" en Windows. Ve todo, puede hacer todo. Internamente, si se conecta como sysdba, su nombre de esquema parecerá ser SYS.

Crea un usuario:

SQL> create user johny identified by 1234;

Ver todos los usuarios y comprobar si el usuario johny está allí:

SQL> select username from dba_users;

Si intenta iniciar sesión como johny ahora, obtendrá un error:

ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied

El usuario para iniciar sesión necesita al menos crear privilegios de sesión, por lo que tenemos que otorgar estos privilegios al usuario:

SQL> grant create session to johny;

Ahora puede conectarse como usuario johny:

username: johny
password: 1234

Para deshacerse del usuario, puede soltarlo:

SQL> drop user johny;

Ese fue un ejemplo básico para mostrar cómo crear un usuario. Podría ser más complejo. Arriba creamos un usuario cuyos objetos se almacenan en el espacio de tabla predeterminado de la base de datos. Para tener la base de datos ordenada, debemos colocar los objetos de los usuarios en su propio espacio (tablespace es una asignación de espacio en la base de datos que puede contener objetos de esquema).

Mostrar espacios de tabla ya creados:

SQL> select tablespace_name from dba_tablespaces;

Crear espacio de tabla:

SQL> create tablespace johny_tabspace
  2  datafile 'johny_tabspace.dat'
  3  size 10M autoextend on;

Crear un espacio de tabla temporal (el espacio de tabla temporal es una asignación de espacio en la base de datos que puede contener datos transitorios que persisten solo durante la duración de una sesión. Estos datos transitorios no se pueden recuperar después de un fallo de proceso o instancia):

SQL> create temporary tablespace johny_tabspace_temp
  2  tempfile 'johny_tabspace_temp.dat'
  3  size 5M autoextend on;

Crea el usuario:

SQL> create user johny
  2  identified by 1234
  3  default tablespace johny_tabspace
  4  temporary tablespace johny_tabspace_temp;

Otorga algunos privilegios:

SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;

Inicie sesión como johny y compruebe qué privilegios tiene:

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

Con el privilegio de crear tablas, el usuario puede crear tablas:

SQL> create table johny_table
  2  (
  3     id int not null,
  4     text varchar2(1000),
  5     primary key (id)
  6  );

Insertar datos:

SQL> insert into johny_table (id, text)
  2  values (1, 'This is some text.');

Seleccione:

SQL> select * from johny_table;

ID  TEXT
--------------------------
1   This is some text.

Para obtener datos DDL, puede utilizar el paquete DBMS_METADATA que "le proporciona una forma de recuperar metadatos del diccionario de la base de datos como XML o DDL de creación y enviar el XML para volver a crear el objeto". (con la ayuda 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"

Más información:

DDL

DBMS_METADATA

Objetos de esquema

Diferencias entre esquema y usuario

Privilegios

Creando usuario / esquema

Creando tablespace

Comandos SQL Plus


3
Al / as sysdbaprincipio significa ejecutar " c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba" desde un shell de comandos de Windows.
Uwe Keim

3
También es útil tener: OTORGAR CREAR VISTA A <usuario>; CONCEDER CREAR SECUENCIA A <usuario>;
Witold Kaczurba

Me conecté usando sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=XE)))y luego escribí todos estos comandos tuyos. Pero luego, al hacer un connect myuser, obtengo el errorORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
Stephane

¿Podría darnos el sqlplusmando completo ? Como, basado en el usuario que acaba de crear arriba, tener el comando completosqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Stephane

Recibo un error ORA-65096: invalid common user or role nameal ejecutar el create user ... default tablespace ...comando
cryanbhu


15

Empecemos. ¿Tiene algún conocimiento en Oracle?

Primero necesitas entender qué es un ESQUEMA. Un esquema es una colección de estructuras lógicas de datos u objetos de esquema. Un esquema es propiedad de un usuario de base de datos y tiene el mismo nombre que ese usuario. Cada usuario posee un solo esquema. Los objetos de esquema se pueden crear y manipular con SQL.

  1. CREAR USUARIO codificador; - cada vez que crea un nuevo usuario en Oracle, se crea un esquema con el mismo nombre que el nombre de usuario donde se almacenan todos sus objetos.
  2. GRANT CREAR SESIÓN A un codificador; - Si no lo hace, no puede hacer nada.

Para acceder al esquema de otro usuario, es necesario que se le otorguen privilegios sobre un objeto específico en ese esquema o, opcionalmente, tener asignado el rol SYSDBA.

Eso debería ayudarte a empezar.


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>

0

Desde el desarrollador de Oracle Sql, ejecute lo siguiente en la hoja de trabajo de SQL:

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

luego haga clic con el botón derecho en "Conexión Oracle" -> nueva conexión, luego haga que todo sea lctest, desde el nombre de la conexión hasta la contraseña del nombre de usuario. La conexión de prueba debe pasar. Luego, después de conectarse, verá el esquema.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.