Sql-Server

驗證與給定伺服器上的實例的 SQL Server 連接失敗並通過電子郵件發送它們

  • March 24, 2022

我正在嘗試監視獨立伺服器/集群伺服器上的 SQL Server 實例。我想從命令行設置一些東西來檢查與伺服器上每個 SQL Server 實例的連接。無論在哪裡無法連接到實例,我都希望向我們的 DBA 團隊發送一封電子郵件(我們有 smtp 伺服器設置)。

每台伺服器都有超過 5 個實例,我們無法在沒有客戶抱怨連接性的情況下跟踪它們,因此我們要積極主動。

我們可以嘗試類似osqlor的東西sqlcmd嗎?

  1. 您可以使用伺服器審核規範來跟踪失敗的登錄。
  2. 使用 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'"                                
      
   }

}

引用自:https://dba.stackexchange.com/questions/89372