Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

VERİ TABANI YÖNETİMİ Ders 10: Oracle Nesneleri

Benzer bir sunumlar


... konulu sunumlar: "VERİ TABANI YÖNETİMİ Ders 10: Oracle Nesneleri"— Sunum transkripti:

1 VERİ TABANI YÖNETİMİ Ders 10: Oracle Nesneleri
Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

2 Ders İçeriği Tablo (Table) & Kısıtlamalar (Constraints) İndeks (Index)
Görüntü (View) Synonym & Sequence Hareket (Transaction) İşleme Kullanıcı, Rol ve Yetki İşlemleri Tetikleyici (Trigger) Saklı Yordam (Stored Procedure)

3 Önemli Not SQL dilinde kullanılan SELECT komutu ve DML komutları (INSERT, DELETE, UPDATE) genellikle tüm VTYS’lerde aynı şekilde kullanılır. DDL (CREATE, DROP, ALTER) ve DCL (GRANT, REVOKE) komutlarında ise bazı farklılıklar vardır. Örneğin SQL Server’da önce bir LOGIN nesnesi yaratılır, daha sonra yaratılan bir kullanıcı (USER) bu LOGIN nesnesi ile ilişkilendirilir. Dolayısı ile SQL Server’daki “CREATE USER” komutunun yazımı ile ORACLE’daki yazım farklıdır. Bu ders sunusundaki tüm DDL ve DCL komutları ORACLE’a göre verilmiştir.

4 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) );

5 Bütünlük Kısıtlamaları (Integrity Constraints)
Oracle’da veri bütünlüğünü sağlamak için 5 farklı bütünlük kısıtlaması tanımlanabilir: Primary Key, Foreign Key, Unique, Not Null, Check Kısıtlamalar tablolar oluşturulurken tanımlanabileceği gibi tablolar oluşturulduktan sonra da tanımlanabilirler. Ancak tabloya önceden girilmiş olan veriler varsa, bu verilerin tanımladığımız kısıtlamaya uyması gerekir.

6 Tablo ve Sütun Kısıtlamaları
Eğer kısıtlama sütun tanımının yanında verilirse sütun kısıtlaması, tüm sütunlar tanımlandıktan sonra CONSTRAINT ile başlayan ifadede verilirse tablo kısıtlaması olarak adlandırılır. CREATE TABLE supplier_item ( supp_no NUMBER NOT NULL, item_no NUMBER NOT NULL, qty NUMBER NOT NULL DEFAULT 0, CONSTRAINT pk_si PRIMARY KEY (supp_no, item_no) ); Column Constraint Varsayılan Değer Table Constraint: PK iki sütun ile olacaksa bu şekilde tanımlanmalı

7 Primary Key Constraint
Birincil anahtar kısıtlayıcısı, bir tabloya girilen her bir kaydın belirtilen sütun değeri olarak diğer kayıtlardan ayırmak üzere tekil ve farklı bir değer girmeye zorlar. Bir tabloda sadece bir tane Primary Key Constraint tanımlanabilir ve bu sütun (veya sütunlar) asla NULL değer kabul etmez.

8 Foreign Key Constraint
Bir tablonun belli sütununa girilecek değerleri başka bir tablonun indekslerle tekilleştirilmiş bir sütunundaki değer kümesi ile sınırlandırmak için kullanılır. CREATE TABLE tablo_ismi ( sütun tanımlamaları..., CONSTRAINT kısıtlayıcı-ismi FOREIGN KEY(sütun-ismi) REFERENCES tablo-ismi(sütun-ismi) );

9 Unique Constraint Bazı durumlarda, bir tabloda birincil anahtar alanın yanı sıra başka bazı sütunlardaki verilerin de tekrarlanmaması istenebilir. Bu türden alanlar için Unique Constraint tanımı yapılır. Unique Constraint’i, Primary Key Constraint’ten ayıran en önemli iki özellik, Unique bir tabloda birden fazla olabilir. Ancak Primary Key tablo başına sadece bir adet alan olabilir. Unique Constraint tanımlı bir alan NULL değerler kabul edebilir.

10 Not Null Constraint Eğer bir sütun için her zaman veri girilmesi zorunlu olsun isteniyorsa “Boş Olamaz Kısıtlayıcısı” kullanılır.

