You are on page 1of 41

VER TABANI YNETM

Ders 10: Oracle Nesneleri

Yrd. Do. Dr. Altan MESUT


Trakya niversitesi Bilgisayar Mhendislii

Ders erii
Tablo (Table) & Kstlamalar (Constraints) ndeks (Index) Grnt (View) Synonym & Sequence Hareket (Transaction) leme Kullanc, Rol ve Yetki lemleri Tetikleyici (Trigger) Sakl Yordam (Stored Procedure)

Tablo Yaratma
CREATE TABLE scott.emp( empno NUMBER CONSTRAINT pk_emp PRIMARY KEY, ename VARCHAR2(10) CONSTRAINT nn_ename NOT NULL CONSTRAINT upper_ename CHECK (ename = UPPER(ename)), job VARCHAR2(9), mgr NUMBER CONSTRAINT fk_mgr REFERENCES scott.emp(empno), hiredate DATE DEFAULT SYSDATE, sal NUMBER(10,2) CONSTRAINT ck_sal CHECK (sal > 500), comm NUMBER(9,0) DEFAULT NULL, deptno NUMBER(2) CONSTRAINT nn_deptno NOT NULL CONSTRAINT fk_deptno REFERENCES scott.dept(deptno) );

Btnlk Kstlamalar (Integrity Constraints)


Oracleda veri btnln salamak iin 5 farkl btnlk kstlamas tanmlanabilir:
Primary Key, Foreign Key, Unique, Not Null, Check

Kstlamalar tablolar oluturulurken tanmlanabilecei gibi tablolar oluturulduktan sonra da tanmlanabilirler. Ancak tabloya nceden girilmi olan veriler varsa, bu verilerin tanmladmz kstlamaya uymas gerekir.

Tablo ve Stun Kstlamalar


Eer kstlama stun tanmnn yannda verilirse stun kstlamas, tm stunlar tanmlandktan sonra CONSTRAINT ile balayan ifadede verilirse tablo kstlamas olarak adlandrlr. CREATE TABLE supplier_item ( supp_no NUMBER NOT NULL, Column Constraint item_no NUMBER NOT NULL, qty NUMBER NOT NULL DEFAULT 0, Varsaylan Deer CONSTRAINT pk_si PRIMARY KEY (supp_no, item_no) );
Table Constraint: PK iki stun ile olacaksa bu ekilde tanmlanmal

Primary Key Constraint


Birincil anahtar kstlaycs, bir tabloya girilen her bir kaydn belirtilen stun deeri olarak dier kaytlardan ayrmak zere tekil ve farkl bir deer girmeye zorlar. Bir tabloda sadece bir tane Primary Key Constraint tanmlanabilir ve bu stun (veya stunlar) asla NULL deer kabul etmez.

Foreign Key Constraint


Bir tablonun belli stununa girilecek deerleri baka bir tablonun indekslerle tekilletirilmi bir stunundaki deer kmesi ile snrlandrmak iin kullanlr. CREATE TABLE tablo_ismi ( stun tanmlamalar..., CONSTRAINT kstlayc-ismi FOREIGN KEY(stun-ismi) REFERENCES tablo-ismi(stun-ismi) );

Unique Constraint
Baz durumlarda, bir tabloda birincil anahtar alann yan sra baka baz stunlardaki verilerin de tekrarlanmamas istenebilir. Bu trden alanlar iin Unique Constraint tanm yaplr. Unique Constrainti, Primary Key Constraintten ayran en nemli iki zellik,
Unique bir tabloda birden fazla olabilir. Ancak Primary Key tablo bana sadece bir adet alan olabilir. Unique Constraint tanml bir alan NULL deerler kabul edebilir.

Not Null Constraint


Eer bir stun iin her zaman veri girilmesi zorunlu olsun isteniyorsa Bo Olamaz Kstlaycs kullanlr.

Check Constraint
Bir stuna girilebilecek deerleri, belli kyaslara kar kontrol eden kstlayc trdr ve farkl ama iin kullanlabilir:
Bir stuna girilebilecek deerleri belli bir kme ile kstlamak iin Bir stuna girilebilecek deerleri belli bir formata uygunluunu denetlemek iin Bir stuna girilebilecek deerleri, baka stunlar stnden bir kyas ile denetlemek iin

CREATE TABLE tablo-ismi( stun tanmlamalar..., CONSTRAINT constraint-ismi CHECK(ifade) FOR stun-ismi )

ndeks Kullanm
ndeksler verilere hzl eriim amacyla kullanlr. OLAP sistemlerde mmkn olduu kadar ok indeks kullanlr, OLTPde ise fazlas uygulamaya zarar verebilir (zellikle ok sk gncellenen tablolarda). Primary Keyler otomatik olarak indekslenir, Foreign Keyler de genellikle indekslenmesi gereken alanlardr. WHERE koulu ile seilen stunlar, ayn srada indeks yaplmaldr.

