sql >> Database teknologi >  >> RDS >> Oracle

Hvordan opretter man et nyt skema/ny bruger i Oracle Database 11g?

Generelt set er et skema i oracle det samme som en bruger. Oracle Database opretter automatisk et skema, når du opretter en bruger. En fil med filtypenavnet DDL er en SQL Data Definition Language-fil.

Oprettelse af ny bruger (ved hjælp af SQL Plus)

Grundlæggende SQL Plus-kommandoer:

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

Åbn SQL Plus og log:

/ as sysdba

Sysdba er en rolle og er ligesom "root" på unix eller "administrator" på Windows. Den ser alt, kan alt. Internt, hvis du forbinder som sysdba, vil dit skemanavn se ud til at være SYS.

Opret en bruger:

SQL> create user johny identified by 1234;

Se alle brugere og tjek om brugeren johny er der:

SQL> select username from dba_users;

Hvis du prøver at logge ind som johny nu, får du en fejlmeddelelse:

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

Brugeren til at logge ind skal i det mindste oprette sessionsprivilegier, så vi er nødt til at give brugeren disse privilegier:

SQL> grant create session to johny;

Nu er du i stand til at oprette forbindelse som brugeren johny:

username: johny
password: 1234

For at slippe af med brugeren kan du droppe den:

SQL> drop user johny;

Det var et grundlæggende eksempel for at vise, hvordan man opretter en bruger. Det kan være mere komplekst. Ovenfor har vi oprettet en bruger, hvis objekter er gemt i databasens standard tablespace. For at få ryddet op i databasen bør vi placere brugerobjekter til hans eget rum (tablespace er en tildeling af plads i databasen, der kan indeholde skemaobjekter).

Vis allerede oprettede tablespaces:

SQL> select tablespace_name from dba_tablespaces;

Opret tablespace:

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

Opret midlertidigt tablespace (Temporaty tablespace er en tildeling af plads i databasen, der kan indeholde forbigående data, der kun eksisterer i varigheden af ​​en session. Disse forbigående data kan ikke gendannes efter proces- eller instansfejl.):

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

Opret brugeren:

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

Giv nogle privilegier:

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

Log ind som johny og tjek hvilke privilegier han har:

SQL> select * from session_privs;

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

Med oprettelse af tabelrettigheder kan brugeren oprette tabeller:

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

Indsæt data:

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

Vælg:

SQL> select * from johny_table;

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

For at få DDL-data kan du bruge DBMS_METADATA-pakken, der "giver en måde for dig at hente metadata fra databaseordbogen som XML eller oprettelses-DDL og til at indsende XML for at genskabe objektet.".(med hjælp fra http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )

Til bord:

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;

Resultat:

  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"

Til indeks:

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;

Resultat:

  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"

Flere oplysninger:

DDL

DBMS_METADATA

Skemaobjekter

Forskelle mellem skema og bruger

Privilegier

Opretter bruger/skema

Oprettelse af tablespace

SQL Plus-kommandoer



  1. Hvordan afinstallerer jeg Oracle manuelt?

  2. Den brugte tabeltype understøtter ikke SPATIAL-indekser

  3. Svarer til unpivot() i PostgreSQL

  4. Hvad sker der, hvis man ændrer en lagret procedure, mens den kører?