Oracle SQL Developer Kullanarak Teradata Veritabanına LDAP ile Bağlanmak

Herkese Selam,
oraclesqldeveloper
Bu yazıda Oracle SQL Developer kullanarak Teradata veritabanına LDAP ile nasıl bağlancağını tarif edeceğim umarım farkındalık anlamında faydalı bir yazı olur.

Bilindiği üzere Oracle SQL Developer ile sadece bir Oracle veritabanına değil, JDBC driver’ı olan bir çok veritabanına bağlanabilmekte. Bunlardan bazıları DB2, Teradata, Access, MSSQL, MySQL. Bu yazıda ben, LDAP Authentication konfügrasyonu yapılmış bir Teradata veritabanına bağlanmayı anlatacağım.

Oracle SQL Developer ile bağlantı sağlamak istediğim Teradata veritabanının versiyonu  15. Oracle SQL Developer’ın versyonu ise 4.1.5.

Öncelikle Oracle SQL Developer’dan Teradata’ya bağlanabilmek için bir Teradata jdbc driver’ına ihtiyacım var. Bu driverı linki takip ederek indirebilirsiniz.

Driver’ı içeren .zip/.tar dosyasını indirdikten sonra bilgisayarımızda uygun bir yere çıkarmamız gerekiyor. Daha sonra Oracle SQL Developer içerisinden bu dosya içinden çıkacak tdgssconfig.jar ve terajdbc4.jar dosylarını Oracle SQL Developer’a göstermemiz gerekiyor.

Bilgisayarımıza çıkarttığımız bu dosyları Oracle SQL Developer içerisinden Tools –> Preferences –> Database –> Third Party JDBC Drivers seçenekleri ile açılan pencereden Add Entry düğmesine tıklayarak sırayla gösteriyoruz. Daha sonra Tamam butonuna tıklayarak ekranı kapatıyoruz.

jar_ext İlgili driverları gösterdikten sonra şimdi Oracle SQL Developer üzerinden yeni connection kurma ekranını açalım.

teradata

 

Evet yeni bağlantı kurma ekranını açtığımızda Oracle seçeneğinin hemen yanında Teradata bağlantı sekmesinin de geldiğini görmekteyiz. Bu .jar dosyalarımızın doğru bir şekilde gösterildiğinin kanıtı. Şimdi bağlantı kurmamız için yapmamız gereken son adım kaldı onu yapıp bağlantı kurmayı deneyeceğiz.  Son adımda bağlantımızın LDAP ile nasıl sağlayacağımızı belirlemek için bağlantımıza LOGMECH parametresini ekleyeceğiz. Default olarak connection ekranında bu seçenek gelmediği için bu parametreyi bağlantıya eklemek için Add düğmesine basacağız ve açılan pencerede LOGMECH parametresini seçip OK düğmesine bastığımızda bu parametrenin connection ekranına bir seçim düğmesi olarak eklendiğini göreceğiz. Daha sonra bu seçim düğmesi ile LDAP seçeneğini seçip işlemi tamamlayacağız. 

teradatacon

 

teradatacon2

Evet şimdi LDAP user, şifremizi ve bağlanacağımız veritabanınının adresini yazıp Teradata veritabanına bağlantı sağlayabiliriz.

connection2

Posted in Oracle, Uncategorized | Tagged , , , , | Leave a comment

Oracle SQL Developer – Scratch Editör

Herkese Selam,
oraclesqldeveloperBu yazıda sizlere Oracle SQL Developer’ın migration alt yapısı ile sunulan Scratch Editör modülünden basedeceğim. Umarım farkındalık anlamında faydalı bir yazı olur.

Oracle SQL Developer’ın güçlü yanlarından biride Oracle olmayan veritabanlarından Oracle veritabanına migration için güçlü bir alt yapı sunması. Bu alt yapı içinde birden fazla özellik bulunmakta ama ben bu yazıda oldukça kullanışlı bulduğum Scratch Editör’den bahsedeceğim.

Scratch Editör alt yapısı None-Oracle (MsSQL,Teradata, Access, Sybase, DB2) sistemlerde yazılmış SQL/Procedurel SQL kodlarını Oracle SQL/PLSQL kodlarına çevirme işlemini gerçekleştiriyor. Böylelikle None-Oracle sistemlerden Oracle bir sisteme migration yapma ihtiyacınız gündeme geldiğinde veritabanı içerisinde yazmış olduğunuz uygulama kodlarını hızlı bir şekilde Oracle SQL/PLSQL notasyonuna çevirebilmeye olanak sağlıyor.

