gpt4 book ai didi

sql - 如何强制提交正在运行的 t-sql 查询(完成一半)?

转载 作者:行者123 更新时间:2023-12-04 14:32:05 26 4
gpt4 key购买 nike

我在 Sql Server 2008 R2 上有数据库。在该数据库上,对 4 亿条记录的删除查询已经运行了 4 天,但我需要重启机器。我怎样才能强制它提交到目前为止删除的任何内容?我想拒绝到目前为止通过运行查询删除的数据。但问题是查询仍在运行,并且在服务器重新启动之前不会完成。

注意:我没有为查询设置任何隔离/开始/结束事务。查询正在 SSMS 工作室中运行。

如果机器重启或者我取消了查询,那么数据库将进入恢复模式,它将在接下来的 2 天内恢复,然后我需要重新运行删除,这将花费我另外 4 天的时间。

我非常感谢这方面的任何建议/帮助或指导。我是sql server的新手。

提前致谢问候

最佳答案

没有办法阻止 SQL Server 尝试使数据库进入事务一致状态。每个语句本身都是隐式事务(如果不是外部事务的一部分)并且正在执行全部或不执行。因此,如果您取消查询或断开连接或重新启动服务器,SQL Server 将从事务日志中将原始值写回更新后的数据页。

下次当您一次删除这么多行时,不要一次删除。将作业分成更小的 block (我总是使用 5.000 作为魔数(Magic Number),这意味着我在循环中一次删除 5000 行)以尽量减少事务日志的使用和锁定。

set rowcount 5000
delete table
while @@rowcount = 5000
delete table
set rowcount 0

关于sql - 如何强制提交正在运行的 t-sql 查询(完成一半)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23541757/

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