Jak utworzyć nowy schemat / nowego użytkownika w Oracle Database 11g?


86

Złożyłem podanie o staż w firmie i jako pytanie zadali mi stworzenie schematu dla ich firmy z określonymi wymaganiami i przesłanie im pliku DDL . Mam zainstalowaną wersję Oracle Database 11g Express, ale jak mogę utworzyć nowy schemat w Oracle Database 11g? Szukałem w sieci rozwiązania, ale nie mogłem zrozumieć, co mam zrobić. A po utworzeniu schematu, który plik mam wysłać?


create user foo .... Przeczytaj instrukcję
a_horse_with_no_name

czy mogę wiedzieć, co to jest klaster automatycznego zarządzania pamięcią masową Oracle?
acoder

4
Ta witryna nie zastępuje samodzielnych badań i uczenia się na podstawie dokumentacji produktu. Wyszukiwanie linku, który Ben podał dla tego terminu, powie ci również, czym jest ASM. Musisz zacząć od początku. Nie możesz oczekiwać, że ludzie tutaj wyjaśnią całą Oracle, to zbyt duży temat; lub nawet wyjaśnij każdy nowy termin, na który się natkniesz. Może powinieneś wyjaśnić firmie, że nie masz żadnej wiedzy na temat Oracle, ale chciałbyś się dowiedzieć i zobaczyć, czy mogą zapewnić Ci szkolenie.
Alex Poole

1
W przypadku zupełnie nowych użytkowników Oracle proces jest uproszczony, jeśli można używać Oracle Database XE. XE zapewnia interfejs WWW do tworzenia nowego użytkownika / schematu (aka „Application Express Workspace”). Próbowałem tego w XE 11.2. Podziękowania dla @vitfo za pełną pełną odpowiedź 11g poniżej.
Paul

Odpowiedzi:


240

Ogólnie mówiąc, schemat w oracle jest taki sam jak w przypadku użytkownika. Oracle Database automatycznie tworzy schemat podczas tworzenia użytkownika. Plik z rozszerzeniem DDL jest plikiem języka definicji danych SQL.

Tworzenie nowego użytkownika (przy użyciu SQL Plus)

Podstawowe polecenia SQL Plus:

  - connect: connects to a database
  - disconnect: logs off but does not exit
  - exit: exists

Otwórz SQL Plus i zaloguj się:

/ as sysdba

Sysdba jest rolą i działa jak „root” w systemie UNIX lub „Administrator” w systemie Windows. Widzi wszystko, może wszystko. Wewnętrznie, jeśli połączysz się jako sysdba, nazwa twojego schematu będzie wyglądać na SYS.

Utwórz użytkownika:

SQL> create user johny identified by 1234;

Wyświetl wszystkich użytkowników i sprawdź, czy jest tam użytkownik johny:

SQL> select username from dba_users;

Jeśli teraz spróbujesz zalogować się jako johny, pojawi się błąd:

ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied

Użytkownik, który chce się zalogować, musi przynajmniej utworzyć przywilej sesji, więc musimy nadać mu te uprawnienia:

SQL> grant create session to johny;

Teraz możesz połączyć się jako użytkownik johny:

username: johny
password: 1234

Aby pozbyć się użytkownika, możesz go upuścić:

SQL> drop user johny;

To był podstawowy przykład pokazujący, jak stworzyć użytkownika. To może być bardziej złożone. Powyżej stworzyliśmy użytkownika, którego obiekty są przechowywane w domyślnym obszarze tabel bazy danych. Aby zachować porządek w bazie danych, powinniśmy umieszczać obiekty użytkowników w jego własnej przestrzeni (przestrzeń tabel to przydział miejsca w bazie danych, który może zawierać obiekty schematu).

Pokaż już utworzone przestrzenie tabel:

SQL> select tablespace_name from dba_tablespaces;

Utwórz przestrzeń tabel:

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

