A Oracle DBA's BLOG

Welcome to my ORACLE DBA blog. You will be Amazing!!!

Saturday, December 31, 2011

Oracle NoSQL


The Oracle NoSQL Database is a distributed key-value database. It is designed to provide highly reliable, scalable and available data storage across a configurable set of systems that function as storage nodes.
Oracle NoSQL is now available at OTN.

Tuesday, December 20, 2011

Creating View for beginers

Bir Gorunum(view) olusturmak
·      Bir veritabanında yer alan tablolar ve bu tablolardaki alanların sorgulama yapılarak kullanılması ve çıkan sonuçların bir geçici dosyada (VIEW) tutulması işlemidir.
·      Tablolar arasında bağlantılar kullanılarak sorgulamanın her seferinde yeniden yazılması yerine bir kez yazılarak sonuçların görüntü tablosunda tutulması ve bu tablo üzerinden de sorgulamaların yapılması hız, zaman ve performans kazandıracaktır.
·      Yaratılmış olan görüntü tablosu üzerinde INSERT, DELETE ve UPDATE işlemleri yapılamaz.
·       Ancak görüntü tablosunu oluşturan tablolara yeni bir kayıt eklenmesi, değiştirilmesi ve silinmesi durumlarında görüntü tablosunda da güncelleştirmeler yapılacaktır.
·      Görüntü tabloların kullanılması, veritabanında ilgili tabloların üzerinde bağlantıların tekrar tekrar kurulması engellenmiş olacaktır. İş süreçlerine bağlı olarak özellikle ekran veya yazıcı raporların alınması, sorgulamaların gerçekleştirilmesi gibi amaçlarda kullanılır.
·      Görüntü dosyasının yaratılması sırasında GROUP BY ile sıralama yapılması özelliği kullanılmaz. Buna karşılık ORDER BY özelliği kullanılabilir.
  Create view (VIEW_ADI)
            as select * from (TABLO_ADI)
        order by (Column_1,column_2,..);
·      Gorunumler herhangi bir veri icermez. Tablolarsa veri icerir.

NOTE: Bir tablodaki veriler degistigi anda,bu tabloyla olusturulan butun viewler  degisir.



·         CREATE or REPLACE VIEW tablo_adi AS
      SELECT .....;
NOTE:Görunume taninmis olan butun ayricaliklari koruyarak gorunumu tekrar olusturmak icin, CREATE or REPLACE VIEW komutunu kullanmaliyiz.
FORCE: Görüntüyü oluşturacak tablo olmasa dahi görüntünün oluşturulmasını sağlar.
CREATE VIEW veysi_yeni AS
  SELECT * FROM olmayan_bir_tablo;

FROM olmayan_bir_tablo
     *
ERROR at line 3:
ORA-00942: table or view does not exist

CREATE FORCE VIEW veysi_yeni AS
    SELECT *
    FROM olmayan_bir_tablo;

Warning: View created with compilation errors.

SQL> SHOW ERRORS VIEW veysi_yeni;

LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0      ORA-00942: table or view does not exist

SELECT *
   FROM veysi_yeni;
FROM veysi_yeni
     *
ERROR at line 2:
ORA-04063: view "SYSTEM.VEYSI_YENI" has errors

Şimdi de ilgili tabloyu yaratalım;

CREATE TABLE olmayan_bir_tablo AS
  SELECT *FROM olan_bir_tablo;

SELECT *
   FROM veysi_yeni;


Az önce hata veren görüntü, şimdi sadece satır olmadığını gösteriyor. FORCE ile yarattığımız görüntüyü artık kullanabiliriz.
NONFORCE: Görüntüyü oluşturacak tablo olmadan görüntünün oluşturulmasına izin vermez. Saten standart olarak belirtilede bilir.


---- Bolumler adinda bir tablo olusturuyorum ---

CREATE TABLE bolumler (
      bolum_no    number(3),
      adi         varchar2(15),
CONSTRAINT pk_bolum PRIMARY KEY
);

---- Ogrenci adinda bir tablo olusturuyorum ---

CREATE TABLE ogrenci (
      Ogrenci_no  varchar2(10),
      Adi         varchar2(15),
      Soyadi      varchar2(15),
Ogr_bolum   number(3),
CONSTRAINT fk_bolum FOREIGN KEY (ogr_bolum) REFERENCES bolumler (bolum_no)
);

---- View_ogr_bolum adinda bir view olusturuyorum ---

CREATE or REPLACE view_ogr_bolum AS
SELECT a.adi||' '||a.soyadi ISIM, b.adi BOLUM
  FROM ogrenci a, bolumler b
 WHERE a.ogr_bolum = b.bolum_no;


Bu örnekte OGRENCI tablosundaki “adi” ve “soyadi” alanları birleştirilerek “ISIM” alanı olarak, BOLUMLER tablosundaki bolum adi “adi” alanı ise “BOLUM” alanı olarak kullanılmıştır.

SELECT *
  FROM view_ogr_bolum
 ORDER BY isim;


