Как создать новую схему / нового пользователя в Oracle Database 11g?


86

Я подал заявку на стажировку в компании, и в качестве вопроса они попросили меня создать схему для их компании с определенными требованиями и отправить им файл DDL . Я установил базу данных Oracle 11g Express edition, но как мне создать новую схему в базе данных Oracle 11g? Я искал в сети решение, но не мог понять, что делать. И после создания схемы, какой файл мне отправить по почте?


create user foo .... Пожалуйста, прочтите руководство-
a_horse_with_no_name

Могу ли я узнать, что такое кластер автоматического управления хранилищем Oracle?
acoder

4
Этот сайт не заменяет ваши собственные исследования и изучение документации по продукту. Поиск по ссылке, которую Бен дал для этого термина, также расскажет вам, что такое ASM. Вам нужно начать с самого начала. Вы не можете ожидать, что люди здесь объяснят весь Oracle, это слишком большая тема; или даже объяснять каждый новый термин, с которым вы сталкиваетесь. Возможно, вам следует объяснить компании, что у вас нет знаний об Oracle, но вы хотели бы учиться и посмотреть, смогут ли они провести для вас обучение.
Alex Poole

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

Ответы:


240

Вообще говоря, схема в Oracle такая же, как и у пользователя. Oracle Database автоматически создает схему при создании пользователя. Файл с расширением файла 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 или «Administrator» в 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


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

3
Также удобно иметь: GRANT CREATE VIEW TO <user>; GRANT CREATE SEQUENCE TO <user>;
Витольд Качурба 08

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

Не могли бы вы дать нам полную 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. ПРЕДОСТАВИТЬ СОЗДАТЬ СЕССИЮ НА acoder; - Без этого вы ничего не сможете сделать.

Чтобы получить доступ к схеме другого пользователя, вам должны быть предоставлены права на определенный объект в этой схеме или, при необходимости, назначена роль 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 connection" -> новое соединение, затем выполните lctest от имени подключения до пароля имени пользователя. Тестовое соединение должно пройти. Затем после подключения вы увидите схему.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.