Взагалі кажучи, схема в oracle - це те саме, що і користувач. База даних Oracle автоматично створює схему під час створення користувача. Файл із розширенням файлу DDL - це файл мови визначення даних SQL.
Створення нового користувача (за допомогою 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;
Створити тимчасову табличну область (таблична область Temporaty - це виділення простору в базі даних, що може містити перехідні дані, які зберігаються лише протягом сеансу. Ці перехідні дані не можуть бути відновлені після відмови процесу або екземпляра.):
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
СУБД_METADATA
Об'єкти схеми
Відмінності між схемою та користувачем
Пільги
Створення користувача / схеми
Створення табличного простору
Команди SQL Plus
create user foo ...
. Будь ласка, прочитайте посібник-