Şimdi Scratch Editöre nasıl erişildiğine bakıp bir kaç örnek yapalım.

Scratch Editöre, Tools –> Migration –> Scratch Editor yolunu izleyerek ulaşabiliyoruz. scratcheditor1

 

Scracth Editör açıldıktan sonra aşağıdaki gibi bir ekran açılıyor şimdi bu ekranın nasıl kullanıldığına bakalım.

scratcheditor2

 

Resimdeki numaralandırılmış alanları açıklayacak olur isek;

  1. Dönüşümü hangi dilden Oracle’a doğru yapacağımızı seçtiğimiz combobox.
  2. Dönüşümünü yapacağımız source kodu yazdığımız alan.
  3. Source kodu yazdıktan sonra çevirme işlemini başlatacağımız düğme.
  4. Dönüşüm sonunda sonucun oluştuğu alan.
  5. Oluşan kodun seçili Oracle DB’de çalıştırılmasını sağlayan düğme.

Şimdi bir kaç örnek ile nasıl çalıştığına bakalım;

İlk olarak MSSQL’de yazmış olduğum, içerisinde MSSQL’e has fonksiyonların kullanıldığı SQL cümlelerini Oracle’a çevirmeyi deneyeceğim.

MSSQL
---------------------------------------------------
SELECT ISNULL(EMPLOYEE_ID,1) FROM HR.EMPLOYEES; 

SELECT TOP 5 * FROM HR.EMPLOYEES;

SELECT FIRST_NAME + ' ' + LAST_NAME FROM HR.EMPLOYEES;

SELECT LEN(FIRST_NAME), GETDATE() FROM HR.EMPLOYEES;

SELECT SUBSTRING(FIRST_NAME,CHARINDEX('EM',FIRST_NAME),25) 
FROM EMPLOYEES;

Dönüşüm işlemi yapıldıktan sonra oluşan sonuçlar

Oracle
-------------------------------------------------------
SELECT NVL(EMPLOYEE_ID, 1) FROM HR.EMPLOYEES;

SELECT * FROM HR.EMPLOYEES WHERE ROWNUM <= 5;

SELECT FIRST_NAME || ' ' || LAST_NAME FROM HR.EMPLOYEES;

SELECT LENGTH(FIRST_NAME) , SYSDATE FROM HR.EMPLOYEES;

SELECT SUBSTR(FIRST_NAME, INSTR(FIRST_NAME, 'EM'), 25) 
FROM EMPLOYEES;

scratcheditor3

 

Evet gördüğümüz üzere MSSQL’e has fonksiyonların düzgün bir şekilde Oracle SQL’e çevrildiğini gözlemledik.

Şimdi birde MSSQL tarafında yazılmış bir stored procedure’ü Oracle’a çevirme işleminin nasıl dönüştüğüne bakalım.

MSSQL
-----------------------------------------------
CREATE PROC usp_KategoriUrunAdet
(@KategoriID int)
AS
BEGIN
    DECLARE @adet int;
 
    SELECT @adet=COUNT(ProductID) 
    FROM Production.Product
    WHERE ProductSubcategoryID=@KategoriID;
 
    RETURN @adet
END

//kod parcasini asagidaki sayfadan edindim.
//http://www.yazilimdilleri.net

Dönüşüm işlemi yapıldıktan sonra oluşan sonuç.

Oracle
------------------------------------------------
CREATE OR REPLACE FUNCTION usp_KategoriUrunAdet(
    v_KategoriID IN NUMBER )
  RETURN NUMBER
AS
  v_adet NUMBER(10,0);
BEGIN
  SELECT COUNT(ProductID)
  INTO v_adet
  FROM Production.Product
  WHERE ProductSubcategoryID = v_KategoriID;
  RETURN v_adet;
EXCEPTION
WHEN OTHERS THEN
  utils.handleerror(SQLCODE,SQLERRM);
END;

scratcheditor4

Evet dönüşümün başarılı bir şekilde olduğunu sonuçlardan gözlemleyebildik.

Oracle SQL Developer’ın Scratch Editörü görüldüğü üzere non-oracle bir sistemde yazılmış uygulamaları Oracle veritabanına uyarlamada bize oldukça kolaylıklar sağlıyor. Çok karmaşık uygulamaların dönüşümlerinde ne kadar başarılı olduğu test etmek için gerçek bir migration yapmak gerekir ancak %100 başarım sağlayamadığı durumu düşündüğümüz ihtimalde dahi editörün yaptığı çevirim ile uygulamanın tamamını yeniden yazmak zorunda kalmayacağımızı söyleyebiliriz.

