Aylar: Şubat 2018

The WSFC cluster could not bring the Network Name resource with DNS name ” online. The DNS name may have been taken or have a conflict with existing name services, or the WSFC cluster service may not be running or may be inaccessible. Use a different DNS name to resolve name conflicts, or check the WSFC cluster log for more information. The attempt to create the network name and IP address for the listener failed. The WSFC service may not be running or may be inaccessible in its current state, or the values provided for the network name and IP address may be incorrect. Check the state of the WSFC cluster and validate the network name and IP address with the network administrator. (Microsoft SQL Server, Error: 19471)

The WSFC cluster could not bring the Network Name resource with DNS name ” online. The DNS name may have been taken or have a conflict with existing name services, or the WSFC cluster service may not be running or may be inaccessible. Use a different DNS name to resolve name conflicts, or check the WSFC cluster log for more information. The attempt to create the network name and IP address for the listener failed. The WSFC service may not be running or may be inaccessible in its current state, or the values provided for the network name and IP address may be incorrect. Check the state of the WSFC cluster and validate the network name and IP address with the network administrator. (Microsoft SQL Server, Error: 19471)

Cluster kurdunuz Availability group için gerekli konfigurasyonları da yaptınız fakat listener kurarken yukarıdaki gibi hata alıyorsanız bunun sebebi Active Directory de  bulunduğunuz ou(Organizational Unit) da create computer da full control yetkisi  olmadığından dolayıdır.Yetki tanımlandıktan sonra Availability group için listener oluşturabilirsiniz.

Rename failed for Database

Rename failed for Database

Bazı durumlarda veritabanlarının ismini değiştirmemiz gerekebilir fakat açık kalan sessionlar buna izin vermeyebilir. Rename yapabilmemiz için iki yöntem bulunmaktadır. Bunlardan birisi aşağıdaki gibi veritabanında açık kalan sessionları kapatıp rename yapmaktır.

Aşağıda yapılacak işlemler stand-alone veritabanları için geçerlidir eğer  Availability group mimarisini kullanıyorsanız  Availability groupdan çıkarılıp aşağıdaki işlemleri yapabilirsiniz.

 

sp_who komutunu çalıştırdığınızda aşağıda ki gibi veritabanı ismi ve ona ait spid değerleri gözükmektedir.

Slepping modda kalan sessionları kill komutu ile aşağıdaki gibi  sonlandırarak  veritabanın ismini değiştirebilirsiniz.

İkinci yöntem olarak  veritabanını  single_user moda çekerek ismini değiştirebiliriz fakat single_user  moda çekildiğinde veritabanı  farklı kullanıcılar tarafından erişilemez durumda olacaktır.

SQL Express Edition Backup Alert

SQL Express Edition Backup Alert

SQL Express Edition  kısıtlı bir sürüm olduğu için  Job, mail gibi yan araçları kullanamıyoruz fakat  powershell ve Task Scheduler(Görev Zamanlayıcısı)  gibi  Windows ile gelen  araçlar  ile bunları yapmamız mümkün.SQL Express Edition sürümünde backup jobımızı oluşturmuştuk. SQL Express Edition Backup Job isminde ki makalemde bulabilirsiniz.

Bu makale de alınan backupları belli aralıklarla kontrol ederek en son ne zaman backup alındığını bize mail ile bildirmesi için gerekli ayarlamaları yapacağız.

İlk olarak backupları kontrol etmek için aşağıda ki procedure oluşturmamız gerekiyor.

Yukarıda ki scripti çalıştırdıktan sonra dbo.Backup_kontrol procedure’ü oluşmuş mu kontrol edelim.

 

Görüldüğü gibi Master veritabanının altında ki Programmability’nin altında Stored Procedures sekmesinin altında Dbo.Backup_kontrol procedure’nü gördükten sonra kullanıcı oluşturmamız gerekiyor.

Backup_kontrolUser Adında kullanıcı oluşturduk ve bu kullanıcıya User Mapping den sadece master veritabanın da public yetkisi veriyoruz sonradan oluşturduğumuz procedure üstünde execute yetkisi vereceğiz.Bu pencere de tamam dedikten sonra  oluşturduğumuz procedure’e gelip  sağ tuş yapıp Properties’i açıyor ve Permissions sekmesinden  kullanıcıya execute yetkisi veriyoruz.

