31.05.2008

Neden Oracle sertifikasi


Yıl 2000. Turkiye 1999 depreminden cıkmıs, ciddi ekonomik kriz ile karşı karşıya olduğumuz günlerde bende yurtdışına gitmeyi en azından IT teknolojileri konusundaki bilgilerimi artırmayı ve gerekirse hayatımı yurtdışında devam ettirmeyi düsşünüyorum. Bu kapsamda bütün gerekli işlemleri yapıp Sydney Universitesi'ne başvuruyorum, Başvurum bir kac ay icerisinde kabul görüyor ve mektubu alıyorum. Bir taraftanda arastırmalarım devam ediyor, Turkiye'de hangi teknolojiyi öğrensem bana daha fazla yarar saglar ve uluslararası platformda değer görür diye. Yurtdışına gitmeden zaten uzmanlık alanım olan IT teknolojilerinde sektördeki en eski ve en tecrübeli olarak tespit ettiğim Bilginc'e basvuruyorum. O gün MCSE+MCDBA programına kayıt oluyorum. Yurtdışına gitmemi bir yıl erteleyip burada kalıp, edinebildiğim kadar bilgiyi ve sertifikayı almaya karar veriyorum. MCSE programını bile tamamlamadan Bilginc'ten iş teklifi alıp bu günlere kadar gelme serüvenime başlıyorum. 2001 yılında daha önce okulda da ilgimi ceken dbase uygulamaları ve daha önceki veritabanı tecrübemden dolayı Bilginc IT Academy'de Oracle eğitimlerine başlıyorum. 2002'de 10g veritabanı daha ürün olarak betayken şirketimizin genel müdürü Arzu hanım tarafından 10g yeni özellikler eğitimini almaya Amerika'ya gönderiliyorum. Bu aynı zamanda Bilginc'in teknolojiyi verdiği önemi göstermesi açısından bir dönüm noktası aslında. Avrupa'da 10g eğitimlerine 2003 yılının Ocak ayında başlıyan ilk üç Oracle Eğitim Merkezinden biri olmamızıda sağlıyor. Daha sonra Bahri Bey yurtdışındaki bir toplantıda dünyadaki genel sertifikaların , OCP sertifikasına oranının Türkiye'de çok düşük kaldığını farkediyor. Türkiyede'ki sertifikalı uzman sayısını artırmak için uzun uğraşlar sonucunda Oracle'ın desteğini alıyor. Her öğrencimizin sertifika eğitim bedelinin yarısını Oracle sponsor oluyor ve Bilginc bu proje ile Oracle uluslararası proje ödülünü kazanıyor. 2004 yılında OCP sertifikasyon programına başlıyoruz.


Bugün Turkiye'de hemen hemen butun büyük firmalarda en az bir tane Oracle veritabanı kullanılar. Oracle Teknolojilerinin en temel avantajı Oracle konusunda uzman bir dba diğer veritabanlarını cok daha kısa zamanlarda öğrenebilir. Dolayısı ile aslında Oracle Dba olmanız demek sadece Oracle dba olmanız demek değildir, aynı zamanda piyasadaki herhangi bir veritabanını öğrenmenizinde birkaç haftayı gecmeyecek olması demektir. Baska bir boyuttada iş arayan konumdan iş için aranan konuma geçmeniz demektir. Şuan için Türkiye'de OCP olan uzman sayısının beşyüzlerde olması ve bu sayının yarısının Oracle ve Bilginc'in ortak kampanyası sonucunda benim sınıflarından çıkmasıda insana ayrı bir gurur veriyor tabi. Bir işe girmenin garantisini kimse size veremez , bu durumun birçok şartı vardır ama Oracle konusundaki bir dba bugun IT teknolojileriyle alakalı iş arayanların içerisinde kesinlikle ön plana çıkar. Bizim şu anda bankalarda dba'lik yapan arkadaşlarımızın bile olması ve onların kendilerininde mezun oldukları bu programa olan güvenlerinden dolayı yeni çalışma arkadaşları aradıklarında bize sormalarıda bu programımızın başarısının en güzel kanıtıdır.

OCP olmak için geçirdiğimiz bu sürecin emek ile kazanılıyor olması, çok kolay olmaması bügünkü ülkemiz sartlarında Oracle DBA sertifikasına sahip uzmanların avantajı olarak da ortaya cıkıyor. Belli bir süre ders,evde çalışma ve tecrübeyi birleştirerek hayatınızın geri kalanında daha rahat etmenizi saglayabilirsiniz.

Özet olarak bugüne kadar OCP oldugum icin hic pişman olmadım. Bugun geçmise dönsem tekrar OCP olmak isterdim.

Sql Plan Management

