Kayıtlar

2013 tarihine ait yayınlar gösteriliyor

Oracle Linux Üzerine Oracle Database 11g Enterprise Edition Kurulumu

Resim
Bilgisayarımıza Oracle Linux'u : CD veya DVD'den boot edecek şekilde Talip hocamızın makalesinde anlattığı gibi:   http://taliphakanozturk.wordpress.com/2011/11/04/oracle-linux-6-1-kurulumu/ Virtualbox ile oluşturacağımız sanal makinamızın üzerine: http://melihsavdert.blogspot.com/2013/06/adm-adm-oracle-vm-virtualbox-uzerine.html CD veya DVD'den boot edecek şekilde kuracağımız linux işletim sistemi için diskleri kendimiz bölümleyebileceğimiz şekilde, disk partition ile: http://www.koraykey.com/?p=228 makalelerinde anlatıldığı üzere kurabiliriz. NOT: Virtualbox ile sanal makinemizi oluşturup; Oracle Linux işletim sistemi için gerekli konfigürasyonları yaptıktan sonra kuruluma geçtiğimizde, siyah ekranla karşılaşıp makaledeki resimlerde de görüldüğü gibi kurulum GUI ekranından değilde konsol ekranından devam ediyorsa; bilgisayarınız, oracle linux işletim sisteminin sistem gereksinimini karşılamıyor olabilir. Özellikle ram miktarı az olabilir. (Oracle Linux 6.1 i

PL/SQL'de DEĞİŞKEN TANIMLAMA, EKRANA YAZI YAZDIRMA ve GÜNCELLEME

PL/SQL yazı dizisinin 2. dersindeyiz. Bu dersimizde artık PL/SQL programları yazmaya başlayacağız. Bunun için  http://apex.oracle.com/i/index.html  sitesinde workspace'imizi oluşturup çalışmaya başlıyoruz. Workspace'imize giriş yaptıktan sonra karşımıza gelen seçeneklerden SQL Workshop'ı seçip daha sonra SQL Command'a tıklayıp PL/SQL programlarını bu ekranda çalıştırabiliriz. Örneğimize geçelim: PL/SQL'in en önemli yanlarından birisi SQL komutları ile entegreli olarak çalışabilmesidir. ODBS veya JDBS gibi aracı bir yazılıma ihtiyaç duymadan SQL ifadelerini PL/SQL programları içerisinde çalıştırabilirsiniz. Örneğin aşağıdaki kodlarda kullandığımız update ifadesi gibi. declare order_total INTEGER; begin   select sum(ORDER_TOTAL) into order_total from DEMO_ORDERS   where CUSTOMER_ID=3;   DBMS_OUTPUT.PUT_LINE ('3 numaralı müşterinin toplam siparişi: ' || order_total); end;   declare ile integer bir değişken tanımladıktan sonra CUSTOMER_ID'si 3

PL/SQL NEDİR?

