首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server 2008 R2 -服务关闭-运行存储过程是什么?

Server 2008 R2 -服务关闭-运行存储过程是什么?
EN

Database Administration用户
提问于 2017-05-16 09:27:13
回答 2查看 473关注 0票数 2

我想了解Server的以下行为:

SQL版本:

代码语言:javascript
运行
复制
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64) 
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

让我们假设存储过程如下(为了简洁起见省略了一些代码):

代码语言:javascript
运行
复制
CREATE PROCEDURE Test
AS
BEGIN TRY
    INSERT INTO test_log ('Stage 1. PROC started')

    ...

    EXEC (@ScheduledProcedure) -- Execution of this takes 8-10 mins
    INSERT INTO test_log ('Stage 2. Scheduled Procedure completed')
END TRY
BEGIN CATCH     

    ...

END CATCH;

INSERT INTO test_log ('Stage 3. PROC Completed')

我已经做了一些测试,以检查当我的过程仍在运行时关闭SQL Server时,我的过程会发生什么,下面是结果:

  1. 当我转到services.msc并停止Server时,服务将处于“停止”状态,直到@ScheduledProcedure完成为止(8-10分钟)。
  2. 当我关闭操作系统时,SQL服务似乎取消了存储过程。我认为是这样的,因为第2阶段和第3阶段的消息在test_log表中不可用。

有人能试着解释一下Server的行为吗?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2017-05-16 09:54:33

当我转到services.msc并停止Server时,服务将处于“停止”状态,直到@ScheduledProcedure完成为止(8-10分钟)。

您所看到的是关闭Server时的默认行为。如果不想等待,可以使用WITH NOWAIT开关,但当SQL server启动时,恢复时间将更长,因为事务必须前滚和回滚。

详细信息这里

除非使用WITHNOWAIT选项,否则通过以下方式关闭Server:

  1. 禁用登录( sysadmin和serveradmin固定服务器角色的成员除外)。
  2. 等待当前运行Transact-SQL语句或存储过程完成。要显示所有活动进程和锁的列表,分别运行sp_who和sp_lock。
  3. 在每个数据库中插入一个检查点。
  4. 使用关机语句可以最小化sysadmin固定服务器角色成员重新启动Server时所需的自动恢复工作量。

当我关闭操作系统时,SQL服务似乎取消了存储过程。我认为是这样的,因为第2阶段和第3阶段的消息在test_log表中不可用。

在这种情况下,Server没有控制,因为操作系统发出关闭进程命令,这就是为什么您将看到已完成并写入事务日志但尚未应用于数据库的立即shutdown.Transactions将应用于数据库。再次回滚打开、未完成的事务,以确保数据库处于一致状态。有关前滚和回滚这里的详细信息。

关闭Server的不同方法

票数 2
EN

Database Administration用户

发布于 2017-05-16 09:36:29

当您停止SQL服务时,SQL Server将等待sp完成。

当您关闭Windows时,SQL Server将执行检查点,并在重新启动回滚后执行未提交事务。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/173677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档