Utwórz tymczasowy obszar tabel (tymczasowy obszar tabel to przydział miejsca w bazie danych, który może zawierać dane przejściowe, które są przechowywane tylko przez czas trwania sesji. Tych danych przejściowych nie można odzyskać po awarii procesu lub wystąpienia):

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

Utwórz użytkownika:

SQL> create user johny
  2  identified by 1234
  3  default tablespace johny_tabspace
  4  temporary tablespace johny_tabspace_temp;

Przyznaj przywileje:

SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;

Zaloguj się jako johny i ​​sprawdź jakie ma uprawnienia:

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

Z uprawnieniem tworzenia tabeli użytkownik może tworzyć tabele:

SQL> create table johny_table
  2  (
  3     id int not null,
  4     text varchar2(1000),
  5     primary key (id)
  6  );

Wstaw dane:

SQL> insert into johny_table (id, text)
  2  values (1, 'This is some text.');

Wybierz:

SQL> select * from johny_table;

ID  TEXT
--------------------------
1   This is some text.

Aby uzyskać dane DDL, możesz użyć pakietu DBMS_METADATA, który „zapewnia sposób pobierania metadanych ze słownika bazy danych jako XML lub tworzenia DDL i przesyłania XML w celu ponownego utworzenia obiektu.”. (z pomocą http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )

Do stołu:

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;

Wynik:

  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"

Dla indeksu:

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;

Wynik:

  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"

Więcej informacji:

DDL

DBMS_METADATA

Obiekty schematu

Różnice między schematem a użytkownikiem

Przywileje

Tworzenie użytkownika / schematu

Tworzenie przestrzeni tabel

Polecenia SQL Plus


3
Na / as sysdbapoczątku oznacza " c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba" uruchamianie z powłoki poleceń Windows.
Uwe Keim

3
Przydatne także: GRANT CREATE VIEW TO <user>; GRANT CREATE SEQUENCE TO <user>;
Witold Kaczurba

Połączyłem się za pomocą, sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=XE)))a następnie wpisałem wszystkie twoje polecenia. Ale wtedy, robiąc a connect myuser, otrzymuję błądORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
Stephane

Czy mógłbyś wydać nam pełne sqlpluspolecenie? Na przykład, w oparciu o użytkownika właśnie utworzonego powyżej, mającego pełne poleceniesqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Stephane

ORA-65096: invalid common user or role namecreate user ... default tablespace ...
Występuje


15

Zacznijmy. Czy masz jakąś wiedzę na temat Oracle?

Najpierw musisz zrozumieć, czym jest SCHEMAT. Schemat to zbiór logicznych struktur danych lub obiektów schematu. Schemat jest własnością użytkownika bazy danych i ma taką samą nazwę jak ten użytkownik. Każdy użytkownik jest właścicielem jednego schematu. Obiekty schematu można tworzyć i manipulować nimi za pomocą języka SQL.

  1. CREATE USER acoder; - za każdym razem, gdy tworzysz nowego użytkownika w Oracle, tworzony jest schemat o takiej samej nazwie jak nazwa użytkownika, w którym przechowywane są wszystkie jego obiekty.
  2. GRANT CREATE SESSION TO acoder; - Jeśli tego nie zrobisz, nic nie możesz zrobić.

Aby uzyskać dostęp do schematu innego użytkownika, musisz mieć nadane uprawnienia do określonego obiektu w tym schemacie lub opcjonalnie mieć przypisaną rolę SYSDBA.

To powinno ci na początek wystarczyć.


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

Od dewelopera Oracle Sql wykonaj poniższe czynności w arkuszu SQL:

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

następnie kliknij prawym przyciskiem myszy „Połączenie Oracle” -> nowe połączenie, a następnie zrób wszystko lctest, od nazwy połączenia do nazwy użytkownika i hasła. Połączenie testowe powinno przejść. Następnie po podłączeniu zobaczysz schemat.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.