Resim
Herkese merhabalar. Pl sql ile ilgili yeni bir yazı dizisine başlıyorum. İlk olarak pl sql nedir, ne değildir biraz tanımını yapalım. PL= Procedural Language  SQL= Structured Query Language Prosedürel Yapısal Sorgulama Dili Oracle şirketi tarafından SQL'in kısıtlamalarının üstesinden gelmek için oluşturulan Oracle sistemlerine özel bir dildir. Ama kesinlikle C, Visual Basic gibi bir programlama dili değil; sorgulama dilidir.  PL/SQL'in karasteristik özellikleri: PL/SQL prosedürel bir dildir. (if/else, for veya while gibi döngü veya kontrol mekanizmalarına izin verir. Sql ise izin vermez. Çok iyi derecede yapılandırılmış, okunabilir, erişilebilir bir dildir. Oracle geliştirme için standart ve taşınabilir bir dildir. Örneğin; kendi bilgisayarınızdaki Oracle database'de yazdığınız bir prosedür veya fonksiyonu ortak ağınızdaki başka bir database'e taşıyabilir, hiçbir değişiklik yapmadan çalıştırabilirsiniz.  PL/SQL programları genellikle veritaba

Grouping Sets Fonksiyonu

Resim
Sql Server 2008 ve sonrasında gelen sürümlerde karşımıza çıkan Grouping sets fonksiyonu ile aynı veriler üzerinde birden fazla gruplama işlemi yapabiliriz. Eskiden group by ve union all ifadeleriyle yapılan bu işlem grouping sets ile daha kolay ve anlaşılır hale gelmiştir. Örneğimizde de görüleceği üzere ilk önce CustomerId' ye göre gruplanır. 2. etapta sırası ile ilk önce Yıla göre sonrasında ProductId'ye göre gruplama yapılır: select CustomerID,ProductID,YEAR(OrderDate) as [Year],sum(Quantity) as [Quantities] from Orders o inner join [Order Details] od on o.OrderID=od.OrderID where CustomerID like 'A%' group by GROUPING SETS( (CustomerID,YEAR(OrderDate)), (CustomerID,ProductID)) Order by CustomerID Grouping sets içerisindeki parametrelere (CustomerID)' yi eklersek; yıla ve ProductID' ye göre grupladıktan sonra CustomerID için genel toplam verir. Parametrelere boş parantezi de eklersek ( ) , sorgu sonucundaki tüm alanları ( sum(Quantity) ) toplar,

Group By Rollup

Resim
Merhabalar, Group by rollup operatörü ile gruplama yaptığımız veriler üzerinde hem ara toplam hem de genel toplama erişebiliriz. Sorgumuzda where şartıyla belirtilen ülkelerde bulunan şehirlerdeki toplam müşteri sayısı görüntülenir. Ara toplam olarak her ülkeye ait müşteri sayısı toplanır. Genel toplamda ise bu ülkelerdeki tüm müşteriler toplanır. select Country,City,count(City) from Customers where Country in('Brazil','Venezuela','UK','Spain') group by rollup(Country,City) Sorgumuzun sonuç ekranı: Daha fazla örnek için:  http://blog.sqlauthority.com/2010/02/24/sql-server-introduction-to-rollup-clause/

Group By Cube

Resim
Herkese iyi günler Uzun bir aradan sonra yeniden bloguma sql ile ilgili öğrendiklerimi pekiştirmek için yazmaya devam ediyorum. Bilindiği üzere group by operatörü verileri gruplayıp özet halinde göstermek için kullanılır. Group by cube operatörü de aynı işi yapar fakat group by'dan tek farkı gruplanan verilerin toplamını extra bir satır ekleyerek göstermesi. Örnekle daha iyi anlaşılacağına göre hemen başlayalım. Bu örneğimizde northwind veritabanını kullandım. Şehir bilgisi Buenos Aires,London,Paris veya Sevilla'dan birine eşit olan şehirlerde bulunan toplam müşteri sayısını gösterir. select City as 'Şehir' ,Count(CustomerID) as 'Müşteri Sayısı' from Customers where City in('Buenos Aires','London','Paris','Sevilla') group by City select isnull(City,'Toplam Müşteri') as 'Şehir', Count(CustomerID) as 'Müşteri Sayısı' from Customers where City in('Buenos Aires','London','Paris'

Sql Server Database Engine Servisinin Konfigüre Edilmesi ve Yönetilmesi-4

4. Sql Server Sistem Veritabanları Sql Server çalışmasını ve devamlılığını sağlamak amacıyla kendine ait verileri tuttuğu veritabanlarıdır. a) Master Veritabanı Master veritabanında linked server'lar, kullanıcıların bilgileri, sistem stored procedure'leri, sistem fonksiyonları, veritabanları ve dosyalar hakkında bazı bilgiler tutulur.  Bu veritabanının zarar görmesi halinde sql server servisi çalışmaz. Bu veritabanının düzenli olarak ve yeni bir veritabanı oluşturulduktan sonra, veritabanının özelliklerini değiştirdikten sonra, kullanıcı oluşturduktan sonra yedeğinin alınması önerilir. b) Model Veritabanı Model veritabanı adı üzerinde yeni oluşturacağımız veritabanları için bir model niteliğindedir. Veritabanı oluşturulurken model veritabanının kopyası oluşturulur, sadece isim gibi özellikleri değiştirilir. Model veritabanında oluşturulan tablo, stored procedure veya fonksiyon bundan sonra oluşturulan bütün veritabanlarına otomatik olarak eklenir. c) MSDB Veritabanı

INTERSECT komutu

