Category Archives: MS SQL Server

SQL Server da Sistem Veri Tabanlarının Farklı Disklere Taşınması

Microsoft SQL server da veri tabanımızı taşımanın birçok yöntemi vardır. Bunlar yedek alma ve yedekten geri dönme, copy database, attach/deattach, veri tabanının scriptini alıp aktarma vb. yöntemlerdir.

Veri tabanlarımız diğer bir sql sunucuya ya da aynı sql sunucudaki farklı bir disk alanına bu yöntemler ile taşınabilir.

Sistem veri tabanları ise bu yöntemler ile taşınamaz. Bunun sebebi de çalıştıkları dizin yani lokasyon bilgisi yapılandırma ayarlarının içerisinde tutulur.

Model, tempdb ve msdb veri tabanı aynı yöntem ile taşınırken master veritabanı farklı bir yöntem ile taşınmaktadır. Taşınma işlemleri kesintisiz yapılamamaktadır. Bu yüzden taşıma işlemlerini gün içerisinde yapmamalısınız.

Model, tempdb ve msdb aynı yöntem ile taşındığından sadece MSDB nin taşınması uygulamasına değineceğim. Diğer ikisi içinde aynı işlemler aynı sıra ile uygulanabilir.

Veri tabanını taşımak için öncelikle aşağıdaki sorgu ile şimdiki yerini kontrol ediyoruz.

 

 

SQL Server 2016 AlwaysOn da Yük Dengeleme

SQL Server 2016 ile birlikte gelen yeniliklerden birisi de AlwaysOn yapısında yer alan ikincil replika sunucuları arasında için yük dengeleme özelliğidir. Bu özellik read-only modunda çalışan replika sunucuları arasında gelen isteklerin yük dağılımlı olarak yönlendirilmesini sağlar.

SQL Server 2012 ve 2014 de read-only yönlendirme trafiği yönlendirme listesindeki ilk uygun replika sunucusuna yönlendirilmekteydi. Eğer bu sunucuya erişilemez ise listedeki diğer sunucuya yönlendirilirdi. Eğer çok sayıda ikincil replika sunucunuz var ise okuma işlemlerini bu sunucular arasında yük dengeli olacak şekilde yönlendiremezsiniz.

SQL Server 2016 da sorgulamalar yük dengeli olarak sunuculara dağıtılabilmektedir.

Uygulanışı:

Yapılandırma için üç adet SQL Server 2016 sunucu kullanıyorum. Bu sunucular Windows Server 2016 üzerine kuruludur.

ORTACAG ismi ile açlışan bir AlwaysOn yapım mevcut. WINSRV01 primiary server, WINSRV02 ve 03 secondary server olarak görev yapmaktadır. Listener ismi olarak da “LST” yi kullanmaktayız.

 

SQL Server 2016 AlwaysOn Üç Nodlu Otomatik Failover

SQL Server 2012 ve 2014 sürümlerinde iki adet senkron çalışan ikincil (secondary) replika sunucusu oluşturulabilir. Bu sunuculardan bir adeti öncelikli (primary) replika sunucusu ile otomatik failover yapabilmektedir.

SQL Server 2016 AlwaysOn teknolojisinde yapılan geliştirme sayesinde öncelikli replika sunucusu ile artık iki adet ikincil replika sunucusu otomatik failover yapabilir. Yani önceki sürümlere göre bu sayı bir artmıştır.

 

Görüldüğü üzere otomatik failover yapabilen sunucu sayısı artık üçtür.

Aşağıdaki sorgu ile de sunucuların yapılandırılmasını ve durumunu görebiliriz.

select replica_server_name, availability_mode_desc,failover_mode_desc, database_id, synchronization_health_desc,synchronization_state_desc,* from sys.availability_replicas as AR inner join sys.dm_hadr_database_replica_states as DRS on DRS.replica_id = AR.replica_id

 

Birincil sunucu çalışmayı durduğunda otomatik failover konumundaki ikincil replika sunucusu devreye girecektir. Fakat artık iki adet otomatik failover konumunda ikincil sunucu var.

