हमारी DBA टीम नीचे का उपयोग करके बैकअप को सत्यापित नहीं करती है TSQL
(जिसे आसानी से पोस्ट-बैकअप किया जा सकता है और लगभग कोई समय नहीं लगता है, इसलिए मुझे ऐसा नहीं करना चाहिए):
RESTORE VERIFYONLY
FROM DISK = 'D:\Backups\LOCATION'
उनके पास अतीत में मुद्दे थे, इसलिए भले ही हमें लगता था कि वे इससे सीख लेंगे, लेकिन उन्होंने ऐसा नहीं किया। मैंने ऐसा करने के लिए एक पॉवरशेल स्क्रिप्ट बनाई क्योंकि हमारे पास लगभग 100+ सर्वर हैं और मैं इस स्क्रिप्ट को केवल सभी बैकअप के खिलाफ चलाना चाहता हूं ताकि यह सुनिश्चित हो सके कि वे वैध हैं। नीचे दी गई स्क्रिप्ट सही ढंग से चलती है (इसमें वह त्रुटियां नहीं तोड़ती या फेंकती हैं), मुझे उत्सुकता है कि क्या पॉवरशेल में छपे संदेश को वापस लाने का कोई तरीका है जो हम सामान्य रूप से SSMS में प्राप्त करेंगे जहां यह बताता है कि फ़ाइल 1 पर बैकअप सेट है सत्यापन के रूप में मान्य है ।
$SqlCon = New-Object System.Data.SqlClient.SqlConnection
$SqlCon.ConnectionString = "SERVER=SERV\INST;Integrated Security=true;DATABASE=master"
$baks = Get-ChildItem "D:\Backups\" -Filter *.BAK
foreach ($bak in $baks)
{
$SqlCon.Open()
$cd = New-Object System.Data.SqlClient.SqlCommand
$cd.Connection = $SqlCon
$cd.CommandText = "RESTORE VERIFYONLY FROM DISK = @f"
$cd.Parameters.Add("@f", $bak.FullName)
$cd.ExecuteNonQuery()
$SqlCon.Close()
}
Invoke-SqlCmd ... -Verbose
यह भी अच्छा है अगर आप बाद में उपयोग के लिए आउटपुट को पुनर्निर्देशित करना चाहते हैं बजाय इसे तुरंत होस्ट पर प्रिंट करने के।
invoke-sqlcmd -verbose
?