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

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

Вообще говоря, схема в 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; 

Создание временного табличного пространства (временное табличное пространство 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

DBMS_METADATA

Объекты схемы

Различия между схемой и пользователем

привилегии

Создание пользователя / схемы

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

Команды SQL Plus

Давайте начнем. Есть ли у вас какие-либо знания в Oracle?

Сначала вам нужно понять, что такое SCHEMA. Схема – это совокупность логических структур данных или объектов схемы. Схема принадлежит пользователю базы данных и имеет то же имя, что и этот пользователь. Каждому пользователю принадлежит одна схема. Объекты схемы могут быть созданы и обработаны с помощью SQL.

  1. СОЗДАТЬ ПОЛЬЗОВАТЕЛЬ acoder; – всякий раз, когда вы создаете нового пользователя в Oracle, создается схема с тем же именем, что и имя пользователя, где хранятся все его объекты.
  2. ГРАНТ СОЗДАТЬ СЕССИЮ В acoder; – Если вы этого не сделаете, вы ничего не сможете сделать.

Чтобы получить доступ к схеме другого пользователя, вам необходимо предоставить привилегии на конкретном объекте в этой схеме или, возможно, назначить роль SYSDBA.

Это должно заставить вас начать.

Это рабочий пример:

 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; 
 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>