Intersect komutu 2 farklı sorgudan dönen ortak kayıtları listelemek için kullanılır. In ve Exists komutları ile de aynı sonuç elde edilebilir. Aslında inner join işlemlerinde de 2 sorgunun ortak olan kayıtları listelenir. Inner joinde yapmamız gereken tek işlem distinct komutunu sorgumuza eklemek. Aşağıdaki farklı komutlarla yazılan sorgularımızı çalıştırdığımızda hepsinden 238 adet kayıt döndüğünü görürüz. 1) Intersect ile: select ProductID from Production.Product intersect select ProductID from Production.WorkOrder 2) In ile: select ProductID from Production.Product where ProductID in(select ProductID from Production.WorkOrder) 3) Exists ile: select ProductID from Production.Product p where exists(select top 1 1 from Production.WorkOrder wo where p.ProductID=wo.ProductID) 4)Inner join ile: select distinct p.ProductID from Production.Product p inner join Production.WorkOrder wo on p.ProductID=wo.ProductID

EXCEPT Komutu

Aslında Not in veya Not exists komutları ile de aynı sonucu alacağımız bir komuttur Except. 2 farklı sorgudan dönen sonuç kümelerini karşılaştırarak sadece ilk belirtilen sorgu sonucunda olan fakat ikinci sorgu sonucunda olmayan kayıtları listeler. Bir örnek vermek istersek Product tablosunda olan fakat WorkOrder tablosunda olmayan kayıtları 3 farklı komutla listeleyebiliriz. 1) Except ile: select ProductID from Production.Product except select ProductID from Production.WorkOrder 2) Not in ile: select ProductID from Production.Product where ProductID not in(select ProductID from Production.WorkOrder) 3)Not exists ile: select ProductID from Production.Product p where not exists(select top 1 1 from Production.WorkOrder wo where p.ProductID=wo.ProductID)

UNPIVOT Table

Resim
Pivot table konumuzun devamı olan unpivot table işlemini incelemeye başlıyoruz. Eğer pivot table oluşturma, bu tabloları kullanma işlemi sık sık tekrarlanıyorsa performans sağlanması ve zaman kazandırması açısından pivot table işleminin sonucu başka bir tabloya yazılır, artık sorgulama bu tablo üzerinden yapılır. Bu gibi durumlarda bazen de pivot tablonun eski haline döndürülmesi istenebilir ve o zaman devreye unpivot table işlemi girer. Hemen örneğimize başlayalım. Pivot table konumuzdaki örnek sorgumuz üzerinden gideceğiz. Pivot table işleminin sonucunun tutulacağı tabloyu oluşturuyoruz: create table pivottable(Az int, Ca int, Tx int); Sorgu sonucunu tabloya yazıyoruz: insert into pivottable select * from ( select sp.StateProvinceCode from Person.Address a inner join Person.StateProvince sp on a.StateProvinceID=sp.StateProvinceID )k PIVOT ( count(StateProvinceCode) for StateProvinceCode IN([AZ],[CA],[TX]) ) AS pvt select * from pivottable Şimdi unpivot işlemin

PIVOT Tablo

Resim
Group by ifadesi ile verilerimiz satır bazında gruplanır, bi'nevi özetlenir. Bazı durumlarda bu satır bilgilerinin sütuna dönüştürülmesi gerekebilir. Bu işlem için sorgu sonucunda dönen kayıt setinin satırlarını sütuna çevirme tekniğine pivot tablo denmektedir. Örneğin aşağıdaki sorguda eyalete göre gruplama yapıp AZ,CA,TX kodlu eyaletlerde bulunan personel sayısının görüntüledik.  (veritabanı adventureworks) select sp.StateProvinceCode,count(sp.StateProvinceCode) Adet from Person.Address a inner join Person.StateProvince sp on a.StateProvinceID=sp.StateProvinceID where sp.StateProvinceCode in ('AZ','CA','TX') group by sp.StateProvinceCode Sorgumuzu pivot tabloya çevirme işleminde ise öncelikle gruplama ifadelerini sorgumuzdan çıkartıp, sorgumuzu bir altsorgu haline getiririz. select * from ( select sp.StateProvinceCode from Person.Address a inner join Person.StateProvince sp on a.StateProvinceID=sp.StateProvinceID )k Daha sonrasında yuka

Table Sample Komutu

