6

I’m trying to take back-up of a large database using “Backup-SQLDatabase” cmdlet using following statement, but I’m getting time-out error after 10 minutes.

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

Here’s the error exactly after 600 seconds of execution :

VERBOSE: 60 percent processed. VERBOSE: The backup or restore was aborted. The wait operation timed out + CategoryInfo : InvalidOperation: (:) [Backup-SqlDatabase], Win3 2Exception + FullyQualifiedErrorId : ExecutionFailed,Microsoft.SqlServer.Management.P owerShell.BackupSqlDatabaseCommand + PSComputerName : localhost

I looked up at internet and found a bug filled here. However, the issue still exists in SQL Server 2012 (11.0.339).

I’ve also tried reconfiguring “remote query timeout” to 0 as given here, but the issue persists.

This is actually very weird issue. PowerShell is for automation and scripts do take more than 10 minutes to run. “Backup-SQLDatabase” should have considered this.

Please suggest a workaround by which I can fix this while using this cmdlet. Else , I’ve to re-write the code using SMO classes or basic T-SQL.

4

1 回答 1

13

我对此进行了一些研究,并提出了以下解决方法:

$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 对象并在设置所需属性后使用它。

希望能帮助到你!

于 2013-10-10T07:21:51.873 回答