Hangi sunucunun birincil sunucu olarak çalışmaya devem edeceğine Windows Failover hizmeti karar verir.

AlwaysOn rolü üzerindeki ayarlarda tercih edilen sahiplik seçeneği mevcuttur.

Bu bölümde üç adet sunucu yer alır. İlk sıradaki birincil replika sunucumuzdur. Hemen altında yer alan ikinci sıradaki sunucu ise birincil sunucumuzun başına bir şey geldiği zaman ilk olarak devreye girecek olan sunucudur. Üçüncü sırada ise son ikincil replika sunucumuz vardır. Bu sunucu son olarak devreye girer yani ikinci sıradaki sunucuda çalışmaz hale gelir ise.

Bu yapılandırılma Windows Failover Cluster menüsü üzerinden değiştirilemez. AlwaysOn replika sunucularını kaldırıp tekrar ekleyerek sıra değiştirilebilir. Fakat bu yöntemde çalışan sistem için önerilmez.

SQL Server Sorguları İle Active Directory den Veri Çekme

Microsoft SQL Server’ın Linked Server özelliği ile Active Directory yapınıza bağlanabilir ve group, bilgisayar, kullanıcı gibi nesnelerin bilgilerini sorgular ile çekebilirsiniz.

Linked Server olarak active directory yapınıza bağlanmak için aşağıdaki sorguyu çalıştırın.

 

SQL Server Lock Aktivitelerinin Tespiti ve Analizi

SQL Server da tabloların kilitlenmesi yani lock konumuna geçmesi durumunda tablolar üzerinde işlem yapamaz hale gelirsiniz. Birçok sebepten olabilecek lock durumu sisteminizi sıkıntıya sokabilir.

Hangi veri tabanı içerisinde kilitlenme olmuş, kilitlenen tablo hangisidir ve hangi sorgu buna sebep olmuş gibi bilgiler sorunu çözmenizde faydalı olmaktadır. Bu bilgilere Management Studio içerisinden rahatlıkla ulaşabilirsiniz.

Öncelikle sorunu tespit edip analiz edebilmek için kilitlenmiş bir tabloya ihtiyacım var. Sadece test ortamında aşağıdaki sorguyu çalıştırıp veri tabanımız altındaki bir tabloyu kilitleyebilir ve belirtilen süre içerisinde de kilitli kalmasını sağlayabiliriz.

 

 

Workgroup Ortamında SQL Server 2016 AlwaysON Yapılandırılması

Windows Server 2016 ile gelen Workgroup ve Multi-Domain Cluster özelliği bir takım cluster uygulamalarında active directory bağımlılığını ortadan kaldırmakta ya da farklı domaindeki sunucuların birbirleri ile cluster olabilmesine olanak tanımaktadır.

Bu konu ile ilgili yapılandırma ayarlarını aşağıdaki bağlantıda bulabilirsiniz.

http://ortacdemirel.com/windows-server-2016-workgroup-ve-multi-domain-cluster/

Always On özelliği de bu yapı ile birlikte kullanılabilmektedir.

SQL Server 2016 ile gelen bu destek hali ile sadece Windows Server 2016 üzerinde kullanılabilmektedir. Bu yüzden yukardaki bağlantıda yer alan yapılandırmaları daha önceden yapmış olmanız gerekmektedir.

Windows Server 2016 sunucularını workgroup ortamında cluster çalışacak şekilde yapılandırdıktan sonra Always On kurulumuna geçebilirsiniz.

SQL Server 2016 sunucularımızda bu uygulamayı yapmak için sql hizmetlerini yerel hesaplar ile çalıştırabiliriz. Ayrıca SQL sunucularınız arasında 5022 portuna güvenlik duvarından izin vermeniz de gerekmektedir.

İlk olarak her iki sql sunucumda Configuration Manager ı açıp instance özelliklerine girip AlwaysOn Availability Groups u aktif hale getiriyorum.

SQL Server Katılımsız Kurulum