Posted in Oracle, Uncategorized | Tagged , , , , , , , , , , , , , | Leave a comment

ADD_MONTHS Quick Tips

Herkese Selam,
Bu yazıda ADD_MONTHS fonksiyonunu kullanırken dikkat edilmesi gereken küçük bir ayrıntıdan kısaca bahsedeceğim umarım farkındalık anlamında faydalı olur.
Bilindiği üzere ADD_MONTHS fonksiyonu parametre olarak verdiğimiz tarihi referans alarak yine verdiğimiz parametre kadar verdiğimiz tarihi ay olarak öteleyen/gerileten sık kullanılan bir SQL fonksiyonu. Kısaca nasıl çalıştığını bir iki örnek ile hatırlayalım.

SELECT add_months(to_date('15.01.2016','DD.MM.YYYY'), 1) ndt
FROM dual;

NDT               
-------------------
15/02/2016 00:00:00


SELECT add_months(to_date('15.01.2016','DD.MM.YYYY'), -1) ndt
FROM dual;

NDT               
-------------------
15/12/2015 00:00:00

SELECT add_months(to_date('15.01.2016','DD.MM.YYYY'), 4) ndt
FROM dual;

NDT               
-------------------
15/05/2016 00:00:00

Amacım bu fonksiyon kullanımını uzun uza diye anlatmak değil. Hedefim bu fonksiyonun eksepsiyonel bir davranışını göstererek farkındalığı arttırmak.
ADD_MONTHS fonksiyonu ile ayın son günleri üzerinde işlem yapmaya çalıştığımızda ADD_MONTHS beklediğiniz gibi çalışmayabiliyor. Bu durumu bir örnek ile açıklayacak olursak;

Bugün günlerden 30.11.2017 olsun ve ben ADD_MONTHS fonksiyonu ile tam 1 ay sonraya yani 30.12.2017 ye gitmek istiyim. En basit mantık ile parametre olarak tarih ile beraber 1 değerini verdiğimde 30.12.2017 tarihine gideceğimi düşünüyorum ve arka tarafta business’ımı buna göre düzenliyorum. Ancak kodu çalıştırdığımda doğru sonuçlar alamadığımı görüyorum. Sebebinin neden kaynaklandığını incelediğimde ADD_MONTHS fonskiyonunun beklendiğimden farklı çalıştığını görüyorum. Şimdi nasıl çalıştığına bakalım.

SELECT add_months(to_date('30.11.2017','DD.MM.YYYY'), 1) ndt
FROM dual;

NDT               
-------------------
31/12/2017 00:00:00

Evet gördüğümüz üzere fonksiyon beklediğimiz üzere ayın 30’una gideceğini beklerken ayın 31’ine gitti. Bunun nedenini araştırdığımda Oracle dokümantasyonunda; ay sonu tarihler ile çalıştığımızda fonksiyon sonucunda üretilen sonuçların yine ay sonu tarihler olacağı bilgisini gördüm. Bu duruma ek olarak eğer sonuçta dönecek ay, parametre olarak verilen tarihin ay parametresinden daha az gün içeriyorsa yine sonuç ilgili ayın son günü olarak gerçekleşecek.

SELECT add_months(to_date('30.01.2017','DD.MM.YYYY'), 1) ndt
FROM dual;

NDT               
-------------------
28/02/2017 00:00:00

Bu durumlardan hareketle ADD_MONTHS fonksiyonu ile ay sonuna denk gelen tarihler ile çalıştığımızda fonksiyonun bu şekilde davrandığını unutmamak gerekiyor. Aksi takdirde sebebinin neden kaynaklandığını anlayabilmek için saatler harcayacağınız problemleriniz oluşabilir.

Posted in Uncategorized | 1 Comment

TROUG Yazılım Geliştirme Özel İlgi Grubu Etkinliğinden Yansımalar

Herkse Selam,
trougTROUG Yazılım Geliştirme Özel İlgi Grubu (Developement SIG) 2016 etkinliği 23 Aralık 2016 Cuma günü İstanbul Bilginç IT Academy’de gerçekleşti. Birbirinden değerli konuşmacıların yaptığı sunumlara ilgi hava muhalefetine rağmen yeterli seviyedeydi. Teknik olarak oldukça doyurucu içeriklerin paylaşıldığı bu toplantının, sunucu ve dinleyiciler arasında interaktif paylaşımlarım yapılmasına olanak sağladığını söyleyebilirim. Bu bağlamda oldukça faydalı bir etkinlik geçirdiğimizi ifade edebilirim.

