gpt4 book ai didi

sql - 从Powershell脚本调用Stored Proc时,保留 “restore pending”状态的较大数据库(10GB +)

转载 作者:行者123 更新时间:2023-12-03 00:18:14 25 4
gpt4 key购买 nike

我有这个Powershell脚本,非常适合5GB及以下的数据库。但是,当尝试更大的数据库时会遇到问题。问题在于,当此脚本完成运行时,较大的数据库将处于还原挂起模式。

该脚本的目标是将前一天晚上的最新SQL BAK文件复制到名为test的文件夹中。一旦存在SQL BAK文件,脚本将继续进行下一步,以将每个SQL BAK文件还原到SQL实例。

当此脚本针对较小的数据库运行时,它不会出现任何错误。但是,对于大型数据库,它也可以完成但没有错误,但是数据库处于还原挂起模式。

$bak_path = "\\nas2\sqlbackups"
$yesterday = (Get-Date -hour 13 -Minute 0 -Second 0).AddDays(-1)
get-childitem -path $bak_path -Filter "SERVERXYZ*.bak" -Exclude *master*.**,*model*.**,*msdb*.** -File -recurse |
where {$_.CreationTime -gt $yesterday} | copy-item -Destination I:\test


do {

$bak_path = "I:\TEST"
Get-ChildItem -path $bak_path | Where-Object {$_.name -like "*SERVERXYZ*"} | select -last 1 |
rename-item -newname {"Database.bak"}
$Input = Get-ChildItem -path $bak_path Database.bak


$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=SQLENTBAK;Database=test;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "dbo.restoredatabase"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]

$FileName = "I:\TEST\Database.bak"
if (Test-Path $FileName) {
Remove-Item $FileName}

} while (Get-ChildItem I:\TEST\)

我很想知道为什么会这样。

谢谢

最佳答案

您没有提供dbo.restoredatabase,但我希望您在执行该存储过程时超时,而在连接终止时不回滚,因为默认超时为30秒。

您需要将$SqlCmd.CommandTimeout更改为更加慷慨,例如300表示5分钟。足够的长度取决于很多因素。

关于sql - 从Powershell脚本调用Stored Proc时,保留 “restore pending”状态的较大数据库(10GB +),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com