Come creare un nuovo schema / nuovo utente in Oracle Database 11g?


86

Ho fatto domanda per uno stage in un'azienda e come domanda mi hanno chiesto di creare uno schema per la loro azienda con determinati requisiti e di spedirgli il file DDL . Ho installato Oracle database 11g Express Edition, ma come posso creare un nuovo schema in Oracle database 11g? Ho cercato in rete una soluzione ma non riuscivo a capire cosa fare. E dopo aver creato uno schema, quale file devo inviarli per posta?


create user foo .... Si prega di leggere il manuale-
a_horse_with_no_name

posso sapere cos'è il cluster di gestione automatica dello storage Oracle?
acoder

4
Questo sito non sostituisce la ricerca e l'apprendimento dalla documentazione del prodotto. La ricerca del collegamento fornito da Ben per quel termine ti dirà cos'è anche ASM. Devi iniziare dall'inizio. Non puoi aspettarti che le persone qui spieghino l'intero Oracle, è un argomento troppo grande; o anche spiegare ogni nuovo termine che incontri. Forse dovresti spiegare all'azienda che non hai alcuna conoscenza Oracle ma che vorresti imparare e vedere se possono fornire formazione per te.
Alex Poole

1
Per i nuovi arrivati ​​in Oracle, il processo è semplificato se si è in grado di utilizzare Oracle Database XE. XE fornisce un'interfaccia utente Web per creare un nuovo utente / schema (noto anche come "Application Express Workspace"). L'ho provato in XE 11.2. Ringraziamo @vitfo per la risposta 11g dettagliata di seguito.
Paul

Risposte:


242

In generale, uno schema in Oracle è lo stesso di un utente. Oracle Database crea automaticamente uno schema quando crei un utente. Un file con estensione DDL è un file SQL Data Definition Language.

Creazione di un nuovo utente (utilizzando SQL Plus)

Comandi SQL Plus di base:

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

Apri SQL Plus e accedi:

/ as sysdba

Il sysdba è un ruolo ed è come "root" su unix o "Administrator" su Windows. Vede tutto, può fare tutto. Internamente, se ti connetti come sysdba, il nome dello schema apparirà come SYS.

Crea un utente:

SQL> create user johny identified by 1234;

Visualizza tutti gli utenti e controlla se l'utente johny è presente:

SQL> select username from dba_users;

Se provi ad accedere come johny ora riceverai un errore:

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

L'utente per accedere deve almeno creare privilegi di sessione, quindi dobbiamo concedere questi privilegi all'utente:

SQL> grant create session to johny;

Ora puoi connetterti come utente johny:

username: johny
password: 1234

Per sbarazzarti dell'utente puoi rilasciarlo:

SQL> drop user johny;

Quello era un esempio di base per mostrare come creare un utente. Potrebbe essere più complesso. Sopra abbiamo creato un utente i cui oggetti sono archiviati nel tablespace predefinito del database. Per avere un database ordinato dovremmo posizionare gli oggetti degli utenti nel suo spazio (il tablespace è un'allocazione di spazio nel database che può contenere oggetti dello schema).

Mostra spazi tabelle già creati:

SQL> select tablespace_name from dba_tablespaces;

Crea spazio tabella:

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

Crea spazio tabella temporaneo (lo spazio tabella temporaneo è un'allocazione di spazio nel database che può contenere dati temporanei che persistono solo per la durata di una sessione. Questi dati temporanei non possono essere ripristinati dopo un errore del processo o dell'istanza.):

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

Crea l'utente:

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

Concedi alcuni privilegi:

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

Accedi come johny e controlla quali privilegi ha:

SQL> select * from session_privs;

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

Con il privilegio di creazione della tabella l'utente può creare tabelle:

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

Inserisci dati:

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

Selezionare:

SQL> select * from johny_table;

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

Per ottenere dati DDL è possibile utilizzare il pacchetto DBMS_METADATA che "fornisce un modo per recuperare i metadati dal dizionario del database come XML o DDL di creazione e per inviare l'XML per ricreare l'oggetto". (con l'aiuto di http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )

Per tavolo:

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;

Risultato:

  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"

Per indice:

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;

Risultato:

  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"

Maggiori informazioni:

DDL

DBMS_METADATA

Oggetti dello schema

Differenze tra schema e utente

Privilegi

Creazione utente / schema

Creazione di tablespace

Comandi SQL Plus


3
L' / as sysdbainizio significa eseguire " c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba" da una shell dei comandi di Windows.
Uwe Keim

3
Utile anche avere: GRANT CREATE VIEW TO <user>; CONCEDI CREA SEQUENZA A <user>;
Witold Kaczurba

Mi sono connesso usando sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=XE)))e poi ho digitato tutti questi tuoi comandi. Ma poi, facendo un connect myuserottengo l'erroreORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
Stephane

Puoi darci il sqlpluscomando completo ? Ad esempio, in base all'utente appena creato sopra, con il comando completosqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Stephane

Ricevo un errore ORA-65096: invalid common user or role namedurante l'esecuzione del create user ... default tablespace ...comando
cryanbhu


15

Cominciamo. Hai qualche conoscenza in Oracle?

Per prima cosa devi capire cos'è uno SCHEMA. Uno schema è una raccolta di strutture logiche di dati o oggetti schema. Uno schema è di proprietà di un utente del database e ha lo stesso nome di quell'utente. Ogni utente possiede un singolo schema. Gli oggetti dello schema possono essere creati e manipolati con SQL.

  1. CREATE USER acoder; - ogni volta che crei un nuovo utente in Oracle, viene creato uno schema con lo stesso nome del nome utente in cui sono memorizzati tutti i suoi oggetti.
  2. CONCESSIONE CREA SESSIONE A acoder; - In caso contrario, non puoi fare nulla.

Per accedere allo schema di un altro utente, è necessario concedere privilegi su un oggetto specifico su quello schema o, facoltativamente, avere assegnato il ruolo SYSDBA.

Questo dovrebbe farti iniziare.


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

Dallo sviluppatore Oracle Sql, esegui quanto segue nel foglio di lavoro sql:

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

quindi fare clic con il pulsante destro del mouse su "connessione Oracle" -> nuova connessione, quindi rendere tutto lctest dal nome della connessione alla password del nome utente. Il collegamento di prova deve essere superato. Quindi dopo la connessione vedrai lo schema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.