gaEtkinlikte gerçekleştirilen ilk sunum TROUG başkan yardımcısı ve Oracle ACE Director Gökhan ATIL tarafından “APEX: Build a Cloud Application in 45 Minutes” başlığı ile yapıldı. Gökhan Atıl’ın oldukça interaktif bir sunum ortaya  koyduğunu söyleyebilirim. Buna ek olarak sunumun hem Cloud hemde Apex konularını bir arada barındırması da sunumun ilgi seviyesini arttırdı.

Salonda  yapılan bir sonraki sunumu ben Useful Features of Oracle SQL Developerembaşlıklı sunum ile gerçekleştirdim. Oracle SQL Developer’ın ilgimi çeken ve yazılım geliştiricilerin işini kolaylaştırabilecek özellikleri demo yaparak dinleyicilere aktarmaya çalıştım. Umarım farkındalık anlamında faydalı bir sunum olmuştur. Bir kez daha gelip dinleyen herkese bu kanal aracılığı ile teşekkür ediyorum. Gerçekleştirdiğim sunuma linki takip ederek ulaşabilirsiniz.

oysEtkinlikteki bir sonraki sunumu, TROUG yönetim ekibinden ve Oracle ACE ünvanı sahibi Okcan Yasin Saygılı “Oracle Public Cloud for Devlelopers” başlıklı sunumu ile gerçekleştirdi. Yasin, dinleyicilere Oracle’ın Cloud mimarisi hakkında bilgiler vererek bu taraftaki farkındalığı arttırdığını söyleyebilirim. Yasin yaptığı sunum ile gelecekte bizi Cloud konusunda neler beklediği hakkında detaylı bilgiler verdi.

Salondaki bir sonraki sunumu, Qupass şirketinin kurucu ortaklarından ve etkinliğe okAnkara’dan katılan Ömer Karakaş “Geliştiriciler için Oracle veritabanı” başlıklı sunumu ile gerçekleştirdi. Ömer Karakaş’ın yaptığı sunum, veri tabanında geliştirilen uygulamaların performanslarını pozitif yönde etkileyecek örnekler barındırmaktaydı. SQL, PL/SQL ve metadata tarafında yapılan kullanım yanlışları üzerinden doğru kullanım şekillerini örnekler ile ortaya koyarak faydalı ve ilgi uyandırıcı bir sunum yaptı.

goEtkinlikteki bir sonraki sunumu TROUG Yönetim Kurulu Üyesi, BI/DW Özel İlgi Grubu Yöneticisi ve Oracle ACE Director Gürcan Orhan “How To Solve Complex Business Requirements with ODI” başlıklı sunumu ile gerçekleştirdi. Katılımcılar tarafından merak uyandıran ve ilgi odağı olan bir sunum olduğunu açıkça söyleyebilirim. Gürcan, kendine has üslubu ile karmaşık iş ihtiyaçlarını ODI ile nasıl yapılması gerektiğini çarpıcı örnekler ile ortaya koyarak dinleyicilerin konu hakkındaki farkındalığını arttırdı.

Günün son sunumu Gerger’den Serdar Gökçen “PL/SQL’in Versiyon Kontrolu” başlıklı sgsunumu ile gerçekleştirdi. Serdar, PL/SQL konusunda kurumsal dünyada yaşanan en büyük problemlerden biri olan yazılan kodların versiyonlanması ve versiyon kontrollerinin yapılması konusunda geliştirdikleri ürünü örnek bir demo uygulaması yaparak dinleyicilere aktardı. Aktif olarak PL/SQL tarafında yazılım geliştiren ve versiyonlama konusunda sorun yaşayan dinleyiciler tarafından oldukça ilgi gören bir sunum olduğunu söyleyebilirim.

Bu yılda çok güzel paylaşımların yapıldığı güzel bir Yazılım Geliştirme Özel İlgi Grubu etkinliğini geride bıraktık. Bu etkinliğin düzenlenmesinde emeği geçen tüm TROUG yönetim ekibine ve katılımcılara teşekkürler.

Posted in Oracle, Uncategorized | Tagged , , , , | Leave a comment

