2013-10-09 28 views
4

我試圖使用以下語句使用「Backup-SQLDatabase」cmdlet來備份大型數據庫,但10分鐘後出現超時錯誤。Backup-SQLDatabase cmdlet中的超時問題

{Backup-SqlDatabase -ServerInstance $Server -Database $DatabaseName -BackupFile $BackUpFile -CompressionOption On -ConnectionTimeout 0 -Initialize -Verbose -ea Stop} 

這裏的誤差恰好之後600秒執行的:

VERBOSE:60%加工。 VERBOSE:備份或恢復被中止。 等待操作超時 + CategoryInfo:InvalidOperation:(:) [備份-SqlDatabase],WIN3 2Exception + FullyQualifiedErrorId:ExecutionFailed,Microsoft.SqlServer.Management.P owerShell.BackupSqlDatabaseCommand + PSComputerName:本地主機

我擡頭看着互聯網,發現一個填充了here的bug。 但是,該問題在SQL Server 2012(11.0.339)中仍然存在。

我也嘗試重新配置「遠程查詢超時」爲0,因爲給定here,但問題依然存在。

這實際上是很奇怪的問題。 PowerShell用於自動化,腳本的運行時間超過10分鐘。 「Backup-SQLDatabase」應該考慮到這一點。

請提出一個解決方法,我可以在使用此cmdlet時解決此問題。 否則,我必須使用SMO類或基本T-SQL重新編寫代碼。

+0

不是一個真正的答案,但如果沒有人給出一個好的答案,http://social.msdn.microsoft.com/Forums/sqlserver/en-US/0ce8f8a1-eb2c-4454-8f01-bb80150ffbac/powershell-script -to-backup-sql-databases?forum = sqltools有一個SMO備份的實現,你可以從這裏開始。 – Eris

回答

9

我做了一些這方面的研究,並圍繞以下解決方法來了:

$serverConn = new-object ("Microsoft.SqlServer.Management.Smo.Server") $server $serverConn.ConnectionContext.StatementTimeout = 0

Backup-SqlDatabase -InputObject $serverConn -Database abc -BackupFile "L:\123\abc.bak" 

當我們通過服務器名稱作爲一個字符串,它試圖創建它自己的連接,我們不這樣做可以選擇將QueryTimeout從600更改爲0.

但是,我們可以創建SMO.Server對象,並在設置所需的屬性後使用它。

希望它有幫助!