恢复BAK文件是死锁吗?

时间:2016-08-10 17:01:40

标签: sql sql-server powershell ssms database-backups

我尝试在许多远程计算机上恢复备份 - 每台计算机都有一个本地// preparation for (int i = 0; i < 4; i++) { Series s = chart1.Series.Add("S" + i); s.ChartType = SeriesChartType.StackedArea; Series s2 = chart2.Series.Add("S" + i); s2.ChartType = SeriesChartType.SplineArea; } for (int i = 0; i < 30; i++) // some test data { chart1.Series[0].Points.AddXY(i, Math.Abs(Math.Sin(i / 8f))); chart1.Series[1].Points.AddXY(i, Math.Abs(Math.Sin(i / 4f))); chart1.Series[2].Points.AddXY(i, Math.Abs(Math.Sin(i / 1f))); chart1.Series[3].Points.AddXY(i, Math.Abs(Math.Sin(i / 0.5f))); } // the actual calculations: int sCount = chart1.Series.Count; for (int i = 0; i < chart1.Series[0].Points.Count ; i++) { double v = chart1.Series[0].Points[i].YValues[0]; chart2.Series[sCount - 1].Points.AddXY(i, v); for (int j = 1; j < sCount; j++) { v += chart1.Series[j].Points[i].YValues[0]; chart2.Series[sCount - j - 1].Points.AddXY(i, v); } } // optionally control the tension: chart2.Series[0].SetCustomProperty("LineTension", "0.15"); 文件。这是在PS工作流程中完成的:

.BAK

如果我一次只做一个,这似乎有效,但如果我并行运行多个,我会遇到死锁错误:

  

Invoke-Sqlcmd:由于数据库正在使用,无法获得独占访问权   RESTORE DATABASE异常终止。
  事务(进程ID 54)在锁资源上与另一个进程发生死锁,并被选为死锁牺牲品。重新运行交易   ALTER DATABASE语句失败。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

仅基于SQL错误,似乎在一个远程服务器上多次调用RESTORE DATABASE命令。运行该脚本,但注释掉Invoke-Sqlcmd行。检查服务器列表,看看您是否在服务器上多次还原数据库。

否则,您是否尝试在没有并行选项的情况下运行PS脚本?换句话说,每个人都会定期成功吗?如果是这样,那么您的问题在于并行操作的语法。我自己从未使用PowerShell并行处理,但它似乎有一些意想不到的行为:Reddit discussion