Category Archives: MS SQL Server

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.

https://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.

https://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.

 

 

 

SQL Server 2016 CTP 2.0 Kurulumu

Microsoft, SQL Server ın yeni sürümü olacak SQL Server 2016’nın CTP 2.0 deneme sürümünü yayınladı. CTP yani “Community Technology Preview 2” olarak geçen bu sürüm SQL Server 2016 ile yeni gelecek özellikleri test etmeniz için yayınlanan bir sürümdür. Üretim ortamında kullanılmamalıdır.

Aşağıdaki bağlantıdan bu sürümü indirebilirsiniz:

www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016

Bu yazımda MS SQL Server 2016 CTP 2.0 sürümünün kurulumuna ve bir takım yeni gelen özelliklere değineceğim. Kurulum adımları CTP sürümünden sonra değişebilir. Bunu göz ardı etmeyiniz.

SQL Server 2016 CTP 2.0 sürümünün kurulumu ürün anahtarı ve kurulacak sürümün seçilmesi ile başlıyor. Ürün piyasaya daha çıkmadığından dolayı ürün anahtarı giremiyoruz.

SQL Server Database Mirroring Failover ve Failback Senaryoları

SQL Server üzerinde Database Mirroring yapılandırmasına daha önceki makalemde değinmiştim.

http://www.ortacdemirel.com/sql-server-database-mirroring-yapilandirilmasi

Database Mirroring kurulumu ve yapılandırılması bittikten sonra sıra geldi sunucular için Failover ve Failback testlerini yapmaya. Bu testlerde principal ve mirror sunucular arasında geçiş, principal sunucu kaybedildiğinde mirror sunucu üzerinden veri tabanına erişme ve son olarak principal tekrar ayağa kalktığında database mirroring i eski haline getirme işlemlerine değineceğim.

Yapımızda iki adet sql sunucu bulunmaktadır. SQLServer1 principal sunucu iken SQLServer2 mirror sunucudur.

SQLServer1 üzerinden veri tabanımıza erişebilmekteyiz. Veri tabanımızın yanında Principal,Synchronized yazmaktadır.

 

SQLServer2 üzerinden veri tabanımıza erişemiyoruz. Veri tabanımızın yanında Mirror,synchronized,restoring yazmaktadır.

 

SQL Server Database Mirroring Yapılandırılması

SQL Server da  yüksel erişebilirlik ( High Availability) teknolojilerinden biri olan Database Mirroring veri tabanı seviyesinde yapılan bir uygulamadır.

Bu uygulama sayesinde veri tabanlarımızı yapımızdaki ikinci bir SQL server üzerinde barındırabilir, veritabanı değişikliklerin  sürekli olarak diğer sunucu üzerine replike edilmesini sağlayabilir ve asıl sunucumuzda bir problem çıktığında farklı SQL server dan veri tabanımıza erişmemiz sağlanabilir.

Database Mirroring uygulamasında asıl sunucuya Principal server denir. Principal server ın veri tabanını yedeklediği karşı sunucuya ise Mirror server denmektedir.

Database Mirroring özelliğini kullanmadan önce yapınızda yer alan SQL server lar da bir takım ön gereksinimleri tamamlamanız gerekmektedir. Bunlar:

  • Database Mirroring yapılandırılması yapacak kullanıcı domain ve sql server seviyesinde yönetici olmalıdır.
  • Principal ve Mirror sunucular mutlaka domainde yer almalıdırlar.
  • Her iki sunucuda da sql servis hesapları domain hesaplarına atanmalıdırlar. Aynı hesapları kullanabilirsiniz.
  • İki sunucuda da aynı sürüm SQL server yüklü olmalıdır.
  • İki sunucu arasında 5022 portunu ve sql server ın kullandığı standart portları

 

SQL Server’da Yetkisiz Kullanıcılardan Tablo İsimlerini Gizlemek

SQL Server’da yetkisi olmayan kullanıcılardan veri tabanı isimlerini gizlediğimiz gibi tablo isimlerini de gizleyebiliriz. Böylelikle sql server a oturum açan kullanıcılar sadece yetkili oldukları tabloları görebilirler.

Tablo isimlerini gizlemek için öncelikle kullanıcımızı veri tabanımıza ekliyoruz ve db_owner dışında okuma yazma gibi yetkiler veriyoruz.

 

Ardından görmesini istemediğimiz tablonun üzerine sağ tıklayarak özelliklerine giriyoruz.

 

“Permissions” bölümünden kullanıcımızı seçip “View Definition” iznine “Deny” yani yasaklamak yetkisi veriyoruz.

 

Bu aşamadan sonra sql server a oturum açan kullanıcımız sadece yetkili olduğu tabloları görecektir.

Veritabanını Restoring State’den Çıkarma

SQL server da veri tabanı çeşitli sebeplerden dolayı “restoring state” e geçebilir.

Bu durumlar; yedekten geri dönmek istediğimizde “back up the tail log, and leave database in the restoring state” seçeneği ile log yedeği almış olabiliriz, farklı sunucular arasında veri aktarması yaparken hedef sunucudaki veri tabanı restoring state durumunda kalmış olabilir ya da mirroring gibi uygulamalarda veri tabanımız gene bu konumda kalmış olabilir.

Restoring state duruma geçen veri tabanı yukarda örneğini vermiş olduğum durumlar tamamlana kadar konumunu korur. Örneğin yedekten dönme işlemi tamamlanınca eski haline gelir.

Bazı durumlarda veri tabanı restoring state konumundan çıkamaz.

Bu tür durumlarda aşağıdaki sorguyu çalıştırmamız veri tabanının eski haline gelmesini sağlayabilir.

RESTORE DATABASE <veri tabanı ismi>

WITH RECOVERY

Veri tabanımız eski haline gelecektir.

Microsoft SQL Server’da Yetkisiz Kullanıcılardan Veritabanı İsimlerini Gizlemek

Microsoft SQL Server’da varsayılan olarak izinler iki bölümden oluşmaktadır. Oturum açma izni ve veritabanı izinleri. Oturum izinlerinde kullanıcı MS SQL Server yönetim aracı ile oturum açar fakat bir veri tabanında işlem yapamaz. Veri tabanı izinleri ile de oturum açan kullanıcılara yönetecekleri veritabanları için okuma, yazma, sahiplik gibi birçok yetki verilir.

Kullanıcıya oturum açma izni ve yöneteceği veritabanı için izin verildiğinde kullanıcı izni olmayan veritabanlarını da görür. Bu veritabanların da herhangi bir işlem yapamaz fakat gene de isimlerini görebilir.

Kullanıcıların yetkisiz oldukları veritabanlarının isimlerini görmelerini engellemek istiyorsanız aşağıdaki metotları uygulayabilirsiniz.

Birinci metot:

Kullanıcımızı sunucu güvenliği bölümünden ekliyoruz.