11 Check Constraint Bir sütuna girilebilecek değerleri, belli kıyaslara karşı kontrol eden kısıtlayıcı türüdür ve üç farklı amaç için kullanılabilir: Bir sütuna girilebilecek değerleri belli bir küme ile kısıtlamak için Bir sütuna girilebilecek değerleri belli bir formata uygunluğunu denetlemek için Bir sütuna girilebilecek değerleri, başka sütunlar üstünden bir kıyas ile denetlemek için CREATE TABLE tablo-ismi( sütun tanımlamaları..., CONSTRAINT constraint-ismi CHECK(ifade) FOR sütun-ismi )

12 İndeks Kullanımı İndeksler verilere hızlı erişim amacıyla kullanılır.
OLAP sistemlerde mümkün olduğu kadar çok indeks kullanılır, OLTP’de ise fazlası uygulamaya zarar verebilir (özellikle çok sık güncellenen tablolarda). Primary Key’ler otomatik olarak indekslenir, Foreign Key’ler de genellikle indekslenmesi gereken alanlardır. WHERE koşulu ile seçilen sütunlar, aynı sırada indeks yapılmalıdır.

13 Ne zaman indeks kullanmalı?
Bir veya daha fazla sayıda sütun sıklıkla bir where koşulunda yada tablo birleştirme işleminde kullanılıyorsa indeks kullanmak hızı arttıracaktır. Eğer sorgunun sonucu tablodaki satırların %2 yada daha azı gibi küçük bir bölümünü döndürecek ise indeks kullanımı faydalı olacaktır. Sütundaki değerlerin çoğu NULL ise indeks kullanımı iyi sonuç verir. Sütundaki değerler büyük ölçüde birbirini tekrar eden değerler ise (cinsiyet sütununda sadece iki farklı değer olması gibi) indeks kullanmanın anlamı yoktur. Tablo çok sık güncelleniyorsa, indeksin de güncellenmesi gerekeceği için zaman kaybı yaratır.

14 İndeks Yaratma Aşağıdaki iki indeks aynı anda mevcut olabilir, çünkü sütun sıraları farklıdır. CREATE INDEX emp_idx1 ON emp (ename, job); CREATE INDEX emp_idx2 ON emp (job, ename);

15 View (Görüntü) Gerçekte olmayan tablolardır. Sadece SELECT ifadesinden ibarettirler. Neden view kullanılır? Veri erişimini sınırlamak için Karmaşık sorguları kolay hale getirmek için Veri bağımsızlığını sağlamak için Aynı verinin farklı görünümlerini sunmak için Eğer Primary Key View’da yer alıyorsa DML (insert, delete, update) işlemleri o view üzerinde uygulanabilir.

16 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;

17 Synonym Tablo, view, sequence, procedure, function, package veya başka bir synonym için alternatif bir isimdir. CREATE SYNONYM market FOR scott.market_research; CREATE PUBLIC SYNONYM emp FOR scott.emp; Public olarak tanımlanırsa, diğer kullanıcılar scott.emp yazmadan sadece emp yazarak ulaşabilirler.

18 Sequence Otomatik olarak artan sayılar üretmek için kullanılır.
CREATE SEQUENCE seq_supplier     MINVALUE 1     MAXVALUE     START WITH 1     INCREMENT BY 1     CACHE 20; INSERT INTO (seq_supplier.NEXTVAL, …)

19 Transaction Nedir? Daha küçük parçalara ayrılamayan en küçük işlem yığınına Transaction denir. Geçerli kabul edilmesi bir dizi işlemin tamamının yolunda gitmesine bağlı durumlarda transaction kullanılır. Transaction bloğu ya hep ya hiç mantığı ile çalışır. Ya tüm işlemler düzgün olarak gerçekleşir ve geçerli kabul edilir veya bir kısım işlemler yolunda gitse bile, blok sona ermeden bir işlem bile yolunda gitmese hiçbir işlem olmamış kabul edilir. Bir transaction COMMIT işlemi ile tamamlanır. Eğer ROLLBACK işlemi uygulanırsa tüm transaction işlemleri geri alınır.