Kullanıcıya execute yetkisi verdikten sonra aşağıda ki powershell scriptinde belirtilen yerleri kendinize uyarlamanız gerekiyor.

Bu işlem bittikten sonra procedure den çıkan sonucu yazdırmak için aşağıda ki gibi içi boş notepad oluşturuyoruz.

Backup.txt oluşturulduktan sonra aşağıda ki powershell scriptin de bulunan kırmızı ile işaretlenmiş yerleri kendimize göre düzenledikten sonra .ps1 uzantısında aynı yere kaydediyoruz.

 

Powershell uzantılı dosyamızı  belli aralıklarla  çalıştırabilmemiz için .bat uzantılı dosya hazırlamamız gerekiyor.Bunun için notepad’i açıyoruz ve aşağıda ki scripti yapıştırıp .bat uzantısında kaydediyoruz.

Windows ile beraber gelen Görev Zamanlayıcısını açıyoruz ve Görev oluştur diyoruz .

Ad bölümüne  Görevimizin ismini yazıyoruz ve Kullanıcı oturum açmışsa da açmamışsa da çalıştır seçeneğini seçerek devam ediyoruz.

Tetikleyiciler kısmına geliyoruz ve ben Günlük 08:50 de gönderecek şekilde ayarlamaları yaptım siz farklı tarih ve saat  yapabilirsiniz.

Eylemler kısmında   sol alt köşe de bulunan Yeni butonuna tıklıyoruz ve .bat uzantısında oluşturduğumuz dosyayı seçip tamam diyerek  görev yöneticisinde ki işlemlerimizi bitirmiş oluyoruz.

Yaptığımız çalışmayı doğru yaptığımızı kontrol etmek için oluşturduğumuz görevin üstünde sağ tıklayarak,çalıştır diyoruz ve mail hesabımızı kontrol ediyoruz.

En son ne zaman backup alındığı artık mail olarak gelecektir.

SQL Express Edition Backup Job

SQL Express Edition Backup Job

SQL Server Express Edition da Agent olmadığından dolayı job, alert, mail gibi araçları kullanamıyoruz. Bu özellikleri kullanabilmemiz için SQL Server Express Edition  dışında ki Editionları kullanmamız gerekmektedir ya da Powershell, .bat uzantılı dosyalar gibi araçları kullanarak Windows üzerinden Job,alert veya mail gibi olayları yapmamız gerekmektedir. Bu makale de .bat uzantılı dosya  ve Task Scheduler  yardımı ile   SQL Express sürümünde Job tanımlayacağız.

Backup Job’ı tanımlamak için ilk başta procedure oluşturacağız.

 

 

Yukarıdaki scripti çalıştırdıktan sonra backup procedürümüzü oluşturduk ve Master\Programmability\Stored Procedures sekmesinin altında prosedürü gördükten sonra SQL Server Management Studio üzerinden bazı konfigürasyonları yapıyoruz ve ”.Bat” uzantılı dosya hazırlayıp bunu belli aralıklarla çalıştırmak için Windows ile beraber gelen Task Scheduler(görev zamanlayıcısı) kullanmamız gerekiyor.

Başlamadan önce SQL üzerinden procedure çalıştıracağımız için aşağıda ki konfigürasyonları yapmamız gerekir.

Yeni not defteri açarak aşağıda ki scripti yazıyoruz.

Yukarıdaki sekme de Tetikleyiciler kısmına geliyoruz ve hangi aralıklarla çalışacağını belirtiyoruz.Burada istediğiniz zamanlarla başlatabilirsiniz ben her gün 10:09 başlayacak şekilde ayarlama yapıyorum.

Eylem kısmına gelerek oluşturduğumuz “.bat” uzantılı dosyayı burada belirtiyoruz.

Bu işlem tamamladıktan sonra tamam diyerek çıkıyoruz ve görev tanımlamamız bitmiş oluyor.

İşlemler bittikten sonra Backup görevimiz oluşturulmuş mu kontrol edelim. Görev Zamanlayıcı Kitaplığını tıklıyoruz ve görevimiz oluşturulmuş. Sağlıklı şekilde çalışıp çalışmadığını kontrol etmek için el ile başlatalım.

