sql >> Databasteknik >  >> RDS >> Oracle

Hur skapar man ett nytt schema/ny användare i Oracle Database 11g?

Generellt sett är ett schema i Oracle detsamma som en användare. Oracle Database skapar automatiskt ett schema när du skapar en användare. En fil med filtillägget DDL är en SQL Data Definition Language-fil.

Skapa ny användare (med SQL Plus)

Grundläggande SQL Plus-kommandon:

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

Öppna SQL Plus och logga:

/ as sysdba

Sysdba är en roll och är som "root" på unix eller "Administratör" på Windows. Den ser allt, kan göra allt. Internt, om du ansluter som sysdba, kommer ditt schemanamn att se ut som SYS.

Skapa en användare:

SQL> create user johny identified by 1234;

Se alla användare och kontrollera om användaren johny är där:

SQL> select username from dba_users;

Om du försöker logga in som johny nu får du ett felmeddelande:

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

Användaren för att logga in behöver åtminstone skapa sessionsprivilegier så vi måste ge denna behörighet till användaren:

SQL> grant create session to johny;

Nu kan du ansluta som användaren johny:

username: johny
password: 1234

För att bli av med användaren kan du släppa den:

SQL> drop user johny;

Det var ett grundläggande exempel för att visa hur man skapar en användare. Det kan vara mer komplicerat. Ovan skapade vi en användare vars objekt är lagrade i databasens standardtabellutrymme. För att ha ordning på databasen bör vi placera användarobjekt till hans eget utrymme (tabellutrymme är en allokering av utrymme i databasen som kan innehålla schemaobjekt).

Visa redan skapade tabellutrymmen:

SQL> select tablespace_name from dba_tablespaces;

Skapa tabellutrymme:

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

Skapa temporärt tabellutrymme (Tillfälligt tabellutrymme är en tilldelning av utrymme i databasen som kan innehålla övergående data som bara kvarstår under en session. Dessa övergående data kan inte återställas efter process- eller instansfel.):

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

Skapa användaren:

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

Ge några privilegier:

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

Logga in som johny och kolla vilka privilegier han har:

SQL> select * from session_privs;

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

Med skapa tabell-privilegiet kan användaren skapa tabeller:

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

Infoga data:

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

Välj:

SQL> select * from johny_table;

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

För att få DDL-data kan du använda DBMS_METADATA-paketet som "ger ett sätt för dig att hämta metadata från databasordlistan som XML eller skapande DDL och att skicka XML för att återskapa objektet.".(med hjälp från http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )

För 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"

För index:

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"

Mer information:

DDL

DBMS_METADATA

Schemaobjekt

Skillnader mellan schema och användare

Privilegier

Skapar användare/schema

Skapar tabellutrymme

SQL Plus-kommandon



  1. Exekvera SQL direkt; ingen markör., SQL-tillstånd 01000 i SQLExecDirect

  2. Lagra tidsintervall i PostgreSQL från Rails

  3. Hur infogar man en bild i rummets beständighetsbibliotek?

  4. Hur matchar jag en hel dag med ett datum och tid?