Table sample rasgele sayıda kayıt elde etmemizi sağlayan komuttur. Direkt olarak Sql Server'ın verilerinin tutulduğu page'lerden okuma yapar ve ne kadar sayfa okunacağı parametrede belirtilir. percent ve rows olmak üzere 2 adet parametremiz vardır. (veritabanı olarak AdventureWorks'ü kullanıyorum.) 1) select * from Sales.SalesOrderDetail; 2) select * from Sales.SalesOrderDetail TABLESAMPLE(10 percent); 3) select * from Sales.SalesOrderDetail TABLESAMPLE(1000 rows); Percent, sonuç setindeki kayıtların yüzde kaçının okunacağını belirtir. Örneğin tablomuzda 120 bin civarı kayıt vardır ve yukarıdaki 2. sorgu her çalıştırıldığında 12 bin, 13 bin civarı farklı sayıda kayıt döner. 3. sorgudaki 1000 rows ifadesiyle  her çalıştırıldığında 1000 kayıt döneceği kesin değildir. (rows değeri ne kadar az olursa o kadar az kayıt döner.) 3. sorgu 4 defa çalıştırıldığında dönen kayıt sayıları: Çalışma Dönen kayıt 1 809 2 812 3 1183

Sql Server Database Engine Servisinin Konfigüre Edilmesi ve Yönetilmesi-3

3. Startup (Başlangıç) Procedure'leri Bu özellik sayesinde Sql server servisi her başladığında çalışan bir stored procedure tanımlayabiliriz. Sysadmin rolüne sahip olmamız gerekir. Startup stored procedure'leri kullanabilmek için aktif edilmesi gerekir. Aktif edilmeden önce aşağıdaki sorguyla şu anki durumu kontrol edilir: select name, value, value_in_use from sys.configurations where name like 'scan for startup procs'; Aktifleştirmek için aşağıdaki sorgu yazılır: sp_configure 'scan for startup procs',1 reconfigure go sp_configure 'show advanced options',1 reconfigure Daha sonrasında server restart edilmelidir. Bir startup procedure örneği vermek istersek: --başlangıçta çalışacak (yani server her restart edildiğinde) stored procedure örneği: --kayıtları tutmak için tablo: create table master.dbo.SqlRestartLog ( id int identity(1,1), StartTime datetime ) create proc dbo.sp_InsertToSqlRestartLog as insert into master.dbo.SqlRestar

Sql Server Database Engine Servisinin Konfigüre Edilmesi ve Yönetilmesi-2

Resim
Sql Server Configuration Manager aracının diğer önemli bir tabı ise Sql Server Network Configuration altında bulunan Server ve Client arasında iletişim kurarken kullanılacak olan protokollerle ilgili işlemleri yapabileceğimiz Protocols seçeneğidir. Client ile Server arasındaki iletişim şu şekilde gerçekleşir: Client uygulama Sql Server'a bağlantı kurmak için driver'a istek yollar. Driver uygun protokolü belirlemesi için NetLibs'i çağırır. Netlibs en uygun protokolü seçerek Sql Server'a gönderir. Sql Server tarafındaki netlibs ise Clienttan gelen isteği alarak Sql Server'a iletir. Sql Server, Client ile haberleşmek için aşağıdaki protokolleri kullanır: Shared Memory Named pipes TCP/IP VIA ( Netlibs: Protokollerin tamamını kapsayan kütüphane ) 2.DAC (Dedicated Administrator Connection) Aracı Sql Server instance'ına erişilemediğinde ( genellikle sistem kaynaklarını gereksiz yere tüketen işlemlerden dolayı ) bağlantı kurabilmek için Sql Server 2

Sql Server Database Engine Servisinin Konfigüre Edilmesi ve Yönetilmesi-1

Resim
Sql Server 2012'nin kurulumu ile alakalı kısımları geçip direkt olarak database engine'in yönetiminden bahsetmek istiyorum. (İstenirse kurulum da anlatılabilir.) Microsoft güvenlik sebebiyle Sql Server'ın birçok özelliğini varsayılan olarak pasif yapmıştır. Sql Server'ın kurulumu tamamlandıktan sonra yapmamız gereken şey instance'ımızı gereksinimlerimize göre konfigüre etmektir. Bu işlemleri yapmak için çeşitli araçlar ve Sql Server içinde bulunan bazı stored procedure'ler kullanılmaktadır. Bu yazı ve ilerleyen yazılarda bahsedilen işlemler anlatılacaktır. 1. Sql Server Configuration Manager Aracı Başlat-> Programlar-> Sql Server klasörü altında bulunur aracımız. Sql Server Services seçeneğini seçerek makinemizde kurulu tüm instance'lara ait servisleri görebiliriz. Servislerle ilgili herhangi bir işlem yapmak için servis üzerinde sağ tuşla özelliklerine ulaşırız. Açılan menü aşağıdaki gibidir: Log on tabında  (servisi çalıştı