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ć?
86
create user foo ...
. Przeczytaj instrukcjęOdpowiedzi:
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:
Otwórz SQL Plus i zaloguj się:
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:
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
źródło
/ as sysdba
początku oznacza "c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba
" uruchamianie z powłoki poleceń Windows.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 aconnect myuser
, otrzymuję błądORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
sqlplus
polecenie? 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=???))
ORA-65096: invalid common user or role name
create user ... default tablespace ...
To działający przykład:
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;
źródło
alter session set "_ORACLE_SCRIPT"=true;
”.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.
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ć.
źródło
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>
źródło
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.
źródło