Oracle 12c Release 2 ile beraber SQL ve PL/SQL Tarafında Gelen Yenilikler

Herkese Selam,

imagesOracle veritabanı ürününün yeni mojor versiyonu olan “Oracle 12c Release 2″nin yeni özelliklerini hızla duyurmaya devam ediyor. Şuan Oracle 12c R2 sadece Oracle Cloud üzerinden denenip test edebiliyor ancak yakın zamanda kendi lokal makinelerimize indirilebilecek sürümleri paylaşılmaya başlanacak diye tahmin ediyorum. Bu ürün web üzerinden indirilebilir hale geldikten sonra gelen özellikleri deneyip test edip ayrıntılı bilgiler paylaşmayı da hedeflemekteyim. Bu yazı ile SQL ve PL/SQL tarafında gelen yeni ve sık kullanılan bazı özellikler hakkında kısaca bilgi verip gelen yeni özellikler hakkında kısa bir fikir vermek istiyorum.

LISTAGG: listagg fonksiyonu SQL  tarafında sık kullandığımız özelliklerden bir tanesiydi ancak listagg fonksiyonunun karakter limiti söz konusuydu. Birleştirilen string’in uzunluğu 4000 karakteri geçtiği noktada sorgu hata alıyor ve başarısız bir şekilde sonlanıyordu. Bu fonksiyon tarafında yapılan yenilikle bu durumun önüne geçecek önlemler alındı. Yazılım geliştiriciler artık karakter limitine ulaşma durumunu kontrol altına alıp duruma göre aksiyon tetikleyebilecek. Yeni gelen bu özellik sayesinde, bu listagg kullanımı daha esnek hale geliyor.

VALIDATE_CONVERSION: Bu fonksiyon Oracle 12c R2 ile beraber yeni geliyor. Bu fonksiyon parametre olarak bir değer ve bir veri tipi alıyor, daha sonra gönderdiğimiz verinin, gönderdiğimiz veri tipine dönüşüp dönüşemeyeceği test ediliyor ve geriye sonuç döndürülüyor. Eğer bu işlem başarılı olabiliyorsa geriye 1, olamıyorsa 0 döndürülüyor. Bu özellik sayesinde sık rastlanan veri tipi dönüşüm problemleri kontrol altına alınabilecek diye umuyorum.

APPROXIMATE QUERY PROCESSING: Approximate Query Processing Oracle 12c ile beraber hayatımıza girmişti. Oracle 12c R2 ile beraber sunulan fonksiyon ve özelliklerin sayısı arttırıldı. Bu alt yapı sayesinde çok uzun sürme ihtimali olan sorguları, normalden katlar mertebesinde hızlı ve doğru sonuca çok az bir hata payı ile ulaşmamızı sağlayacak bir mekanizma sunuluyor. Bu alt yapı hakkında kısaca fikir sahibi olamak için linki takip edebilirsiniz.

CAST FUNCTION: SQL tarafında CAST fonksiyonunun da da bir geliştirme söz konusu. Yeni gelen özellik ile beraber artık CAST operasyonunda oluşabilecek hatalar handle edilebiliyor ve kodumuzun hata alması alacağımız aksiyonlar sayesinde engellenebiliyor.

REAL- TIME & Statement-Level Refresh MATERIALIZED VIEWS (MV): MV’ler özellikle DWH sistemlerinde kullanılan ve genel performansı arttıran çok önemli bir alt yapı. MV’ler de yaşanan en büyük sorun içindeki verinin belirli periodlar ile refresh edilmesi gerekliliği idi. Ancak Oracle yeni sürüm ile beraber  gerçek zamanlı veya isteğe, duruma göre güncellenen (On Demand) MV’ler yapılabileceğini duyurdu. Bu özellik benim kullanım anlamında en merak ettiğim özelliklerden biri. Test etme imkanı bulduğun en yakın zamanda daha detaylı bilgi paylaşacağım.

PL/SQL Debugger: PL/SQL Debegugger tarafında da güzel yenilikler var. Artık bir session içerisinde yaptığımız debug işlemini farklı bir session tarafında’da kontrol (start-debug-stop) edilebilecek. Bu özellikle uzun süren operasyonların debug işlemleri çok daha kontrollü bir şekilde gerçekleşebilecek.

Bu özelliklerin dışında da bir çok yenilik mevcut Oracle 12c R2 ile beraber gelen. Ancak yazının başında da değindiğim gibi henüz indirilebilir ve kurulabilir versiyon Oracle tarafından yayınlanmadı. Yayınlandığı takdirde bu özellikler hakkında testler yapıp deneyimlerimi paylaşmayı hedefliyorum.

 

