none
SQL Server 收缩数据库,中途kill进程出现了rollback RRS feed

  • 问题

  • SQL Server 2014  收缩数据库,中途kill进程出现了rollback,我了解到的收缩数据库不会影响数据,但是kill进程后怎么会有rollback呢?是我对收缩过程没有理解到位。

    请求大神告知一下。

    2021年7月7日 10:32

全部回复

  • Sql will move pages within db files when shrinking db, so there's data movement involved.
    2021年7月8日 0:28
  • 您好, 请问下那么rollback是将移动的数据复原吗? 已经收缩的空间应该是不会回滚吧。
    2021年7月8日 1:36
  • 你好,

    官方文档所介绍的,“可以随时停止执行 DBCC SHRINKFILE 操作,并保留任何已完成的工作”。 杀死进程不会导致回滚(移动的数据复原,文件缩小了空间又恢复原先大小)。

    请问你说的rollback是指什么情况。


    2021年7月8日 1:41
  • 就是收缩的中途kill进程,然后进程的状态是rollback,我不知到rollback还在回滚什么,为什么会出现这种状态呢
    2021年7月8日 3:04
  • 杀死执行收缩操作的进程不会导致收缩操作的回滚。该进程可能存在其他事务。

    如果这持续了一段时间,尝试重启SQL Server 服务。

    2021年7月8日 4:00
  • 意思是这个进程除了收缩空间以外,还有进行了其他操作?(是猜测吗,还是官方有资料介绍这一块具体会同时操作什么,暂时没有找到回答这类问题的资料。)

    不能重启,情况很尴尬,kill杀又杀不掉,又引起了阻塞。

    2021年7月8日 6:48
  • 我的意思是这个进程除了运行收缩数据库命令,是否可能运行了其他的命令。

    当前来看,如果该进程一直处于回滚状态,看起来不会结束,那只能安排停机然后重启服务。

    2021年7月8日 7:30
  • 就只执行了一个收缩命令,看来非得重启了
    2021年7月8日 8:01
  • 就只执行了一个收缩命令,看来非得重启了
    Did you double check sysprocesses? It'll tell you which process is in rollback status.
    2021年7月9日 0:50
  • 是的,确定是收缩数据库的进程处于rollback状态
    2021年7月9日 3:28
  • 你好,

    在网上搜索了一下,很少看到这种情况,但确实看到过有人出现过这个问题,最终也都是通过重启SQL Server服务解决的,没有找到其他好的解决方法。

    可以看下此收缩进程是否是被其他进程阻塞住了。查下sysprocesses或者sys.dm_exec_requests 


    2021年7月9日 8:14
  • SQL Server 2014  收缩数据库,中途kill进程出现了rollback,我了解到的收缩数据库不会影响数据,但是kill进程后怎么会有rollback呢?是我对收缩过程没有理解到位。

    请求大神告知一下。

          既然收缩数据库不会影响数据,那么为什么要kill这个进程呢,系统没有犯错而要反杀系统,我认为是对kill功能的错误理解,kill的作用是清理尸体进程,而不是活杀运行进程。
    2021年7月9日 8:25
  • SQL Server 2014  收缩数据库,中途kill进程出现了rollback,我了解到的收缩数据库不会影响数据,但是kill进程后怎么会有rollback呢?是我对收缩过程没有理解到位。

    请求大神告知一下。

          既然收缩数据库不会影响数据,那么为什么要kill这个进程呢,系统没有犯错而要反杀系统,我认为是对kill功能的错误理解,kill的作用是清理尸体进程,而不是活杀运行进程。
    You may need kill active process which causes blocking.
    2021年7月9日 15:02
  • You may need kill active process which causes blocking.

          Process which causes blocking is not an active process, it is a dead process.

          So you may need kill dead process which causes blocking.

    2021年7月9日 22:49
  • You may need kill active process which causes blocking.

          Process which causes blocking is not an active process, it is a dead process.

          So you may need kill dead process which causes blocking.

    Not really, active process can block others.
    2021年7月10日 14:57
  • Not really, active process can block others.

         Truly difficulty is how to find and confirm which is the dead process or not.

    2021年7月11日 14:58
  • Not really, active process can block others.

         Truly difficulty is how to find and confirm which is the dead process or not.

    It's easy with 'sp_who2 active' or querying syspocesses.
    2021年7月11日 15:17