Як створити нову схему / нового користувача в Oracle Database 11g?


86

Я подав заявку на стажування в компанії, і в якості запитання вони задали мені можливість створити схему для їхньої компанії з певними вимогами та надіслати їм файл DDL . Я встановив базу даних Oracle 11g Express, але як створити нову схему в базі даних Oracle 11g? Я шукав рішення в мережі, але не міг зрозуміти, що робити. І після створення схеми, який файл їм надіслати?


create user foo .... Будь ласка, прочитайте посібник-
a_horse_with_no_name

Чи можу я знати, що таке кластер автоматичного керування сховищем Oracle?
шифрувальник

4
Цей веб-сайт не може замінити власні дослідження та вивчення документації до продукту. Пошук за посиланням, яке Бен дав для цього терміна, також скаже вам, що таке ASM. Починати потрібно з самого початку. Ви не можете очікувати, що тут люди пояснять весь Oracle, його занадто велику тему; або навіть пояснити кожен новий термін, з яким ви стикаєтесь. Можливо, вам слід пояснити компанії, що ви не маєте жодних знань Oracle, але хотіли б навчитися і подивитися, чи зможуть вони забезпечити вам навчання.
Alex Poole

1
Для нових початківців Oracle процес спрощується, якщо ви можете використовувати Oracle Database XE. XE надає веб-інтерфейс для створення нового користувача / схеми (вона ж "Application Express Workspace"). Я спробував це в XE 11.2. Кредит @vitfo за повну детальну відповідь 11g нижче.
Пол

Відповіді:


240

Взагалі кажучи, схема в 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


3
На / as sysdbaпочатку означає " c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba" запуск командної оболонки Windows.
Уве Кейм,

3
Також зручно мати: НАДАТИ СТВОРИТИ ПЕРЕГЛЯД <користувачеві>; НАДАТИ СТВОРИТИ ПОСЛІДОВНІСТЬ <користувачу>;
Вітольд Качурба,

Я підключився за допомогою, sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=XE)))а потім набрав усі ці ваші команди. Але тоді, роблячи a, connect myuserя отримую помилкуORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
Stephane

Не могли б ви дати нам повну sqlplusкоманду? Мовляв, на основі лише що створеного вище користувача, який має повну командуsqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Стефан

Я отримую помилку ORA-65096: invalid common user or role nameпід час запуску create user ... default tablespace ...команди
cryanbhu

16

Це робочий приклад:

CREATE USER auto_exchange IDENTIFIED BY 123456;
GRANT RESOURCE TO auto_exchange;
GRANT CONNECT TO auto_exchange;
GRANT CREATE VIEW TO auto_exchange;
GRANT CREATE SESSION TO auto_exchange;
GRANT UNLIMITED TABLESPACE TO auto_exchange;


15

Давайте почнемо. Чи маєте Ви якісь знання в Oracle?

Спочатку потрібно зрозуміти, що таке СХЕМА. Схема - це сукупність логічних структур даних або об’єктів схеми. Схема належить користувачеві бази даних і має те саме ім’я, що і цей користувач. Кожен користувач володіє єдиною схемою. Об'єкти схеми можна створювати та маніпулювати ними за допомогою SQL.

  1. СТВОРИТИ кодера користувача; - кожного разу, коли ви створюєте нового користувача в Oracle, створюється схема з тим самим іменем, що і ім'я користувача, де зберігаються всі його об'єкти.
  2. НАДАННЯ СТВОРЕННЯ СЕСІЇ кодеру; - Якщо цього не зробити, ви нічого не зможете зробити.

Щоб отримати доступ до схеми іншого користувача, вам повинні бути надані привілеї на конкретний об'єкт цієї схеми або необов'язково призначена роль SYSDBA.

Це повинно почати.


4
SQL> select Username from dba_users
  2  ;

USERNAME
------------------------------
SYS
SYSTEM
ANONYMOUS
APEX_PUBLIC_USER
FLOWS_FILES
APEX_040000
OUTLN
DIP
ORACLE_OCM
XS$NULL
MDSYS

USERNAME
------------------------------
CTXSYS
DBSNMP
XDB
APPQOSSYS
HR

16 rows selected.

SQL> create user testdb identified by password;

User created.

SQL> select username from dba_users;

USERNAME
------------------------------
TESTDB
SYS
SYSTEM
ANONYMOUS
APEX_PUBLIC_USER
FLOWS_FILES
APEX_040000
OUTLN
DIP
ORACLE_OCM
XS$NULL

USERNAME
------------------------------
MDSYS
CTXSYS
DBSNMP
XDB
APPQOSSYS
HR

17 rows selected.

SQL> grant create session to testdb;

Grant succeeded.

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

Tablespace created.

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

Tablespace created.

SQL> drop user testdb;

User dropped.

SQL> create user testdb
  2  identified by password
  3  default tablespace testdb_tablespace
  4  temporary tablespace testdb_tablespace_temp;

User created.

SQL> grant create session to testdb;

Grant succeeded.

SQL> grant create table to testdb;

Grant succeeded.

SQL> grant unlimited tablespace to testdb;

Grant succeeded.

SQL>

0

Від розробника oracle Sql виконайте наступне на таблиці sql:

create user lctest identified by lctest;
grant dba to lctest;

потім клацніть правою кнопкою миші на "Підключення Oracle" -> нове з'єднання, а потім зробіть все lctest від імені підключення до пароля імені користувача. Тестове підключення має пройти. Тоді після підключення ви побачите схему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.