Powershell ile SQL Server yönetimi
Powershell uygulamasına SQL Server içerisinde bulunan SQL Server Management Objects (SMO) class’ larını import ederek, Powershell komutları ile birden fazla SQL Server üzerinde aynı anda yönetimsel işlemleri sağlayabiliriz.. ( SMO’ lar, SQL Server Instance’ ını yönetmek için gerekli olan tüm namespace , class vs.. içermektedir. ) PowerShell, tüm sunucular üzerinde yaygın olarak uygulanan ve tekrarlanan görevlerin otomatikleştirilmesini sağlar. Örneğin, tüm SQL sunucular üzerinde ad-hoc query vs.. çalıştırılmak istenirse powershell kullanılabilir.
Birden fazla SQL Server bulunan kurumlarda, rutin task’ leri ve kontrolleri yapmak için Powershell oldukça kolay bir yöntemdir. Powershell kullanarak aynı işlemi birden çok sunucu üzerinde tek bir komut satırıyla çalıştırabilirsiniz.
Powershell ile SQL Server yönetimi isimli makalede SQL Server sunucuları üzerinde düzenli çalışan ve başarısız olan SQL Agent Job’ larını denetlemek için Powershell’ in nasıl kullanılabileceğine dair komut satırlarını inceleyeceğiz. Daha sonra kurum içerisinde bulunan tüm sql server sunucularına ait versiyon numarasını listeleyen Powershell uygulamasının komut satırlarını paylaşacağız. Böylece sql server versiyon numarası geri kalan tüm server’ ların listelesini kolaylıkla elde edebiliriz.
Örnek 1 :
Her sabah, SQL Server sunucularında başarısız olan SQL Agent Job’ larını denetlemek için aşağıdaki komut satırları çalıştırılabilir,
# Check for failed SQL jobs on multiple servers
# sunucuList.txt isimli dosya oluşturup işlem yapacağımız tüm server’ ların ismi dosya içerisine yazılmalıdır;
# SQL Server ile çalışmak için SQL Smo class’ları invoke edilir
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
Cls
# SunucuList.txt dosyası içindeki herbir server bilgisini almak için «foreach» döngüsü açılıp tüm sunuculara ait bilgiler «get-content» cmdlet kullanılarak alınıyor..
foreach ($svr in get-content "C:\Temp\serverList.txt")
{
write-host "server name : " $svr
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$svr"
# başarısız olan, Failed eden job’lar alınıyor,
$srv.jobserver.jobs | where-object {$_.lastrunoutcome -eq "Failed" -and $_.isenabled -eq $TRUE} |
format-table name,lastrunoutcome,lastrundate -autosize
}
Örnek 2 :
Birden çok sunucusu olan kurumlarda SQL Server versiyon bilgilerini tek tek denetlemek zahmetlidir. Fakat, Powershell kullanarak bu işlem oldukça kolaylaştırılabilir. Örneğin, şirket bünyesinde versiyon numarası güncel olmayan, sürümü geri kalmış bir SQL Server Instance olup olmadığını kontrol etmek ve belirlemek için aşağıdaki komut satırlarını çalıştırabiliriz :
# Check SQL Server version
# SunucuList.txt dosyası içindeki herbir server bilgisi «foreach» döngüsü kullanılarak alınır. Listedeki tüm sunucularda çalıştırmak için «get-content» cmdlet kullanılır..
foreach ($svr in get-content "C:\Temp\serverList.txt")
{
# get connection string to sql server
$con = "server=$svr;database=master;Integrated Security=sspi"
# select query to get version number of each sql server,
# Windows PowerShell ile SQL Server üzerinde çalışırken öncelikle Server object’ i oluşturup connection kurmamız gerekir.
# SQL Server’ a bağlandıktan sonra üzerinde istediğimiz işlemi yapmaya başlayabiliriz.
$cmd = "SELECT SERVERPROPERTY('ProductVersion') AS Version, SERVERPROPERTY('ProductLevel') as SP"
# connecting to sql server
$da = new-object System.Data.SqlClient.SqlDataAdapter ($cmd, $con)
$dt = new-object System.Data.DataTable
$da.fill($dt) | out-null
$svr
$dt | Format-Table -autosize
}