Bu özellik sayesinde veritabanında çalışan bütün sql
Komutlarının tüm planları sql plan baseline olarak saklanır.
Yeni bir plan ortaya çıktığında hemen kullanılmaz işaretlenir,
Eğer performansı eskisinden daha iyiyse devreye alınır.

Çeşitli sebeblerle planlar performanslarda kötüleşmelere yol
Açabilir

Yetersiz analiz,bind variable,dengesiz veri dağılımı gibi. Bu
özellik sayesinde beklenmeyen plan değişimi olmayacaktır.

30.05.2008

In Exist KARSILASTIRLMASI

select * from T1 where x in ( select y from T2 )

çalışması:

select *
from t1, ( select distinct y from t2 ) t2
where t1.x = t2.y;

Subquery sonucta, distinct, ve indexli (hashed veya sorted) ve join yapmıs
original tabloyla.


Tersi ise

select * from t1 where exists ( select null from t2 where y = x )

Bunun calisması:


for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD
end if
end loop

Bunun sonucu genelde full scan T1 yada ilk sorgunun indexli olması T1(x).


Sonucta, Exists daha uygun oldugu senaryo icin

Sunu soyleyebiliriz eger subqueyin sonucu ( select y from T2 ) cok buyukse
ve cok zaman alıyorsa kullanılabilir.


Eger subquery kucukse IN cok daha uygun bir secim olacaktır.

Eger her iki tabloda gercekten buyukse o zaman diger faktorleri dikkate almamız
gerekmektedir.
Bu faktorleri indexler gibi gorebiliriz.Bu faktorler index distinct gibi faktorler varsa
in performansı daha iyi olacağı düşünülebilir.

11g yeni özellik :Database Replay

Bu özellik sayesinde primary database yapılan işlemleri

Kaydedip bunları test veritabanına uygular. Böylece gerçek

İşlemler primary database’in birebir kopyası olan test veritanına

Kolayca uygulanabilir. Bu özellik snapshot standby database’in

Bir devam özelliği gibidir.

Bu özellik
•Database upgrades, patches
•Schema, parameters
•RAC nodes, interconnect
•OS platforms, OS upgrades
•CPU, memory
•Storage

Bunu bir örnekle inceleyelim.
7/24 çalışması zorunlu olan bir firmada yeni donanim değişikliği
Yapmamız gerekiyor. Normal şartlar altında çok ciddi testler
yapmak gerekir bütün bu testler sonucunda birebir sonuç
Alamayabilirizde.
AMA
- Veritabanımızın en yogun bir gününde sabah snapshot standby
Özelliği ile bir kopya oluşturma
Gün sonuna kadar yapılan işlemlerin otomatik kaydedilmesi
Kopya veritabanında donanım değişikliğinin yapılması
Kaydedilen yüklerin test ortamına uygulanması
Böylece birebir sonuç alınması ve bu sonucun problem ve
Performans raporlarının incelenerek gerekli düzeltmelerin
yapılması

29.05.2008

UTL_SMTP örnegi

DECLARE
c UTL_SMTP.CONNECTION;

PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
BEGIN
UTL_SMTP.WRITE_DATA(c, name ': ' header UTL_TCP.CRLF);
END;

BEGIN
c := UTL_SMTP.OPEN_CONNECTION('smtp serverınız adı');
UTL_SMTP.HELO(c, 'bilginc.com');
UTL_SMTP.MAIL(c, 'zekeriyab@bilginc.com');
UTL_SMTP.RCPT(c, 'zekeriyabesiroglu@google.com');
UTL_SMTP.OPEN_DATA(c);
send_header('From', '"Sender" ');
send_header('To', '"Recipient" ');
send_header('Subject', 'Deneme');
UTL_SMTP.WRITE_DATA(c, UTL_TCP.CRLF 'deneme maili');
UTL_SMTP.CLOSE_DATA(c);
UTL_SMTP.QUIT(c);
EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
BEGIN
UTL_SMTP.QUIT(c);
EXCEPTION
WHEN UTL_SMTP.TRANSIENT_ERROR OR UTL_SMTP.PERMANENT_ERROR THEN
NULL;
END;
raise_application_error(-20000,
'Mail atarken problem olustu: ' sqlerrm);
END;

11g Yeni özellikler semineri yoğun katılım ile bir kez daha 28 mayıs'ta gerceklestirdik.




44 Üst düzey IT Teknolojilerindeki Uzman Arkadaşlarımızla Oracle 11g nin yeni özelliklerini
inceledik.

NEDEN oracle

Sizlerle asagıdaki bazı önemli teknolojik gelişmeleri iki ayrı veritabanındaki karsılastırılmasını gostermek istedim

