PowerShell के साथ SQL सर्वर त्रुटि लॉग (और कुछ त्रुटियों को अनदेखा करें) को स्कैन कैसे करें?

SQL Server 2008 R2 और बाद में त्रुटि लॉग स्कैन करने के लिए मुझे PowerShell स्क्रिप्ट (2.0 संगत) की आवश्यकता है। मुझे खोजने के लिए वाक्यांशों की एक सूची, और बाहर निकलने के लिए वाक्यांशों की एक सूची की आवश्यकता है।

param ([String]$instanceName=$(throw "Instance name was not supplied"))

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')|Out-Null;
$sqlServer = new-object ("Microsoft.SqlServer.Management.Smo.Server") $instanceName;
$r = $sqlServer.ReadErrorLog();

$find = "Error:","Failed";
$exclude = "Error: 0x2098";

# need to do something with $r here and involve $find and $exclude

इसलिए, उदाहरण के लिए, मैं ERRORLOG में सभी पंक्तियां ढूंढना चाहता हूं जिनमें त्रुटि: और विफल शामिल है, लेकिन $ बहिष्कृत सरणी में से किसी को बाहर निकालें । कोई विचार?

1

3 उत्तर

You can find a lot of info on this here: Use PowerShell to Parse SQL Server 2012 Error Logs

लेकिन जो भी आप पूछ रहे हैं वह करने का एक तरीका है $ r सेट करते समय परिणामों को फ़िल्टर करना

$r = $sqlServer.ReadErrorLog()  | ? { $_.Text -match 'error' -OR $_.text -match 'Failed' -and $_text -notmatch "Error: 0x2098"}

आप प्रत्येक सूची के माध्यम से पुन: प्रयास कर सकते हैं और तदनुसार $ r अपडेट कर सकते हैं, नीचे की तरह कुछ आपको शुरू करना चाहिए।

Foreach($ExcludeText in $exclude){
    $r = $r | ? {$_.text -notmatch $ExcludeText}
}

Foreach($IncludeText in $find){
   $r = $r | ?{$_.text -match $IncludeText}
}
1
जोड़ा
धन्यवाद, लेकिन सरणी ढूंढें और बहिष्कृत हो सकते हैं, मैं सोच रहा हूं कि सरणी के साथ इसे कैसे किया जाए, उस पर कोई विचार?
जोड़ा लेखक Mark Allison, स्रोत
मैंने एक और उदाहरण जोड़ा जो मुझे लगता है कि आप जो पूछ रहे हैं उसके करीब हिट करते हैं।
जोड़ा लेखक malexander, स्रोत

उपर्युक्त आलेख में अनियंत्रित TSQL संस्करण पर विवरण है।

http: //www.mssqltips। com/sqlservertip/1476/पढ़ने-एसक्यूएल सर्वर-लॉग-फ़ाइलों का उपयोग-TSQL/

मुझे लगता है कि आप कुछ पैरामीटर खो रहे हैं। Xp_readerrorlog विस्तारित प्रक्रिया निम्न मानकों को लेती है।

ए - त्रुटि लॉग फ़ाइल की संख्या

बी -1 = एसक्यूएल सर्वर लॉग, 2 - एसक्यूएल एजेंट लॉग

सी - खोज स्ट्रिंग 1

डी - खोज स्ट्रिंग 2

0
जोड़ा
धन्यवाद लेकिन मुझे टी-एसक्यूएल समाधान में दिलचस्पी नहीं है, और वह स्क्रिप्ट ऐसा नहीं करती जो मैं टी-एसक्यूएल में वैसे भी चाहता हूं।
जोड़ा लेखक Mark Allison, स्रोत

आपके द्वारा पूछे जाने वाले पावरहेल समाधान यहां दिए गए हैं।

मुझे लगता है कि और/या महत्वपूर्ण है ??

$srv = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)")

$d = $srv.ReadErrorLog(0)
foreach ($r in $d.Rows)
{
   if ( ($r['Text'] -match 'Error:' -and $r['Text'] -notmatch 'Error: 0x2098') 
         -or $r['Text'] -match 'Failed:' )
   {

     Write-Host "============================================"
     Foreach ($c in $d.Columns)
     { Write-Host $c.ColumnName "=" $r[$c]}
   }
}

enter image description here

0
जोड़ा