Ne zaman indeks kullanmal?


Bir veya daha fazla sayda stun sklkla bir where koulunda yada tablo birletirme ileminde kullanlyorsa indeks kullanmak hz arttracaktr. Eer sorgunun sonucu tablodaki satrlarn %2 yada daha az gibi kk bir blmn dndrecek ise indeks kullanm faydal olacaktr. Stundaki deerlerin ou NULL ise indeks kullanm iyi sonu verir. Stundaki deerler byk lde birbirini tekrar eden deerler ise (cinsiyet stununda sadece iki farkl deer olmas gibi) indeks kullanmann anlam yoktur. Tablo ok sk gncelleniyorsa, indeksin de gncellenmesi gerekecei iin zaman kayb yaratr.

ndeks Yaratma
Aadaki iki indeks ayn anda mevcut olabilir, nk stun sralar farkldr. CREATE INDEX emp_idx1 ON emp (ename, job); CREATE INDEX emp_idx2 ON emp (job, ename);

View (Grnt)
Gerekte olmayan tablolardr. Sadece SELECT ifadesinden ibarettirler. Neden view kullanlr?
1. 2. 3. 4. Veri eriimini snrlamak iin Karmak sorgular kolay hale getirmek iin Veri bamszln salamak iin Ayn verinin farkl grnmlerini sunmak iin

Eer Primary Key Viewda yer alyorsa DML (insert, delete, update) ilemleri o view zerinde uygulanabilir.

View Yaratma
CREATE VIEW emp_view AS SELECT empno, ename, sal, loc FROM emp, dept WHERE emp.deptno = dept.deptno AND dept.deptno = 10; CREATE VIEW dept20 AS SELECT ename, sal*12 annual_salary FROM emp WHERE deptno = 20;

Synonym
Tablo, view, sequence, procedure, function, package veya baka bir synonym iin alternatif bir isimdir. CREATE SYNONYM market FOR scott.market_research; CREATE PUBLIC SYNONYM emp FOR scott.emp;
Public olarak tanmlanrsa, dier kullanclar scott.emp yazmadan sadece emp yazarak ulaabilirler.

Sequence
Otomatik olarak artan saylar retmek iin kullanlr.
CREATE SEQUENCE seq_supplier MINVALUE 1 MAXVALUE 999999999999999999999 START WITH 1 INCREMENT BY 1 CACHE 20; INSERT INTO (seq_supplier.NEXTVAL, )

Transaction Nedir?
Daha kk paralara ayrlamayan en kk ilem ynna Transaction denir. Geerli kabul edilmesi bir dizi ilemin tamamnn yolunda gitmesine bal durumlarda transaction kullanlr. Transaction blou ya hep ya hi mant ile alr. Ya tm ilemler dzgn olarak gerekleir ve geerli kabul edilir veya bir ksm ilemler yolunda gitse bile, blok sona ermeden bir ilem bile yolunda gitmese hibir ilem olmam kabul edilir. Bir transaction COMMIT ilemi ile tamamlanr. Eer ROLLBACK ilemi uygulanrsa tm transaction ilemleri geri alnr.

Transaction Neden Gerekli?


rnein; bir havale ileminde, havale yapann hesap bilgilerinden havale yapt miktar dldkten sonra, elektrik kesintisi, donanmsal veya yazlmsal bir arza nedeniyle alcnn hesabna bu miktar eklenemez ise; gnderenin hesabndan dlen parann iade edilmesi gerekir. Aksi halde bu parann sahibinin kimlii kaybedilmi olur. Bu da sistemin olas haller dnda veri kaybetmeye msait bir durumda olmas demektir. Bu tr aksaklklar transaction kavram sayesinde kontrol altna alnr.

Transaction rnei
UPDATE savings_accounts SET balance = balance 500 WHERE account = 3209; UPDATE checking_accounts SET balance = balance + 500 WHERE account = 3208; INSERT INTO journal VALUES (journal_seq.NEXTVAL, '1B' 3209, 3208, 500); COMMIT;

Kullanc Yaratma
Kullanc yaratma CREATE USER komutu ile yaplr. Bu komutu altrma yetkisi genellikle DBA yada gvenlik yneticisi olan kiilerde vardr.
CREATE USER AHMET IDENTIFIED BY A853B DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT;
Kullancnn Ad
ifresi

Kullancnn Tanmlarn Deitirme


Tm nesne tanmlarnn deitirilmesinde olduu gibi kullanclarn da (kullanclar da bir nesnedir) tanmlarn ALTER komutu ile deitirebiliriz. Aadaki komut AHMET kullancsnn ifresini deitirir:
ALTER USER AHMET IDENTIFIED BY XY358;