20 Transaction Neden Gerekli?
Örneğin; bir havale işleminde, havale yapanın hesap bilgilerinden havale yaptığı miktar düşüldükten sonra, elektrik kesintisi, donanımsal veya yazılımsal bir arıza nedeniyle alıcının hesabına bu miktar eklenemez ise; gönderenin hesabından düşülen paranın iade edilmesi gerekir. Aksi halde bu paranın sahibinin kimliği kaybedilmiş olur. Bu da sistemin olası haller dışında veri kaybetmeye müsait bir durumda olması demektir. Bu tür aksaklıklar transaction kavramı sayesinde kontrol altına alınır.

21 Transaction Örneği UPDATE savings_accounts SET balance = balance – 500 WHERE account = 3209; UPDATE checking_accounts SET balance = balance WHERE account = 3208; INSERT INTO journal VALUES (journal_seq.NEXTVAL, '1B’, 3209, 3208, 500); COMMIT;

22 Kullanıcı Yaratma Kullanıcı yaratma CREATE USER komutu ile yapılır. Bu komutu çalıştırma yetkisi genellikle DBA yada güvenlik yöneticisi olan kişilerde vardır. CREATE USER AHMET IDENTIFIED BY A853B DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT; Kullanıcının Adı Şifresi Kullanıcı yaratma kodundaki ilk iki satırın yazılması yeterlidir. Diğer 3 satır yazılmasa bile varsayılan tablo alanı, geçici tablo alanı ve profil değerleri için zaten verilen değerler (USERS, TEMP, DEFAULT) varsayılan değerler olarak atanacaktır. Eğer kullanıcının ilk login olduğu anda şifresini belirlemesi isteniyorsa: PASSWORD EXPIRE Eğer kullanıcının hesabının kilitlenmesi isteniyorsa: ACCOUNT LOCK ifadeleri eklenebilir. Eğer IDENTIFIED EXTERNALLY yazılırsa kullanıcı şifre denetimi işletim sistemi üzerinden yapılacak demektir (SQL Server'daki Windows Authentication gibi).

23 Kullanıcının Tanımlarını Değiştirme
Tüm nesne tanımlarının değiştirilmesinde olduğu gibi kullanıcıların da (kullanıcılar da bir nesnedir) tanımlarını ALTER komutu ile değiştirebiliriz. Aşağıdaki komut AHMET kullanıcısının şifresini değiştirir: ALTER USER AHMET IDENTIFIED BY XY358; ALTER USER yetkisinin kullanıcılara verilmesine gerek yoktur. Sisteme login olabilen (CREATE SESSION yetkisi olan) kullanıcıların şifrelerini değiştirme hakkı vardır.

24 Kullanıcıyı Silme Diğer nesnelerde olduğu gibi kullanıcı silmede de DROP komutu kullanılır: DROP USER AHMET; Eğer kullanıcının şeması altında nesneler varsa bu nesnelerin de silinmesi için CASCADE ifadesi kullanılmalıdır: DROP USER AHMET CASCADE; Eğer kullanıcı sistemde bağlı durumda ise bağlantısını kesene kadar silinemez.

25 Sistem Yetkileri Kullanıcıların sistemde neler yapabileceklerini sınırlayan tanımlamalara sistem yetkileri denir. Bir kullanıcı ilk yaratıldığı anda hiçbir yetkisi yoktur. Sisteme bağlanabilmesi için CREATE SESSION yetkisinin kullanıcıya verilmesi gerekir: GRANT CREATE SESSION TO AHMET; GRANT komutu ile aynı anda birden çok yetki birden çok kullanıcıya verilebilir: GRANT CREATE TABLE, UNLIMITED TABLESPACE TO AHMET, MEHMET; Unlimited Tablespace yetkisi verilmezse kullanıcı tablo yaratamaz. Eğer tablespace üzerinde sınırsız değil de sınırlı bir kullanım alanı (kota) verilmek istenirse aşağıdaki ifade kullanılabilir (2MB kota verir): ALTER USER AHMET QUOTA 2M ON "USERS";

26 Sistem Yetkileri (devam)
Sistem Yetkileri çok fazladır, hepsinin ezbere bilinmesinin gereği yoktur. İsminden yetkinin ne olduğu konusunda çıkarım yapılabilir. Eğer yetki isminde “ANY” sözcüğü geçiyorsa farklı şemalar üzerinde işlem yapabilme yetkisi olduğunu gösterir. CREATE TABLE: Kullanıcının sadece kendi şeması üzerinde tablo oluşturma yetkisi. CREATE ANY TABLE: Kullanıcının tüm şemalar üzerinde tablo oluşturma yetkisi.

27 Verilen Yetkilerin Geri Alınması
Kullanıcılara verilen yetkilerin geri alınması REVOKE komutu ile gerçekleştirilir: REVOKE CREATE TABLE FROM AHMET;

28 Nesne Yetkileri Bir kullanıcının veri tabanındaki nesneler üzerinde ne tür yetkileri olduğunu tanımlamak için kullanılan yapıya nesne yetkisi denir. Bir kullanıcı kendi yarattığı tablolar üzerinde SELECT yetkisine sahiptir, fakat başka şemalardaki tablolar üzerinde SELECT sorgusu yapabilmesi için gerekli yetkinin verilmesi gerekir. GRANT yetkiler [(sütunlar)] ON nesneler TO kullanıcılar [roller] [PUBLIC]; Tüm kullanıcılar

29 Nesne Yetkisi Verme MEHMET kendisine ait olan PERSONEL tablosu üzerinde SELECT sorgusu yapma yetkisini AHMET’e vermek isterse: GRANT SELECT ON PERSONEL TO AHMET; AHMET kendisine ait olan OGRENCILER tablosunun sadece ADI ve SOYADI alanları üzerinde UPDATE yapma yetkisini MEHMET’e vermek isterse: GRANT UPDATE (ADI, SOYADI) ON OGRENCILER TO MEHMET;

30 Rol Rol, birçok yetkinin bir araya getirilmesi ile oluşan yetki gruplarına verilen isimdir. Bir rol kendi içinde başka rolleri de içerebilir. Örneğin Oracle 11g’de DBA Rolünün; 16 Rolü 202 Sistem Yetkisi 284 Nesne Yetkisi vardır. * Oracle Enterprise Manager üzerinden görülebilir. Oracle kendi ürettiği standart rollerin kullanılması yerine, her DBA’in kendisi için ihtiyaç duyduğu rolleri tanımlamasını tavsiye eder.

31 Rol Yaratma Rol de bir nesne olduğu için CREATE komutu ile yaratılır. Fakat diğer nesnelerden farklı olarak, yaratan kullanıcının şeması altında bu roller görünmez (rol bir kişiye ait değildir). CREATE ROLE DENEME; GRANT CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE TO DENEME; GRANT DENEME TO AHMET; GRANT DENEME TO ALTAN WITH ADMIN OPTION;

32 SYSDBA ve SYSOPER Sistem Yetkileri
SYSDBA: Bu yetki ile veritabanına bağlanan kullanıcı tüm işlemleri yapabilme iznine sahip olur. Bunlardan bazıları: STARTUP ve SHUTDOWN işlemlerini gerçekleştirir. CREATE DATABASE (Veritabanı yaratma) ALTER DATABASE: open, mount, back up, karakter seti değiştirme CREATE SPFILE (Sistem Parametre Dosyası yaratma) ARCHIVELOG ve RECOVERY SYSOPER: Bu yetki ile veritabanına bağlanan kullanıcı temel işletim görevlerini yapma iznine sahip olur, fakat kullanıcı verilerini göremez. ALTER DATABASE: open, mount, back up

33 SYS ve SYSTEM Kullanıcıları
SYS kullanıcısı tüm veri tabanının ve veri sözlüğünün sahibidir. Sisteme giriş yaparken AS SYSDBA eki ile bağlanır. Sahip olduğu SYS şeması üzerinde değişiklik yapılmamalıdır. SYSTEM kullanıcısı veri sözlüğü dışında başka idari işler ile ilgili tabloları ve görünümleri sağlayan SYSTEM şemasının sahibidir. Sisteme Normal kullanıcı olarak giriş yapar.

34 SYS şemasının nesnelerine erişme yetkisi olan roller
SELECT_CATALOG_ROLE: Kullanıcılara veri sözlüğü görünümleri üzerinde sorgu yapma yetkisi verir. EXECUTE_CATALOG_ROLE: Kullanıcıların veri sözlüğü üzerinde paket (package) ve prosedür yürütme yetkisi olmasını sağlar. DELETE_CATALOG_ROLE: Sistem izleme (audit) tabloları olan SYS.AUD$ ve SYS.FGA_LOG$ tablolarında silme yetkisi verir. DİKKAT: Bu gibi rollerin kullanıcılara verilmesi risk oluşturur.

35 Trigger (Tetikleyici)
Bir veri tabanında belirli bir tabloda değişiklik olduğunda otomatik olarak bir işlemi başlatan bir dizi SQL ifadesidir. Bir trigger bir olaydan (insert, delete ya da update ifadelerin belirtilen tabloda oluşması) ve bir hareketten (ilgili prosedür) oluşur. Örneğin; personel tablosundan bir kaydın silinmesi olayı gerçekleştiğinde, eski_personel tablosuna personelin numarasını ve işten ayrılma tarihini belirtmek için o anki tarihi kaydeden bir prosedür yazılması ile bir tetikleyici oluşturulabilir.

36 Trigger Yaratma CREATE [or REPLACE] TRIGGER 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 satır için tekrar tetikle WHEN: Tetikleyiciye koşul ekler

37 Trigger Örneği

38 Stored Procedure (Saklı Yordam)
Stored Procedure’ler veritabanında saklanan ve gerektiğinde ismi ile çağrılabilen PL/SQL bloklarıdır. Değer döndüren prosedürlere fonksiyon (function) denir. Önceden derlenmiş olduğu için, normal kullandığımız bir SQL sorgusunun tekrar tekrar çalıştırılmasına nazaran daha fazla performans elde etmemizi sağlarlar. Server üzerinde tutulduğundan, yükü istemci tarafına değil de, sunucu tarafına yükleyerek programımızın performansını arttırır. (Elbette ki bu bir seçimdir. Sunucunuz güçlüyse bu seçimi tercih edebilirsiniz.)

39 Stored Procedure (Devam …)
Bir kez yazılıp, tekrar tekrar kullanıldığı için modüler bir yapıda program geliştirmiş oluruz. Aynı PL/SQL ifadesini birden fazla yerde kullanacağımız zaman, bunu bir saklı yordam haline getirerek, kullanımını sadece ismini çağırma ile gerçekleştirebiliriz. Belirli girdi ve çıktı parametreleri olduğu için, saklı yordamların kullanımı ile güvenlik açısından kendimizi sağlama almış oluruz. Ağ trafiğini azaltır. İstemci tarafından birçok satıra sahip SQL komutunun sunucuya gitmesindense, sadece saklı yordamın adının sunucuya gitmesi ağı daha az meşgul etmiş olur.

40 Stored Procedure Örneği
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;

41 Package (Paket) Birbiriyle ilişkili olan prosedürlerin, fonksiyonların, değişkenlerin ve diğer yapıların bir bütün haline getirildiği ve veritabanında saklandığı yapıdır. Bir global değişkenin tanımlanıp paket içindeki herhangi bir prosedürde çağrılabilmesi gibi ekstra özellikler sağlar. Ayrıca paketler bir bütün halinde bir kerede parse edilip, derlenip, belleğe yüklendiği için performans artışı da sağlar. Paketlerde genellikle tanımlama (specification) ve gövde (body) olmak üzere iki kısım bulunur.

42 Package Örneği 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 DELETE FROM emp WHERE empno = emp_id; END fire_employee;

43 DROP ve ALTER Yaratılan nesnelerin silinmesi için DROP, nesneler üzerinde değişiklik yapmak için ALTER komutları kullanılır. Tablo silme: DROP TABLE ALTAN.PERSONEL; Tabloya yeni kolon ekleme: ALTER TABLE OGRENCI ADD (TCNO VARCHAR2(11)); Tablodaki SOYAD kolonunun veri türünü değiştirme: ALTER TABLE OGRENCI MODIFY (SOYAD VARCHAR2(25)); Tablodan kolon silme: ALTER TABLE DROP COLUMN TCNO; PERSONEL'deki bölüm alanını BOLUMLER'deki BOLUM_NO alanına ilişkilendirme: ALTER TABLE PERSONEL ADD CONSTRAINT per_bölüm_fk FOREIGN KEY(BOLUM) REFERENCES BOLUMLER(BOLUM_NO); Not: Kullanıcılar ile ilgili DROP ve ALTER örnekleri önceki slaytlarda var Detaylı bilgi için: "Oracle Database 11g: SQL Fundamentals II" altında "Les02.ppt"


"VERİ TABANI YÖNETİMİ Ders 10: Oracle Nesneleri" indir ppt

Benzer bir sunumlar


Google Reklamları