Salt okunur(read only) bir gorunum olusturmak!!
User’lerin view araciligi ile kayitlari degistirlerini onlemek icin Create view komutunun with read only kalibini kullanabilirsiniz.

Bir oncekili yarattigimiz tabloyu ele alalim.

CREATE or REPLACE view_ogr_bolum AS
SELECT a.adi||' '||a.soyadi ISIM, b.adi BOLUM
  FROM ogrenci a, bolumler b
 WHERE a.ogr_bolum = b.bolum_no;

Bir user OGRENCI YADA BOLUMLER tablosundan kayit slime yetkisi varsa,Bu kullanici OGRENCILER yada BOLUMLER kayitlarini VIEW_OGR_BOLUM gorunumu uzerinden de silebilir.

Bu user ayni zamanda INSERT ve UPDATE operasyonlarini VIEW_OGR_BOLUM gorunumu uzerinde gerceklestirerek OGRENCILER yada BOLUMLER tablosuna kayit ekleyebilir ve kayitlari guncelleyebilir.
Bunlari engellemek icin VIEW READ ONLY olarak yaratilabilir.

CREATE or REPLACE view_ogr_bolum AS
SELECT a.adi||' '||a.soyadi ISIM, b.adi BOLUM
  FROM ogrenci a, bolumler b
 WHERE a.ogr_bolum = b.bolum_no WITH READ ONLY;
User bu sayede sadece kayitlari secebilir.

DROP VIEW Komutu  (DROP VIEW Statement)

Yaratılmış bir görüntü tablosunun veritabanından silinmesi için kullanılır.

DROP VIEW <tablo_adi>   şeklinde kullanılır. Özellikle yaratılmış ve programlar tarafından kullanılmakta olan bir görüntü tablosunun silinmesi durumunda programların çalışmayacağı unutulmamalıdır.
Bir görüntüyü sildiğimiz zaman data dictionary'den bütün bilgileri silinecek, üzerindeki bütün haklar kalkacak ve bu objeye bağlı olan diğer görüntüler de geçersiz kılınacaktır ve yeniden düzenlenmesi gerekecektir.


Bir görüntü üzerinden DML uygulama şansına sahipsiniz ancak aşağıdaki koşulların görüntü için geçerli olmaması gerekmekte yani görüntünün içeriğinin içerisinde bulunmaması gerekmekte.


1) DISTINCT veya UNIQUE
2) GROUP BY
3) START WITH
4) CONNECT BY
5) ROWNUM
6) Bütün SET operatörleri (UNION, UNION ALL, INTERSECT, MINUS)
7) SELECT içerisinde bir altsorgunun varlığı

Saturday, December 10, 2011

Point of Join important topic for beginers

TABLOLAR ARASI BAĞLANTI (JOIN)
           
Oracle veritabaninda birden cok tabloda yer alan sutunlari iliskilendirerek birlesik veriler elde etmek icin JOIN kelimesini kullaniriz.
Join işleminde bilinmesi gereken önemli nokta,  join işlemi yapıldıktan sonra birleştirilen tabloların içeriği değiştirilmez sadece o anki sonuç ekranına yansıtılır.
   Cross Join
İlişkili olsun olmasın birleştirilecek olan tabloların tüm satırlarının listelenmesini sağlar. Sorgu sonucu iki tablonun satır sayısı çarpımları kadardır.

SELECT cname,city,odate,onum,amt
 FROM customers CROSS JOIN orders;

SELECT *
 FROM customers CROSS JOIN orders;
Inner Join

Inner Join işlemi ile birleştirilecek olan tabloların sütunlarının içerdiği veriler kontrol edilerek kesisim kümesi alınıyor.

SELECT cname,city,onum,amt,odate
 FROM customers INNER JOIN orders ON CUSTOMERS.CNUM = orders.cnum;

 --where ile kullanımı
SELECT cname,city,onum,amt,odate
 FROM customers,orders
 WHERE customers.snum = orders.snum ;
Natural Join

Birleştirilecek tablolarda aynı isim, değerli ve tipli birer tane sütun bulunuyorsa natural join işlemi ile birleştirilme yapılır. Natural join yapılacak tabloların normalize olmaları gerekir.

SELECT cname,city,onum,amt,odate
 FROM customers NATURAL JOIN orders ;

Join On

İçerdiği veriler aynı olan fakat sütün isimleri farklı olan tabloları birleştirmek için join on komutu kullanılır.

SELECT cname,city,onum,amt,odate
 FROM customers JOIN orders ON(customers.cnum = orders.snum);




Join Using
Birleştirilecek olan tablolarda birleştirme işlemini yapılırken hangi sütunun kullanılması  gerektiğini belirtmek istersek join using komutu kullanılır.

SELECT cname,city,onum,customers.cnum
 FROM customers JOIN orders USING(snum);

SELECT cname,city,onum,customers.cnum
 FROM customers JOIN orders USING(snum)
 where onum > 3005
 order by cname;