Kullancy Silme
Dier nesnelerde olduu gibi kullanc silmede de DROP komutu kullanlr:
DROP USER AHMET;

Eer kullancnn emas altnda nesneler varsa bu nesnelerin de silinmesi iin CASCADE ifadesi kullanlmaldr:
DROP USER AHMET CASCADE;

Eer kullanc sistemde bal durumda ise balantsn kesene kadar silinemez.

Sistem Yetkileri
Kullanclarn sistemde neler yapabileceklerini snrlayan tanmlamalara sistem yetkileri denir. lk slaytta oluturulan kullancnn henz hibir yetkisi yoktur. Sisteme balanabilmesi iin CREATE SESSION yetkisinin kullancya verilmesi gerekir:
GRANT CREATE SESSION TO AHMET;

GRANT komutu ile ayn anda birden ok yetki birden ok kullancya verilebilir:
GRANT CREATE TABLE, UNLIMITED TABLESPACE TO AHMET, MEHMET;

Sistem Yetkileri (devam)


Sistem Yetkileri ok fazladr, hepsinin ezbere bilinmesinin gerei yoktur. sminden yetkinin ne olduu konusunda karm yaplabilir. Eer yetki isminde ANY szc geiyorsa farkl emalar zerinde ilem yapabilme yetkisi olduunu gsterir. CREATE TABLE: Kullancnn sadece kendi emas zerinde tablo oluturma yetkisi. CREATE ANY TABLE: Kullancnn tm emalar zerinde tablo oluturma yetkisi.

Verilen Yetkilerin Geri Alnmas


Kullanclara verilen yetkilerin geri alnmas REVOKE komutu ile gerekletirilir:
REVOKE CREATE TABLE FROM AHMET;

Nesne Yetkileri
Bir kullancnn veri tabanndaki nesneler zerinde ne tr yetkileri olduunu tanmlamak iin kullanlan yapya nesne yetkisi denir. Bir kullanc kendi yaratt tablolar zerinde SELECT yetkisine sahiptir, fakat baka emalardaki tablolar zerinde SELECT sorgusu yapabilmesi iin gerekli yetkinin verilmesi gerekir.
GRANT yetkiler [(stunlar)] Tm kullanclar ON nesneler TO kullanclar [roller] [PUBLIC];

Nesne Yetkisi Verme


MEHMET kendisine ait olan PERSONEL tablosu zerinde SELECT sorgusu yapma yetkisini AHMETe vermek isterse:
GRANT SELECT ON PERSONEL TO AHMET;

AHMET kendisine ait olan OGRENCILER tablosunun sadece ADI ve SOYADI alanlar zerinde UPDATE yapma yetkisini MEHMETe vermek isterse:
GRANT UPDATE (ADI, SOYADI) ON OGRENCILER TO MEHMET;

Rol
Rol, birok yetkinin bir araya getirilmesi ile oluan yetki gruplarna verilen isimdir. Bir rol kendi iinde baka rolleri de ierebilir. rnein Oracle 11gde DBA Rolnn;
16 Rol 202 Sistem Yetkisi 284 Nesne Yetkisi

vardr.
* Oracle Enterprise Manager zerinden grlebilir.

Rol Yaratma
Rol de bir nesne olduu iin CREATE komutu ile yaratlr. Fakat dier nesnelerden farkl olarak, yaratan kullancnn emas altnda bu roller grnmez (rol bir kiiye ait deildir).
CREATE ROLE DENEME; GRANT CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE TO DENEME; GRANT DENEME TO AHMET; GRANT DENEME TO ALTAN WITH ADMIN OPTION;

SYSDBA ve SYSOPER Sistem Yetkileri


SYSDBA: Bu yetki ile veritabanna balanan kullanc tm ilemleri yapabilme iznine sahip olur. Bunlardan bazlar:
STARTUP ve SHUTDOWN ilemlerini gerekletirir. CREATE DATABASE (Veritaban yaratma) ALTER DATABASE: open, mount, back up, karakter seti deitirme CREATE SPFILE (Sistem Parametre Dosyas yaratma) ARCHIVELOG ve RECOVERY

SYSOPER: Bu yetki ile veritabanna balanan kullanc temel iletim grevlerini yapma iznine sahip olur, fakat kullanc verilerini gremez.
STARTUP ve SHUTDOWN ilemlerini gerekletirir. ALTER DATABASE: open, mount, back up CREATE SPFILE (Sistem Parametre Dosyas yaratma) ARCHIVELOG ve RECOVERY

SYS ve SYSTEM Kullanclar