SQL server yazılımı kurulum aşamasındaki tüm seçeneklerin ayarlarını bir ini dosyası içerisine kaydeder. Bu dosyayı ileriki SQL server kurulumunda da kullanarak hızlı ve pratik bir kurulum yapabilirsiniz. Hatta başlangıç scripti haline getirip birçok alanda bu kurulum özelliğini kullanabilirsiniz.

Katılımsız kurulumu SQL 2008, 2012, 2014 ve 2016 sürümlerinde kullanabilirsiniz.

Öncelikle sunucu işletim sistemimde bir klasör açıp tüm SQL server medya içeriğini buraya kopyalıyorum. (Bu aşamayı yapmak zorunda değilsiniz. Medya içerisinden de kurulumu başlatabilirsiniz.)

 

Oracle Veri Tabanından MS SQL Server a Veri Aktarımı

 

Oracle veri tabanında yer alan verilerinizi MS SQL Server a aktarmak istiyorsanız eğer bunu birçok yöntem ve araç ile yapabilirsiniz. Bu araçlardan biride MS SQL Server Migration Assistant dır. Aracın nasıl kullanıldığını aşağıdaki makale de yer almaktadır.

http://ortacdemirel.com/oracle-veritabanindan-ms-sql-servera-gecis-migration/

Bu araç dışında SQL Server ile birlikte gelen “Import and Export Data” aracını da kullanabilirsiniz.

İki araç arasındaki temel fark migration assistant da ek bir yazılım yüklemenize gerek yoktur. Import and Export data aracında ise Oracle client yazılımı yüklenmelidir.

Bu makalemde Import ve Export Data aracının kullanımına değineceğim.

İlk olarak oracle ın sayfasından “Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64)” yazılımını çekiyorum. Ben 11g den veri aktaracağım için bu sürümü kullanıyorum. Yaklaşık 600 MB lık büyük bir dosyadır. İndirmek için üye olmanız gerekmektedir. Ücretsiz üye olaibilirsiniz.

Yazılımı MS SQL Server yüklü olan makineye kurmamız gerekmektedir çünkü veri aktarma aracı bu sunucumuzda yer almaktadır.

Setup.exe ile kurulumu başlatıyoruz.

 

 

SQL Server Temp DB Performans Testi

Microsoft SQL Server’daki en önemli sistem veri tabanlarından biri Temp DB veri tabanıdır. Bu geçici veri tabanı ya da tabanlarında geçici yapılan tablo değişiklileri, geçici tablolar ya da geçici nesne değişiklikleri tutulur.

MS’in önerisi Temp veri tabanı sayısı SQL Server’ınız kurduğunuz sunucudaki işlemci/çekirdek sayısına eş değer olsun. Örneğin on altı çekirdekli bir sunucuya MS SQL Server kuruyorsak eğer on altı adet temp DB yaratabiliriz.

Aşağıdaki sorgu da sys.dm_io_virtual_file_stats  dynamic management function (DMF) ini kullanarak yapınızda bulunan tüm Temp DB ler için ne kadar hızlı okuma ve yazma isteklerine cevap verdiklerine dair bir test yapmaktadır.

SELECT files.physical_name, files.name,

stats.num_of_writes, (1.0 * stats.io_stall_write_ms / stats.num_of_writes) AS avg_write_stall_ms,

stats.num_of_reads, (1.0 * stats.io_stall_read_ms / stats.num_of_reads) AS avg_read_stall_ms

FROM sys.dm_io_virtual_file_stats(2, NULL) as stats

INNER JOIN master.sys.master_files AS files

ON stats.database_id = files.database_id

 AND stats.file_id = files.file_id

WHERE files.type_desc = ‘ROWS’

 

Sorgunun sonunda performans ile ilgili değerlere ulaşabilirsiniz.

Burada görmeniz gereken iki şey vardır:

  • Yazma işlemleri veri dosyaları arasında eşit olarak dağıtılıyormu?
  • Yazma işlemi yirmi milisaniye ya da daha altında bir sürede tamamlanabiliyor mu ?

 

Temp DB ile ilgili aşağıdaki video Best Practice konusunda size yardımcı olacaktır.

Bu makaledeki script, video ve bir takım bilgiler www.brentozar.com sitesinden alınmıştır.