我正在尝试使用以下语句使用“Backup-SQLDatabase”cmdlet备份大型数据库,但是我在10分钟后收到超时错误。
{Backup-SqlDatabase -ServerInstance $Server -Database $DatabaseName -BackupFile $BackUpFile -CompressionOption On -ConnectionTimeout 0 -Initialize -Verbose -ea Stop}
这是600秒执行后的错误:
VERBOSE:处理了60%。 VERBOSE:备份或恢复已中止。 等待操作超时 + CategoryInfo:InvalidOperation:(:) [Backup-SqlDatabase],Win3 2Exception + FullyQualifiedErrorId:ExecutionFailed,Microsoft.SqlServer.Management.P owerShell.BackupSqlDatabaseCommand + PSComputerName:localhost
我抬头看着互联网,发现了一个填充错误here。 但是,SQL Server 2012(11.0.339)中仍存在此问题。
我也尝试将“远程查询超时”重新配置为0给定here,但问题仍然存在。
这实际上是非常奇怪的问题。 PowerShell用于自动化,脚本运行需要10分钟以上。 “Backup-SQLDatabase”应该考虑过这个。
请使用此cmdlet建议我可以解决此问题的解决方法。 否则,我将使用SMO类或基本T-SQL重新编写代码。
答案 0 :(得分:10)
我对此进行了一些研究,并提出了以下解决方法:
$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对象,并在设置所需的属性后使用它。
希望它有所帮助!