Posted in Oracle, Uncategorized | Tagged , , , , | Leave a comment

Query Builder ile Sorgu Görselleştirme/Geliştirme

Herkese Selam,

Bu yazıda Oracle SQL Developer’ın Query Builder özelliğinden kısaca bahsedeceğim umarım farkındalık anlamında faydalı bir yazı olur.

Yazılım geliştirdiğimiz araçların her geçen gün daha görsel ve kullanıcı dostu arayüze sahip olduğunu görüyoruz. Yazılım üreticilerin yaptığı bu kullanıcı dostu arayüzlerin yazılım geliştiricilerin hayatını her geçen gün daha da kolaylaştırdığına şahit oluyoruz. Geçmişte bir çok adımda yaptığımız geliştirmeleri artık çok basit sihirbazlar ile gerçekleyip uygulamalarımızı geliştirebiliyoruz. Oracle SQL Developer’da bu noktada DB üzerinde sorgu yazan geliştiricilerin hayatlarını bir miktar daha kolaylaştırmak adına Query Builder özelliğini ürün içerisine entegre etmiş durumda. Bu özellik ile sorgu yazmaya yeni başlayan veya SQL bilgisi çok iyi olmayan profesyoneller için daha kolay sorgu yazma ortamı sağlanırken, sorgu yazma konusunda profesyonel olan kullanıcılar içinse yazdıkları sorguları görselleştirme fırsatı sunulmakta.

Şimdi bu özelliğin nasıl kullanıldığını daha iyi kavrama adına iki tane örnek gerçekleyelim.

Sorgu: Employees tablosundaki maaşı (salary) 10000’den büyük olan çalışanların first_name, last_name, department_name ve çalıştıkları departmanın hangi ülkede olduğu bilgisini (country_name) gösteren sorguyu Query Builder ile yapalım.

İlk olarak Query Builder’ın nerede olduğunu aşağıdaki görselden görebilirsiniz.

builder

 

Query builder ı açtıktan sonra şimdi sorgumuzdaki kolonların tek tek hangi tablolardan geldiğini listeleyelim.

Employees : first_name, last_name

Departments: department_name

Countries: country_name

Şimdi bu tabloların hangi kolonlar ile bağlanacağı bilgisini söyleyelim.

Employees ve Departments tabloları department_id üzerinden joinlenerek first_name, last_name ve department_name kolonları elde edilecek.

Countries tablolosundaki country_name kolonuna ulaşabilmek için departments tablosundan doğrudan bir bağlantı ile countries tablosuna gidemiyoruz. Veri modeli gereği departments tablosundaki location_id kolonu ile  locations tablosuna gidip elde ettiğimiz country_id bilgisi ile countries tablosuna gidip buradan country_name kolonunu elde edeceğiz.

Kurallarımızı belirledikten sonra şimdi Query Builder ile sorgumuzu oluşturmaya başlayalım.

builder

Yukarıdaki görselde gösterilmiş 1 numaralı alanda bizim tablo listemiz bulunmakta. Görselde ki 2 numaralı alan ise sorgumuzu oluşturacağımız alan. İlk etapta sorgumuzda kullanacağımız employees, departments, countries ve locations tablolarını tek tek 1 numaralı alandan 2 numaralı alana sürükleyip bırakalım.

graf

Query Builder da gördüğümüz görsel yukarıdaki gibi olacak. Gördüğümüz üzere Oracle kolon adları aynı olan kolonları otomatik bağlayarak bize ekstra bir iş bırakmadı. Ancak bu bağlamada işimize yaramayacak 1 join işlemini daha gerçekledi. Görsel’de kırmızı ile işaretlemiş olduğum bağlantı bu sorgu için gereksiz bir bağlama alanı. Dolayısıyla bu bağlantıyı, bağlantı üzerine sağ tıklayarak açılacak seçenekler arasından Remove opsiyonuna tıklayarak kaldırınız.

Evet bu işlemide yaptıktan sonra geri kalan işlemlerimiz filtre ve ekranda gösterilecek alanları seçmek. Öncelikle kolonlarımızı aşağıdaki görselde gösterildiği gibi işaretleyerek işlemimizi tamamlayalım.

builder2

