Sql-Server
驗證與給定伺服器上的實例的 SQL Server 連接失敗並通過電子郵件發送它們
我正在嘗試監視獨立伺服器/集群伺服器上的 SQL Server 實例。我想從命令行設置一些東西來檢查與伺服器上每個 SQL Server 實例的連接。無論在哪裡無法連接到實例,我都希望向我們的 DBA 團隊發送一封電子郵件(我們有 smtp 伺服器設置)。
每台伺服器都有超過 5 個實例,我們無法在沒有客戶抱怨連接性的情況下跟踪它們,因此我們要積極主動。
我們可以嘗試類似
osql
or的東西sqlcmd
嗎?
- 您可以使用伺服器審核規範來跟踪失敗的登錄。
- 使用 ssis 和腳本任務來讀取審計文件並在需要時通過電子郵件發送。
我過去使用 WMI 設計了一個 powershell 腳本來檢查每個服務的狀態,服務名稱為“MSSQLSERVER”或“SQLSERVERAGENT”如果您的命名實例在它們的名稱之間包含一些共同點,您可以使用我的腳本並將結果轉儲到一個 sql 表,然後您可以放置一個 SQL 作業來檢查該表並在服務關閉時向您發送電子郵件。這是我的腳本,如果您需要任何進一步的幫助,請告訴我。
$servers = Get-Content C:\SQL\PoweShell\servers.txt | Sort-Object #below line will truncate the table where you want to insert your new records to: Invoke-Sqlcmd -ServerInstance Server1-Database DB1 -Query "Truncate table dbo.SQL_Services" foreach($Server In $servers) { Write-Host "Checking Services in $server ....." $services = get-wmiobject -Class win32_service -ComputerName $server | where {$_.Name -like 'MSSQLSERVER' -OR $_.name -like 'SQLSERVERAGENT' } ` | select-object systemname,Name,state,startmode,startname Foreach ($service in $services) { $SN = $service.systemname $N = $service.Name $S = $service.state $SM = $service.startmode $SNA = $service.startname $sqldate = get-date Invoke-Sqlcmd -ServerInstance Server1 -Database DB1 -Query "insert into dbo.SQL_Services select '$SN' ,'$N','$S','$SM','$SNA','$sqldate'" } }