Çalıştırdıktan sonra procedürün içinde belirttiğimiz path’e  backup alınmış mı kontrol edelim.

Yukarı da görüldüğü üzere SQLEXPRESS instancen da bulunan veritabanlarının hepsinin Backup’ı alınmış.

Bazen iş yoğunluğundan dolayı backupları kontrol edemiyoruz.Sonra ki makalem de SQL Express Edition da en son ne zaman backup alındığını mail atması için gerekli ayarlamaları yapıyoruz.

MULTI-SERVER JOBS

SQL Server da, backup ve bakım işlemleri gibi ihtiyaçlardan dolayı job tanımlarız ve  tanımladığımız job’ları her instance’da teker teker oluşturmamız gerekir. Multi Server Jobs sayesinde tek instance üzerinden diğer instance’lara tek seferde job tanımlayabiliriz. Birden fazla instance kullananların çok seveceği bir yöntem olacağına eminim.

Multi Server Jobs, bir instance üzerinden diğer instancelarda job çalıştıracak şekilde konfigürasyonlar yapmamızı sağlıyor. Bu makale de bunun nasıl yapılacağını anlatacağım.

Master olarak kullanacağımız instance  üzerinde SQL Server Agent üzerinde sağ tıklayarak Multi Server Administration sekmesinden Make this a Master’a tıkılıyoruz.

 

Aşağıda resimde açılan pencere de Next diyerek ilerliyoruz.

Sonra ki sekme de ise sorun halinde operatörün mail gönderilecek hesabı girmemiz isteniyor.

 

 

İlk başta Master olarak seçtiğimiz instance üzerinden job’ı çalıştırmak istediğimiz sunucuları seçiyoruz. Çok fazla sunucu varsa bu sunucuları yönetmek için Registered Server kullanmanızı öneririm.

Fakat bu sekme de Registered Servers’ı kullanmadıysanız ikinci instance  Local Server Groups sekmesinin altında olmayabilir.

Sol alt köşede bulunan Add Connection’ı tıklayarak ikinci instance’ı  seçerek devam edebiliriz. İki den fazla instance da Multi Server Job’ ı denemek isteyenler eklemek istedikleri instance’ları seçerek devam edebilir.

Instance’ı ekledikten sonra Next diyerek diğer sekmeye geçiyoruz.

 

Instance uyumluluğu sağlandıktan sonra close diyerek yeni sekmeye geçiyoruz.

Bu sekme de yukarıdaki tiki seçtikten sonra next diyerek ilerliyoruz.

Finish dedikten sonra aşağıdaki gibi kontrolleri gerçekleştirir ve herhangi bir problem yoksa işlem başarılı şekilde tamamlanmış olacaktır.

İlk kez kurulum yapıyorsanız Enlist tabına geldiğinizde aşağıda ki gibi hata alabilirsiniz.

Bu hatanın sebebi iki sunucu arasında ki kanalın şifreleme sertifikasından dolayıdır.

Çalıştır penceresine ” Regedit ” yazıp OK dedikten sonra aşağıda ki adımları izleriz.

“\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<Eklenmek_istenen_instance_adı>\SQLServerAgent\MsxEncryptChannelOptions”

Yukarıda ki gibi ayarladıktan sonra Tamam diyerek kapatıyoruz ve tekrar kurulum işlemlerini tekrarlamamız gerekiyor. Registry’de yapılan değişiklikler sistemde öngörülemeyen hatalara sebep olabilir. Bu yüzden registry’de değişiklik yapmadan önce sunucunuzun bir snapshot’ını almanızı, böyle bir imkanınız yoksa da sistemde değerli olabilecek tüm verinizin backup’ını almanızı öneririm.

SSMS üzerinde ki SQL Server Agent (MSX) yazıyorsa kurulumunuz başarıyla gerçekleşmiş demektir. Jobs sekmesinin altında bulunan Multi-Server Jobs sekmesinde job tanımlayarak belirttiğiniz instance’lar da çalıştırabilirsiniz.

Disklerdeki Boş Alanların Veritabanı Yöneticilerine Mail ile Bildirilmesi

Disklerdeki Boş Alanların Veritabanı Yöneticilerine Mail ile Bildirilmesi