Evet kolonlarımızı seçtikçe aşağıdaki output penceresinde seçtiğimiz kolonların listelendiğini görüyoruz. Şimdi son işlemimiz olan filtre operasyonunu gerçekleyelim. Bunun için employees tablosundaki salary kolonunu öncelikle seçip output penceresine gelmesini sağlayalım, daha sonra output kolonundaki işaretçinin onayını kaldırarak ekranda görünmesini engelleyip, criteria kolonuna >10000 değerini yazalım ve yukarıdaki sorgu çalıştırma düğmesine basalım.

queryresult Evet gerekli işlemleri yaptıktan sonra Query Builder daki yapıyı Run düğmesi aracılıüı ile çalıştırdığımızda Query Result penceresinde sorgu sonucumuzu görmekteyiz. Şimdi Query Builder tabının hemen yanındaki worksheet tabını tıkladığımzda bu görsel sonucunda oluşturulan SQL’ide net bir şekilde görebilmekteyiz.

builder3

 

Görselden de anlaşılacağı üzere sorgumuzun başarılı bir şekilde SQL cümlesinin de paralelde oluştuğunu gözlemledik.

Bu işlemin tam tersi de başarılı bir şekilde çalışmakta. Yani önce sorguyu yazıp sonra Query Builder sekmesine tıklayarak yazdığımız sorguyu görselleştirebiliriz.

Sonuç olarak çok karmaşık sorguları oluşturma da ve görselleştirmede çok tercih edeceğiniz bir yöntem olmasa da. Basit ihtiyaçlarınız görmek için ve sorguları hızlıca görselleştirip, sorguların okunabilirliğini arttırma konusunda başarılı sonuçlar elde edilebilir.

Posted in Oracle, Uncategorized | Tagged , , , , , | Leave a comment

Oracle SQL Developer SQL Tuning Advisor

Herkese Selam,

Bu yazıda sizlerle Oracle SQL Developer’ın SQL Tuning Advisor özelliğinden bahsedeceğim. Umarım farkındalık anlamında faydalı bir yazı olur.

oraclesqldeveloperOracle son bir kaç yıldır SQL Developer ürünü üzerine oldukça fazla yatırım yapmakta ve bu ürünün kullanımını yayıngınlaştırmaya çalışmakta. Bu kapsamda ürüne çok sık güncellemeler ve yeni özellikler eklenmekte. Önceleri kullanıcıların çok tercih etmediği bir development aracı olarak hayatını devam ettiren Oracle SQL Developer, son zamanlarda eklenen yeni özellikleri ve kullanışlı arayüzü ile rakip ürünlere karşı atağa geçmiş ve kullanımını yaygınlaştırmaya başlamış durumda. Yapılan yatırımların yanı sıra bu ürün için herhangi bir lisans maliyetinin olmaması, geliştiricilerin bu ürünü tercih etme oranını oldukça arttıran etkenlerden. Oracle SQL Developer ürününü daha önceden denemedeiyseniz linki takip ederek indirip kolayca bilgisayarınıza kurabilirsiniz.

Ürün ile ilgili kısa bilgiler verdikten sonra, şimdi ürünün faydalı bulduğum SQL Tuning Advisor özelliğinden bir miktar bahsedeceğim.

SQL Tuning konusu Oracle veritabanı tarafında yazılım geliştiren büyük bir çoğunluk tarafından yeterince bilinmediğini düşündüğüm konuların başında geliyor. Veri tabanı üzerinde yazılım geliştiren hemen hemen herkes rahat bir şekilde SQL ve PL/SQL kodlayabilirken, konu yazılan uygulamanın performanslı çalışmasını sağlaması noktasına geldiğinde bir miktar sorunlar yaşandığını gözlemleyebiliyoruz. SQL Tuning konusunun öğrenme maliyeti, SQL ve PL/SQL öğrenmekten daha maliyetli olduğunu düşündüğümüzde bu durum çok normal gibi gözükmekte. Türkiye’deki temel pratiğin ne olduğuna gelirsek; genellikle yazılan sorgu ve uygulamaların performansları, yazılımı geliştirme esnasında göz ardı edilebilmekte ve gün sonunda problem DBA’ler tarafından tespit edilip gerekli yönlendirmeler yapılarak çözülmekte. Bu tarz problemlerin production ortamlarda tespit edilmesi yazılımın maliyetini ve servis kalitesini negatif olarak etkilediğini varsaydığımızda, bu problemin en etkili çözümünün yazılım geliştiricilerin SQL Tuning becerilerini arttırmaları gerektiğini net bir şekilde görüyoruz. Oracle SQL Developer’ın SQL Tuning Advisor özelliği, bu bilgi ve becerilerimizin artmasına katkı sağlayabilecek ve bu bilgimizin yetersiz kaldığı noktalarda bize fikir ve yardımcı olabilecek nitelikte olduğunu söylememiz çokta yanlış olmaz.

