0

我有一個Windows 2003 Server,它使用IIS來託管一個傳統的ASP.NET Web服務,該服務連接到我無法控制的遠程Oracle數據庫服務器上的數據庫。問題在於數據庫服務器每隔一兩週就會關閉一次,但在大約5分鐘後會恢復。我必須重新啓動IIS才能刪除任何損壞的連接,然後再次運行我的Web服務。在Windows 2003 Server中發生特定錯誤時觸發事件的最佳方法?

發生特定錯誤代碼時,觸發事件(即發送電子郵件給我自己和/或重置IIS)的最佳方式是什麼(在這種情況下,它將是一個ORA類型的錯誤,但我可以獲取Windows錯誤代碼)?

IIS設置?

任務計劃程序? (限於計劃的任務,只有我相信在Windows 2003服務器上,例如每天/周/月等)

Powershell腳本?

其他選項?

我知道在Windows 2008 Server中,您可以將任務計劃程序配置爲當服務器在其錯誤日誌中遇到特定錯誤代碼時觸發事件......但在Windows的任務計劃程序中找不到像這樣的任何內容2003服務器。

謝謝。

回答

0

我寫了一個powershell shell腳本來監視sql server errorlog並報告特定的錯誤。我存儲了上次停止閱讀的位置,然後在下次運行腳本時繼續。這是實際讀取日誌的部分。然後,您只需將該位置存儲在某個臨時文件中,並將其作爲計劃任務運行即可。如果發生錯誤,甚至重新啓動某項服務,請發送電子郵件。

$path = $logs.file 
Write-Host $path 
if($currentLog.lastpos -ne $null){$pos = $currentLog.lastpos} 
else{$pos = 0} 
if($logs.enc -eq $null){$br = New-Object System.IO.BinaryReader([System.IO.File]::Open($path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::ReadWrite))} 
else{ 
    $encoding = $logs.enc.toUpper().Replace('-','') 
    if($encoding -eq 'UTF16'){$encoding = 'Unicode'} 
    $br = New-Object System.IO.BinaryReader([System.IO.File]::Open($path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::ReadWrite), [System.Text.Encoding]::$encoding) 
} 
$required = $br.BaseStream.Length - $pos 
if($required -lt 0){ 
    $pos = 0 
    $required = $br.BaseStream.Length 
} 
if($required -eq 0){$br.close(); return $null} 
$br.BaseStream.Seek($pos, [System.IO.SeekOrigin]::Begin)|Out-Null 
$bytes = $br.ReadBytes($required) 
$result = [System.Text.Encoding]::Unicode.GetString($bytes) 
$split = $result.Split("`n") 
foreach($s in $split) 
{ 
    if($s.contains(" Error:")) 
    { 
     #Filter events here 
    } 
} 
$currentLog.lastpos = $br.BaseStream.Position 
$br.close() 
+0

不錯!感謝分享,我會盡快嘗試。我認爲Windows Server 2003將需要安裝Powershell,因爲它不會預安裝,與Windows Server 2008不同。 – fuzzyanalysis 2012-07-14 02:50:04

+0

我也希望在Windows 2003 Server上使用一些內置解決方案,因爲服務器不是我的,我也是出於安全原因,不允許將新軟件導入服務器。 – fuzzyanalysis 2012-07-18 00:31:11

+0

然後,您可以編寫一個小的可視化基本腳本來執行此操作,並將其作爲計劃任務執行。然後,您需要導入的是您的腳本。我不知道窗口中的任何內置功能會爲您執行此操作。 – Gisli 2012-07-18 07:58:32

相關問題