SQL Server’da karşılaştığımız bazı sorunları Powershell yardımı ile çözebiliriz. İş yoğunluğunda dolayı bazen diskler’de ne kadar boş alan kaldığını kontrol edemeyebilirsiniz. Bazen uygulamacıların veritabanında yaptığı habersiz çalışmadan dolayı veritabanı beklenmedik şekilde büyüyerek diskleri doldurabilir veya veritabanı log dosyasının backup’ı alınmadıysa bu log dosyası aşırı büyüyerek bulunduğu diski doldurabilir. Bu tip beklenmedik durumlarla başa çıkabilmek için disk dolmadan haberimiz olması gerekir. Bu makalede disklerdeki boş alan miktarını kontrol ederek veritabanı yöneticilerine mail ile rapor yollayacak powershell script’ini aşağıda bulabilirsiniz.

İlk adım olarak belirlediğimiz disk de yeni bir klasör oluşturup, oluşturduğumuz path’i aşağıda ki kod bloğunda ki reportpath ve aşağıda yer alan body kısmında belirtmemiz gerekiyor. Aşağıdaki örnekte C diski altında Scripts isminde bir klasör oluşturduk.

Yukarıda ki işlem Disklerin Free Space raporunu htm uzantılı raporu kaydetmesi için gereklidir. Mail gönderebilmemiz için smpt, from,mail kısımlarını doldurmamız gerekmektedir. Aşağıda kırmızı ile yazılı alanlara dikkat ederek doldurabilirsiniz.

 

Yukarıda ki bilgiler girildikten sonra aşağıda seçili olan yere disk de belirlediğimiz yüzdenin altında boş alan kaldığında bize mail atması için gerekli yeri doldurmamız gerekmektedir. aşağıdaki örnekte 0.2 %20 anlamına gelmektedir.

 

Buraya kadar ki işlemler bittiğinde dosyayı kaydediyoruz. Karışık olmasını engellemek amaçlı başta oluşturduğunuz klasöre kaydedebilirsiniz. Uzantısının “.ps1 ” olmasına dikkat ediniz.

Yazdığımız powershell scriptini SQL Server Job haline getirerek belirli aralıklarla çalışmasını sağlayabilirsiniz.

Eğer SQL Server’ın Express Edition’ını kullanıyorsanız job tanımlayamacağınız için Windows’un kendi aracı olan Task Scheduler(Görev Zamanlayıcısı)’ni kullanmamız gerekmektedir. Powershell dosyamızı Task Scheduler’a tanımlamak için yeni not defteri açarak aşağıda ki komutu yazarak “diskfreesize.bat” şeklinde kaydetmeniz gerekmektedir.

Bu işlemler sonrasında simgeler ve type kısmında yazanlar sizin klasörünüz de de aynı ise doğru yoldasınız 🙂

 

Task Scheduler toolunu Başlangıç menüsünden açtığımızda  Task Scheduler Library üstünde sağ click  yapıp Create Task sekmesine tıklıyoruz.

Task Scheduler’ın General kısmında  Name yazan bölümde  Task’ımızın   adını yazıyoruz .

Security Options Bölümünde ikinci kısmı seçmeniz gerekmektedir. Default da “Run  only when user is logged on “ kısmı seçili olarak gelir fakat kullanıcı login olmadığında da çalışmasını istediğimiz için ikinci seçeneği yani “ Run whether user İs logged on or not” seçeneğini seçmemiz gerekmektedir.

Triggers kısmından her gün çalışacak şekilde ayarlamaları yapıyoruz.

Actions bölümünden  new butonuna tıklıyoruz. Açılan sekmede Browse butonuna tıkladığımızda açılan pencere de oluşturduğumuz  powershell dosyamızı kaydetmemiz için kullanacağımız “ .bat” uzantılı dosyayı seçiyoruz ve açılan pencerelerde ki OK butonuna tıklayarak  işlemimizi tamamlıyoruz.

İşlemimiz tamamlandı testini yapmak için sağ tuş run seçeneğini seçtikten sonra  powershell içerisinde  $email1 karşısında yazdığınız maili kontrol edip mailin gelip gelmediğini kontrol ediniz.

Theme: Overlay by Kaira Extra Text
Cape Town, South Africa