Şimdi SQL Tuning Advisor’ın nasıl kullanıldığına kısaca göz atalım.

Öncelikle SQL Tuning Advisor’ı kullanabilmemiz için veritabanına bağlandığımız kullanıcıya, DBA veya yetkili bir kullanıcı üzerinden aşağıdaki yetkiyi vermemiz gerekiyor.

GRANT ADMINISTER SQL TUNING SET TO HR;
GRANT ADVISOR TO HR;

Bu hakları verdikten sonra şimdi HR kullanıcısı ile veri tabanına bağlanıp ilgili özelliğimizi inceleyelim.

connect

Evet HR kullanıcısı ile veritabanına bağlandık şimdi örnek bir sorgu yazaıp Tuning Advisor özelliğine bakalım.

SELECT 
   E.EMPLOYEE_ID
   D.DEPARTMENT_NAME
FROM
   DEPARTMENTS D,
   EMPLOYEES E
WHERE
   D.DEPARTMENT_ID = E.DEPARTMENT_ID;

Evet sorgumuzu yazdıktan sonra şimdi SQL Tuning Advisor’ı çalıştırabiliriz. Bu özelliği çalıştırıp sonuçları görüntüleyebilmek için iki yöntemimiz var.

1- CTRL+F12

2- Toolbox’dan SQL Tuning Advisor düğmesine basmak.

tunningadvisor
Bu işlemleri yaptıktan sonra, Tuning Advisor’a verdiğimiz SQL’in karmaşıklığına göre işlem bir miktar sürüyor ve bu işlemin sonuçları ekranın altındaki SQL Tuning Advisor Bölümünde gösteriliyor.

advisorresult

Overview bölümünde sorgunun daha iyi çalışabilmesi için ilk etapta bulunan tüm bulgular kategoriye bakılmaksızın listelenmekte. Ancak bu bulgular 4 (Statistics, SQL Profile, Indexes, Restructure SQL)kategoriye de aynı zamanda ayrılmış durumda. İstenildiği takdirde bu kategorilere ayrı ayrı tıklanarak bulgular kategorik bir şekilde de listelenebilir.

Örneğin bu örnekte tablolarda ve tablo üzerindeki indexte istatistik eksikliği bildirilmiş. Sorgu ile ilgili bize, daha doğru execution plan bulunabilmesi için bu istatistiklerin toplanması gerektiği bilgisi verilmiş.

Her bir kategori için Details sekmesine geçtiğinizde elde edilen bulgular ile ilgili önemli detay bilgilerde verilmekte. Özellike SQL Profile kısmındaki detay kısmını incelemek sorgunuzun problemini anlamak ve performans problemini çözebilme adına size oldukça güzel fikirler verebilir.

sqlprofile

Yukarıdaki örneğimizde SQL Profile detayında, sistemin size önerdiği yöntemin, sizin yönteminize göre performans kazançlarını, plan farklarını ve bir çok bilgiyi karşılaştırmalı olarak verebilmekte. Bu bağlamda buradan faydalı bilgiler elde edip sorgu problemlerimizi daha net anlayabilmemize bu özellik olanak sağlamakta.

Eğer SQL Tuning konusunda pek fazla bilgimiz yok ise ve sorgularımızı iyileştirme konusunda fikre ihtiyacımız var ise Oracle SQL Developer’ın SQL Tuning Advisor’ını çalıştırıp elde edilen önerileri test edip sorgumuzu iyileştirmek için aksiyon alabiliriz. Ancak atlanmaması gereken detay şudur ki; sistemin size çıktı olarak verdiği sonuç bir öneri niteliğindedir. Bu tarz önerilerin yüzde yüz doğru ve performanslı çalışacağını garanti etmek oldukça zordur. Bu nedenle sorgularınızın problemlerini net olarak çözebilmek için mutlaka önerilen yöntemlerin doğruluğunu test edip ona göre aksiyon almalıyız.

Not:  Test işlemini Oracle SQL Developer 4.1.3  sürümü ile gerçekleştirdim.

Posted in Uncategorized | Tagged , , , , , | Leave a comment