Teknoloji adı Oracle Ms sql2005
Multi version read consistency 1984 2005 geldi fakat persorfmasn problemli
Online Table redifination 1998 Yok
Bitmapped İndexes 1998 Kısmen
Virtual private Database 1998 Yok
List partition 2001 Yok
Composite partition 2001 Yok
Real Application Clustering 2001 Yok
Flashback Operation 2001 Yok
logical standy database 2002 Yok
Automatic storage Management 2004 Yok
Automatic workload Management 2004 Yok
Automatic database diagnostic Monitor 2004 Yok
Model Clause 2004 Yok
Application Express 2004 Yok
Range partition 1997 yeni olarak geldi,bircok adımda
transparent data encrption 2005 yeni programa gerekli
Cevrimici tablo tasıma 2004 Yok



Yukarıda gecen teknolojilerin her biri inanılmaz önemli teknolojilerdir.İlerleyen zamanlarda
bu teknolojileri sizlerle daha detaylı paylasacağım.

Oracle Ms sql server Karsılastırılması

Multi Version Read Consistency

1984

2005 ile geldi! Beraberinde performans problemleri de!

Online Table Redefinition

1998

Yok

Bitmapped Indexing

1998

Kısmen

Virtual Private Databases

1998

Yok

List Partitioning

2001

Yok

Composite Partitioning

2001

Yok

Real Application Clustering

2001

Yok

Flashback Operations

2001

Yok

Logical Standby Databases

Automatic Storage Management

Automatic Workload Management

2002

2004

2004

Yok

Yok

Yok

28.05.2008

DBMS_CRYPTO ve LOB dataları Nasıl sifreleriz?

Aşağıdaki örnekte BLOB datasını nasıl encrypt ve decrypt yapıldıgını gosteriyorum.

* İlk önce yeni bir tablo create edelim(içinde BLOB kolon olan)
* RAW deger insert edelim
* Raw datayı Encrypt edelim.
* Encrypt ettigimiz datayı Decrypt edelim.


create table table_lob (id number, loc blob);

-- 3 tane bos lobs for src/enc/dec insert edelim

insert into table_lob values (1, EMPTY_BLOB());
insert into table_lob values (2, EMPTY_BLOB());
insert into table_lob values (3, EMPTY_BLOB());


declare
srcdata RAW(1000);
srcblob BLOB;
encrypblob BLOB;
encrypraw RAW(1000);
encrawlen BINARY_INTEGER;
decrypblob BLOB;
decrypraw RAW(1000);
decrawlen BINARY_INTEGER;
leng INTEGER;

begin

-- 16 bytes raw datayı girelim
srcdata := hextoraw('6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D');

dbms_output.put_line('---');
dbms_output.put_line('girilen data ' || srcdata);
dbms_output.put_line('---');

-- Bos lob locator for src/enc/dec select edelim

select loc into srcblob from table_lob where id = 1;
select loc into encrypblob from table_lob where id = 2;
select loc into decrypblob from table_lob where id = 3;

dbms_output.put_line('Bos create ettik LOBS');
dbms_output.put_line('---');

leng := DBMS_LOB.GETLENGTH(srcblob);
IF leng IS NULL THEN
dbms_output.put_line('Kaynak BLOB uzunlugu NULL ');
ELSE
dbms_output.put_line('Kaynak BLOB Uzunlugu ' || leng);
END IF;

leng := DBMS_LOB.GETLENGTH(encrypblob);
IF leng IS NULL THEN
dbms_output.put_line('Encrypt BLOB uzunlugu NULL ');
ELSE
dbms_output.put_line('Encrypt BLOB uzunlugu ' || leng);
END IF;

leng := DBMS_LOB.GETLENGTH(decrypblob);
IF leng IS NULL THEN
dbms_output.put_line('Decrypt BLOB uzunlugu NULL ');
ELSE
dbms_output.put_line('Decrypt BLOB uzunlugu ' || leng);
END IF;

-- source raw datasını blob yazalım

DBMS_LOB.OPEN (srcblob, DBMS_LOB.lob_readwrite);
DBMS_LOB.WRITEAPPEND (srcblob, 16, srcdata);
DBMS_LOB.CLOSE (srcblob);

dbms_output.put_line('Kaynak raw data yazıldı kaynak blob');
dbms_output.put_line('---');

leng := DBMS_LOB.GETLENGTH(srcblob);
IF leng IS NULL THEN
dbms_output.put_line('kaynak BLOB uzunlugu NULL ');
ELSE
dbms_output.put_line('kaynak BLOB uzunlugu ' || leng);
END IF;

DBMS_CRYPTO.Encrypt(encrypblob,
srcblob,
DBMS_CRYPTO.AES_CBC_PKCS5,
hextoraw ('000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F'),
hextoraw('00000000000000000000000000000000'));


dbms_output.put_line('Encryption yapıldı');
dbms_output.put_line('---');

leng := DBMS_LOB.GETLENGTH(encrypblob);
IF leng IS NULL THEN
dbms_output.put_line('Encrypt BLOB uzunlugu NULL');
ELSE
dbms_output.put_line('Encrypt BLOB uzunlugu ' || leng);
END IF;

