Най-общо казано, схемата в 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
- http://www.dba-oracle.com/t_1_dbms_metadata.htm
- http://docs.oracle. com/cd/E11882_01/appdev.112/e25788/d_metada.htm#ARPLS026
- http://docs.oracle. com/cd/B28359_01/server.111/b28310/general010.htm#ADMIN11562
Обекти на схема
Разлики между схема и потребител
- https://dba. stackexchange.com/questions/37012/difference-between-database-vs-user-vs-schema
- Разлика между потребител и схема в Oracle?
Привилегии
Създаване на потребител/схема
- http://docs.oracle.com/ cd/B19306_01/server.102/b14200/statements_8003.htm
- http://www.techonthenet.com/oracle/schemas/create_schema. php
Създаване на таблично пространство
SQL Plus команди