Я подал заявку на стажировку в компании, и в качестве вопроса они попросили меня создать схему для их компании с определенными требованиями и отправить им файл DDL . Я установил базу данных Oracle 11g Express edition, но как мне создать новую схему в базе данных Oracle 11g? Я искал в сети решение, но не мог понять, что делать. И после создания схемы, какой файл мне отправить по почте?
86
create user foo ...
. Пожалуйста, прочтите руководство-Ответы:
Вообще говоря, схема в Oracle такая же, как и у пользователя. Oracle Database автоматически создает схему при создании пользователя. Файл с расширением файла DDL - это файл языка определения данных SQL.
Создание нового пользователя (с помощью SQL Plus)
Основные команды SQL Plus:
Откройте SQL Plus и войдите:
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:
Чтобы избавиться от пользователя, его можно отбросить:
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
источник
/ as sysdba
начале означает "c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba
" запускать из командной оболочки Windows.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 ...
командыЭто рабочий пример:
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;
источник
alter session set "_ORACLE_SCRIPT"=true;
».Приступим. У вас есть какие-нибудь знания в Oracle?
Для начала нужно понять, что такое СХЕМА. Схема - это набор логических структур данных или объектов схемы. Схема принадлежит пользователю базы данных и имеет то же имя, что и этот пользователь. Каждому пользователю принадлежит одна схема. Объекты схемы можно создавать и управлять ими с помощью SQL.
Чтобы получить доступ к схеме другого пользователя, вам должны быть предоставлены права на определенный объект в этой схеме или, при необходимости, назначена роль SYSDBA.
Это должно вас начать.
источник
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>
источник
От разработчика oracle Sql выполните приведенное ниже на листе sql:
create user lctest identified by lctest; grant dba to lctest;
затем щелкните правой кнопкой мыши "Oracle connection" -> новое соединение, затем выполните lctest от имени подключения до пароля имени пользователя. Тестовое соединение должно пройти. Затем после подключения вы увидите схему.
источник