sql >> Base de Datos >  >> RDS >> Oracle

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

En términos generales, 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 "raíz" en Unix o "Administrador" en Windows. Ve todo, puede hacer todo. Internamente, si se conecta como sysdba, su nombre de esquema aparecerá como SYS.

Crear un usuario:

SQL> create user johny identified by 1234;

Ver todos los usuarios y verificar 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 debemos otorgar estos privilegios al usuario:

SQL> grant create session to johny;

Ahora puede conectarse como el 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 tablespace 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 tablas ya creados:

SQL> select tablespace_name from dba_tablespaces;

Crear espacio de tablas:

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

Cree 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 una sesión. Estos datos transitorios no se pueden recuperar después de que falle el proceso o la 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;

Concede 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 verifique qué privilegios tiene:

SQL> select * from session_privs;

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

Con el privilegio de crear tabla, 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 usar el paquete DBMS_METADATA que "le brinda 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

Crear espacio de tabla

Comandos SQL Plus