SYS kullancs tm veri tabannn ve veri szlnn sahibidir. Sisteme giri yaparken AS SYSDBA eki ile balanr. Sahip olduu SYS emas zerinde deiiklik yaplmamaldr. SYSTEM kullancs veri szl dnda baka idari iler ile ilgili tablolar ve grnmleri salayan SYSTEM emasnn sahibidir. Sisteme Normal kullanc olarak giri yapar.

SYS emasnn nesnelerine erime yetkisi olan roller


SELECT_CATALOG_ROLE: Kullanclara veri szl grnmleri zerinde sorgu yapma yetkisi verir. EXECUTE_CATALOG_ROLE: Kullanclarn veri szl zerinde paket (package) ve prosedr yrtme yetkisi olmasn salar. DELETE_CATALOG_ROLE: Sistem izleme (audit) tablolar olan SYS.AUD$ ve SYS.FGA_LOG$ tablolarnda silme yetkisi verir.

Trigger (Tetikleyici)
Bir veri tabannda belirli bir tabloda deiiklik olduunda otomatik olarak bir ilemi balatan bir dizi SQL ifadesidir. Bir trigger bir olaydan (insert, delete ya da update ifadelerin belirtilen tabloda olumas) ve bir hareketten (ilgili prosedr) oluur. rnein; personel tablosundan bir kaydn silinmesi olay gerekletiinde, eski_personel tablosuna personelin numarasn ve iten ayrlma tarihini belirtmek iin o anki tarihi kaydeden bir prosedr yazlmas ile bir tetikleyici oluturulabilir.

Trigger Yaratma
CREATE [or REPLACE] TriggerName [ BEFORE | AFTER ] [ DELETE | INSERT | UPDATE [of ColumnName ] ] ON [User.]TableName [ FOR EACH ROW ] [ WHEN Condition ] BEGIN [PL/SQL Block] END ; BEFORE / AFTER: DML ifadesinden nce / sonra tetikle FOR EACH ROW: Etkilenen her satr iin tekrar tetikle WHEN: Tetikleyiciye koul ekler

Trigger rnei

Stored Procedure (Sakl Yordam)


Stored Procedureler veritabannda saklanan ve gerektiinde ismi ile arlabilen PL/SQL bloklardr. Deer dndren prosedrlere fonksiyon (function) denir. nceden derlenmi olduu iin, normal kullandmz bir SQL sorgusunun tekrar tekrar altrlmasna nazaran daha fazla performans elde etmemizi salarlar. Server zerinde tutulduundan, yk istemci tarafna deil de, sunucu tarafna ykleyerek programmzn performansn arttrr. (Elbette ki bu bir seimdir. Sunucunuz glyse bu seimi tercih edebilirsiniz.)

Stored Procedure (Devam )


Bir kez yazlp, tekrar tekrar kullanld iin modler bir yapda program gelitirmi oluruz. Ayn PL/SQL ifadesini birden fazla yerde kullanacamz zaman, bunu bir sakl yordam haline getirerek, kullanmn sadece ismini arma ile gerekletirebiliriz. Belirli girdi ve kt parametreleri olduu iin, sakl yordamlarn kullanm ile gvenlik asndan kendimizi salama alm oluruz. A trafiini azaltr. stemci tarafndan birok satra sahip SQL komutunun sunucuya gitmesindense, sadece sakl yordamn adnn sunucuya gitmesi a daha az megul etmi olur.

Stored Procedure rnei


CREATE PROCEDURE para_yatirma (hes_no IN NUMBER, miktar IN NUMBER) AS BEGIN UPDATE hesaplar SET bakiye = bakiye + miktar WHERE hesap_no = hes_no; END;

Package (Paket)
Birbiriyle ilikili olan prosedrlerin, fonksiyonlarn, deikenlerin ve dier yaplarn bir btn haline getirildii ve veritabannda sakland yapdr. Bir global deikenin tanmlanp paket iindeki herhangi bir prosedrde arlabilmesi gibi ekstra zellikler salar. Ayrca paketler bir btn halinde bir kerede parse edilip, derlenip, bellee yklendii iin performans art da salar. Paketlerde genellikle tanmlama (specification) ve gvde (body) olmak zere iki ksm bulunur.

Package rnei
CREATE PACKAGE emp_actions AS -- package specification PROCEDURE hire_employee (empno NUMBER, ename CHAR, ...); PROCEDURE fire_employee (emp_id NUMBER); END emp_actions;
CREATE PACKAGE BODY emp_actions AS -- package body PROCEDURE hire_employee (empno NUMBER, ename CHAR, ...) IS BEGIN INSERT INTO emp VALUES (empno, ename, ...); END hire_employee; PROCEDURE fire_employee (emp_id NUMBER) IS BEGIN DELETE FROM emp WHERE empno = emp_id; END fire_employee; END emp_actions;

You might also like