-- encrypblob to a raw okuyalım
encrawlen := 999;

DBMS_LOB.OPEN (encrypblob, DBMS_LOB.lob_readwrite);
DBMS_LOB.READ (encrypblob, encrawlen, 1, encrypraw);
DBMS_LOB.CLOSE (encrypblob);

dbms_output.put_line('encrypt blob raw okundu');
dbms_output.put_line('---');

dbms_output.put_line('Encrypted data (256 bit key) ' || encrypraw);
dbms_output.put_line('---');


DBMS_CRYPTO.Decrypt(decrypblob,
encrypblob,
DBMS_CRYPTO.AES_CBC_PKCS5,
hextoraw
('000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F'),
hextoraw('00000000000000000000000000000000'));

leng := DBMS_LOB.GETLENGTH(decrypblob);
IF leng IS NULL THEN
dbms_output.put_line('Decrypt BLOB Uzunlugu NULL');
ELSE
dbms_output.put_line('Decrypt BLOB Uzunlugu ' || leng);
END IF;

-- decrypblob raw okuyalım
decrawlen := 999;

DBMS_LOB.OPEN (decrypblob, DBMS_LOB.lob_readwrite);
DBMS_LOB.READ (decrypblob, decrawlen, 1, decrypraw);
DBMS_LOB.CLOSE (decrypblob);

dbms_output.put_line('Decrypted data (256 bit key) ' || decrypraw);
dbms_output.put_line('---');

DBMS_LOB.OPEN (srcblob, DBMS_LOB.lob_readwrite);
DBMS_LOB.TRIM (srcblob, 0);
DBMS_LOB.CLOSE (srcblob);

DBMS_LOB.OPEN (encrypblob, DBMS_LOB.lob_readwrite);
DBMS_LOB.TRIM (encrypblob, 0);
DBMS_LOB.CLOSE (encrypblob);

DBMS_LOB.OPEN (decrypblob, DBMS_LOB.lob_readwrite);
DBMS_LOB.TRIM (decrypblob, 0);
DBMS_LOB.CLOSE (decrypblob);

end;
/

Neden-RAC?

Kesintisizlik ve Süreklilik

Tüm sunucuların kaynaklarının ortak kullanımı
Kullanıcıların sunucu kesintilerini hissetmemesi
Sunucu mimarisinde küçük başlayıp, sonrasında büyüme imkanı
Ölçeklenebilirlik ve yüksek devamlılık
Hot-Plug (kesintisiz) olarak yeni sunucu ekleyebilme veya çıkarabilme
Test veritabanı sunucularının production’a kolaylıkla eklenebilmesi

Konsolidasyon Öncesi

Her uygulamaya ayrı sunucu
Her uygulama için ayrı bir pasif sunucu
Süreklilik konusunda pasif donanımlara bağımlılık
Ölçeklenebilme sorunları

Grid Computing’den Sonra

Tam süreklilik…Sınırsız ölçeklenebilirlik
Uygulamalar arasında sunucuların paylaşılması
Grid Control yönetim yazılımı ile tüm sunucuların tek bir konsoldan yönetilmesi

RAC ile Düşük Maliyetli Sunucular

Küçük başla, büyüdükçe öde, sınırsız ölçeklenme imkanı sağla
ÜCRETSİZ Clusterware yazılımı
ÜCRETSİZ Automatic Storage Management yazılımı
ÜCRETSİZ Information LifeCycle Management (ILM) yazılımı

Düşük Maliyet ile Yüksek Performans

Oracle Database 11g Snapshot Standby

Bir yazımda konustugumuz physical standby database
Bu yeni özellik sayesinde üretim veritabanının birebir kopyası
olan bir test ortamına dönüşebilir.

Bu özellik sayesinde physical standby database geçici bir
Süreliğine okuma-yazma işlemlerine açılabilir. Okuma-yazma
İşlemlerine açılması sayesinde ideal bir test ortamına
ulaşmamız demektir.
Bu süre içerisinde primary database normal çalışmasına devam
Eder. Snapshot Standby yaptıgımız database bağımsız haraket
Edebilir.
Süreç sonunda yedek veritabanımız kaldığı yerden primary
Takip edecektir.

27.05.2008

Oracle 11g fiziksel hazır veritabından gercek zamanlı sorgulama

Herhangi bir felaket karsısında hazır tuttugumuz physical
standby database lerden gerçek zamanlı sorgulama yapmaya
imkan verir.

Pek çok sistemde sadece raporlama, sadece test yada sadece
Yedek amaçlı vertibanlarına cok fazla kaynak ayırmak zorunda
Kalınır.

Oracle 11g veritabanında physical standby databaseler hem
Felaketten kurtarma hem test hemde raporlama amaçları için
Kullanılabilir.