SQL 数据库备份启动后是否可以停止它?

kyl*_*_13 5 sql-server-2008 sql-server backup

我希望在 SQL Server 2008 中对 SQL 数据库进行完整的数据库备份。

我的问题是:

  • 如果备份耗时太长或速度太慢,我可以在备份开始后停止、暂停或取消备份吗?备份只是一份工作,我会停止工作吗?
  • 做备份的时候,能不能查看进度,看一下预计的备份完成时间?如果是这样,您如何看待它的进展?

Kin*_*hah 10

直接回答你的问题:

如果备份耗时太长或速度太慢,我可以在备份开始后停止、暂停或取消备份吗?

您不能暂停备份 - 无论是使用 Tsql 运行还是使用 sql 代理作业。如果您的数据库处于镜像状态,那么当您进行故障转移时,备份会被终止。

由于您使用的是 sql server 2008,最近我遇到了一个奇怪的情况,导致我们的一个关键应用程序中断,如果您使用的不是最新的 SP (2008 SP4) - 我们在有一个节点的节点上运行 sp1错误并已在 SP1+CU4 中修复 - 在 SP1 的 CU4 中已解决:https : //support.microsoft.com/en-US/help/973602。在“970133”中搜索: FIX:在 SQL Server 2008 中为数据库创建压缩备份时,如果备份操作停止响应,则无法停止备份操作。

您可以使用kill spid命令停止或杀死它。

您必须谨慎,就好像您要终止一项正在进行的工作一样,它必须ROLLBACK花费一些或更多的时间。

备份只是一份工作,我会停止工作吗?

取决于您如何运行备份。如果您使用 SQL 代理作业运行它,那么它是您可以的作业,STOP或者如果您直接从 SSMS 或 SQLCMD 运行它,那么您可以CANCELKILL命令。

做备份的时候,能不能查看进度,看一下预计的备份完成时间?如果是这样,您如何看待它的进展?

您可以使用 DMV 来监控备份(或恢复)进度(如果您没有使用WITH STATS = number):

----- find out the ETA time for restore and backup progress

SELECT command,
            s.text,
            start_time,
            percent_complete, 
            CAST(((DATEDIFF(s,start_time,GetDate()))/3600) as varchar) + ' hour(s), '
                  + CAST((DATEDIFF(s,start_time,GetDate())%3600)/60 as varchar) + 'min, '
                  + CAST((DATEDIFF(s,start_time,GetDate())%60) as varchar) + ' sec' as running_time,
            CAST((estimated_completion_time/3600000) as varchar) + ' hour(s), '
                  + CAST((estimated_completion_time %3600000)/60000 as varchar) + 'min, '
                  + CAST((estimated_completion_time %60000)/1000 as varchar) + ' sec' as est_time_to_go,
            dateadd(second,estimated_completion_time/1000, getdate()) as est_completion_time 
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) s
WHERE r.command in ('RESTORE DATABASE', 'BACKUP DATABASE', 'RESTORE LOG', 'BACKUP LOG')
Run Code Online (Sandbox Code Playgroud)

一些思考的食物: