Genel olarak oracle'daki bir şema, bir kullanıcı ile aynıdır. Oracle Database, bir kullanıcı oluşturduğunuzda otomatik olarak bir şema oluşturur. DDL dosya uzantısına sahip bir dosya, bir SQL Veri Tanımlama Dili dosyasıdır.
Yeni kullanıcı oluşturma (SQL Plus kullanarak)
Temel SQL Plus komutları:
- connect: connects to a database
- disconnect: logs off but does not exit
- exit: exists
SQL Plus'ı açın ve günlüğe kaydedin:
/ as sysdba
Sysdba bir roldür ve unix'te "kök" veya Windows'ta "Yönetici" gibidir. Her şeyi görür, her şeyi yapabilir. Dahili olarak, sysdba olarak bağlanırsanız, şema adınız SYS olarak görünecektir.
Bir kullanıcı oluşturun:
SQL> create user johny identified by 1234;
Tüm kullanıcıları görüntüleyin ve johny kullanıcısının orada olup olmadığını kontrol edin:
SQL> select username from dba_users;
Şimdi johny olarak giriş yapmaya çalışırsanız bir hata alırsınız:
ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied
Oturum açacak kullanıcının en azından oturum ayrıcalığı oluşturması gerekir, bu nedenle kullanıcıya bu ayrıcalıkları vermeliyiz:
SQL> grant create session to johny;
Artık johny kullanıcısı olarak bağlanabilirsiniz:
username: johny
password: 1234
Kullanıcıdan kurtulmak için onu bırakabilirsiniz:
SQL> drop user johny;
Bu, bir kullanıcının nasıl yaratılacağını gösteren temel bir örnekti. Daha karmaşık olabilir. Yukarıda, nesneleri veritabanı varsayılan tablo alanında depolanan bir kullanıcı oluşturduk. Veritabanının düzenli olması için kullanıcı nesnelerini kendi alanına yerleştirmeliyiz (tablo alanı, veritabanında şema nesnelerini içerebilen bir alan tahsisidir).
Önceden oluşturulmuş tablo alanlarını göster:
SQL> select tablespace_name from dba_tablespaces;
Tablo alanı oluşturun:
SQL> create tablespace johny_tabspace
2 datafile 'johny_tabspace.dat'
3 size 10M autoextend on;
Geçici tablo alanı oluşturun (Geçici tablo alanı, veritabanında yalnızca bir oturum süresince devam eden geçici verileri içerebilen bir alan tahsisidir. Bu geçici veriler, işlem veya örnek hatasından sonra kurtarılamaz.):
SQL> create temporary tablespace johny_tabspace_temp
2 tempfile 'johny_tabspace_temp.dat'
3 size 5M autoextend on;
Kullanıcıyı oluşturun:
SQL> create user johny
2 identified by 1234
3 default tablespace johny_tabspace
4 temporary tablespace johny_tabspace_temp;
Bazı ayrıcalıklar verin:
SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;
Johny olarak giriş yapın ve sahip olduğu ayrıcalıkları kontrol edin:
SQL> select * from session_privs;
PRIVILEGE
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
Tablo oluşturma ayrıcalığı ile kullanıcı tablo oluşturabilir:
SQL> create table johny_table
2 (
3 id int not null,
4 text varchar2(1000),
5 primary key (id)
6 );
Veri ekle:
SQL> insert into johny_table (id, text)
2 values (1, 'This is some text.');
Seçin:
SQL> select * from johny_table;
ID TEXT
1 This is some text.
DDL verilerini almak için, "meta verileri veritabanı sözlüğünden XML olarak almanıza veya DDL oluşturmanıza ve nesneyi yeniden oluşturmak için XML göndermenize bir yol sağlayan" DBMS_METADATA paketini kullanabilirsiniz. ( http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm yardımıyla )
Tablo için:
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;
Sonuç:
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"
Dizin için:
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;
Sonuç:
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"
Daha fazla bilgi:
DDL
DBMS_METADATA
Şema nesneleri
Şema ve kullanıcı arasındaki farklar
Ayrıcalıklar
Kullanıcı / şema oluşturma
Tablo alanı oluşturma
SQL Plus komutları
create user foo ...
. Lütfen