Я подал заявку на стажировку в компании, и в качестве вопроса меня попросили создать схему для их компании с определенными требованиями и отправить им файл DDL. Я установил базу данных Oracle 11g Express Edition, но как мне создать новую схему в базе данных Oracle 11g? Я искал в сети решение, но не мог понять, что делать. И после создания схемы, какой файл я должен отправить им по почте?
Как создать новую схему/нового пользователя в Oracle Database 11g?
Ответ 1
Вообще говоря, схема в оракуле такая же, как у пользователя. 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
- 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
Ответ 2
Это рабочий пример:
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;
Ответ 3
Пусть вы начнете. Есть ли у вас какие-либо знания в Oracle?
Сначала вам нужно понять, что такое SCHEMA. Схема - это совокупность логических структур данных или объектов схемы. Схема принадлежит пользователю базы данных и имеет то же имя, что и этот пользователь. Каждому пользователю принадлежит одна схема. Объекты схемы могут быть созданы и обработаны с помощью SQL.
- CREATE USER acoder; - всякий раз, когда вы создаете нового пользователя в Oracle, создается схема с тем же именем, что и имя пользователя, где хранятся все его объекты.
- ГРАНТ СОЗДАЕТ СЕССИЮ В 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>
Ответ 5
От разработчика oracle Sql выполните приведенную ниже таблицу SQL:
create user lctest identified by lctest;
grant dba to lctest;
затем щелкните правой кнопкой мыши "Oracle connection" → new connection, затем сделайте все lctest от имени соединения до пароля имени пользователя. Тестовое соединение должно пройти. После подключения вы увидите схему.