Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да създадете нова схема/нов потребител в Oracle Database 11g?

Най-общо казано, схемата в Oracle е същата като потребител. Oracle Database автоматично създава схема, когато създавате потребител. Файл с файлово разширение DDL е файл на SQL Data Definition Language.

Създаване на нов потребител (с помощта на SQL Plus)

Основни команди на SQL Plus:

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

Отворете SQL Plus и регистрирайте:

/ as sysdba

Sysdba е роля и е като "root" в unix или "администратор" в Windows. То вижда всичко, може всичко. Вътрешно, ако се свържете като sysdba, името на вашата схема ще изглежда като SYS.

Създайте потребител:

SQL> create user johny identified by 1234;

Вижте всички потребители и проверете дали потребителят johny е там:

SQL> select username from dba_users;

Ако се опитате да влезете като johny сега, ще получите грешка:

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

Потребителят, за да влезе, се нуждае поне от привилегия за създаване на сесия, така че трябва да предоставим тези привилегии на потребителя:

SQL> grant create session to johny;

Сега можете да се свържете като потребител johny:

username: johny
password: 1234

За да се отървете от потребителя, можете да го пуснете:

SQL> drop user johny;

Това беше основен пример, който показва как се създава потребител. Може да е по-сложно. По-горе създадохме потребител, чиито обекти се съхраняват в табличното пространство по подразбиране на базата данни. За да поддържаме базата данни подредена, трябва да поставим потребителски обекти в неговото собствено пространство (табличното пространство е разпределение на пространство в базата данни, което може да съдържа обекти на схема).

Показване на вече създадени таблични пространства:

SQL> select tablespace_name from dba_tablespaces;

Създаване на таблично пространство:

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

Създайте временно таблично пространство (Временното таблично пространство е разпределение на пространство в базата данни, което може да съдържа преходни данни, които се запазват само за продължителността на сесия. Тези преходни данни не могат да бъдат възстановени след повреда на процес или екземпляр.):

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

Създайте потребител:

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

Дайте някои привилегии:

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

Влезте като johny и проверете какви привилегии има:

SQL> select * from session_privs;

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

С привилегията за създаване на таблица потребителят може да създава таблици:

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

Въведете данни:

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

Изберете:

SQL> select * from johny_table;

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

За да получите DDL данни, можете да използвате пакета DBMS_METADATA, който "предоставя начин за вас да извлечете метаданни от речника на базата данни като XML или DDL за създаване и да изпратите XML за повторно създаване на обекта.".(с помощ от http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )

За таблица:

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;

Резултат:

  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"

За индекс:

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;

Резултат:

  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"

Повече информация:

DDL

DBMS_METADATA

Обекти на схема

Разлики между схема и потребител

Привилегии

Създаване на потребител/схема

Създаване на таблично пространство

SQL Plus команди



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извличането на Oracle BLOB е много бавно

  2. MAX(DATE) - SQL ORACLE

  3. oci_bind_by_name предотвратява ли безопасно SQL инжектирането?

  4. Автоматично преименуване на таблицата на дяловете в ORACLE

  5. Къде е базата данни за грешки на Oracle?