微软SQL Server还原/备份为何消耗很长时间

一个客户
问道:为什么我花了7个小时来备份我的数据库,却要用21个小时来还原?

可能的原因有很多。比如,你有个1TB的数据库,但是只储存了100GB的数据,那么备份的时候,只需要备份这100GB的数据。然而,在还原数据库的时候,你必须重构1TB的数据库,那将意味着大量的时间将被消耗。另一种情况是,你可能没有使用instant file initialization, 将文件预填零操作将会导致大量的写操作。

以下是一次还原操作的错误日志,这通常可以用来决定在备份/还原过程中,哪一步消耗了时间。

2008-01-23 08:38:40.42 spid52&">nbsp;     Starting up database 'dbPerf_MAIN'.

2008-01-23 08:38:40.52 spid52      The database 'dbPerf_MAIN' is marked RESTORING and is in a state that does not allow recovery to be run.

2008-01-23 08:38:43.71 spid52      Starting up database 'dbPerf_MAIN'.

2008-01-23 08:38:46.82 Backup      Restore is complete on database 'dbPerf_MAIN'.  The database is now available.

2008-01-23 08:38:46.82 Backup      Database was restored: Database: dbPerf_MAIN, creation date(time): 2008/01/16(14:04:58), first LSN: 647:4889:66, last LSN: 647:4918:1, number of dump devices: 1, device information: (FILE=1, TYPE=DISK: {'c:\temp\dbperf_main.bak'}). Informational message. No user action required.

正如以前所提及的(https://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=930079&SiteID=1), SQLServer确实有一套跟踪标志来为备份或者还原操作提供更详细的信息。

警告:跟踪标志应在微软SQL Server Support指导下使用。在这里仅作为讨论使用,将不会再后期版本中被支持。

以下的SQL Server 错误日志输出使用了跟踪标志3004来收集额外的信息。跟踪标志3605同样被使用来使输出进入错误日志。

我标亮了正常输出信息来使之更适于被阅读。阅读细节信息可以帮助你了解发生了什么。比如,停止全文搜索发生在你能够看到数据库被启动之前。使用时间戳和相关的信息可以帮助你了解一个标准的还原过程,以及决定哪里将是效率瓶颈。

dbcc traceon(3004, 3605, -1)

restore database dbPerf_MAIN from disk = 'c:\perf.bak' with replace, stats=1

2008-01-23 08:59:56.26 spid52      RestoreDatabase: Database dbPerf_MAIN

2008-01-23 08:59:56.26 spid52      Opening backup set

2008-01-23 08:59:56.31 spid52      Restore: Configuration section loaded

2008-01-23 08:59:56.31 spid52      Restore: Backup set is open

2008-01-23 08:59:56.31 spid52      Restore: Planning begins

2008-01-23 08:59:56.32 spid52      Halting FullText crawls on database dbPerf_MAIN

2008-01-23 08:59:56.32 spid52      Dismounting FullText catalogs

2008-01-23 08:59:56.32 spid52      X-locking database: dbPerf_MAIN

2008-01-23 08:59:56.32 spid52      Restore: Planning complete

2008-01-23 08:59:56.32 spid52      Restore: BeginRestore (offline) on dbPerf_MAIN

2008-01-23 08:59:56.40 spid52      Restore: PreparingContainers

2008-01-23 08:59:56.43 spid52      Restore: Containers are ready

2008-01-23 08:59:56.43 spid52      Zeroing C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\dbPerf_MAIN_log.LDF from page 1 to 17312 (0x2000 to 0x8740000)

2008-01-23 08:59:56.43 spid52      Restore: Restoring backup set

2008-01-23 08:59:56.43 spid52      Restore: Transferring data to dbPerf_MAIN

2008-01-23 08:59:58.55 spid52      Restore: Waiting for log zero on dbPerf_MAIN

2008-01-23 09:00:00.64 spid52      Zeroing completed on C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\dbPerf_MAIN_log.LDF

2008-01-23 09:00:00.70 spid52      Restore: LogZero complete

2008-01-23 09:00:00.97 spid52      FileHandleCache: 0 files opened. CacheSize: 12

2008-01-23 09:00:00.97 spid52      Restore: Data transfer complete on dbPerf_MAIN

2008-01-23 09:00:00.97 spid52      Restore: Backup set restored

2008-01-23 09:00:01.11 spid52      Starting up database 'dbPerf_MAIN'.

2008-01-23 09:00:01.15 spid52      The database 'dbPerf_MAIN' is marked RESTORING and is in a state that does not allow recovery to be run.

2008-01-23 09:00:01.15 spid52      Restore-Redo begins on database dbPerf_MAIN

2008-01-23 09:00:04.06 spid52      Rollforward complete on database dbPerf_MAIN

2008-01-23 09:00:04.09 spid52      Restore: Done with fixups

2008-01-23 09:00:04.09 spid52      Restore: Transitioning database to ONLINE

2008-01-23 09:00:04.09 spid52      Restore: Restarting database for ONLINE

2008-01-23 09:00:04.31 spid52      Starting up database 'dbPerf_MAIN'.

2008-01-23 09:00:05.32 spid52      FixupLogTail(progress) zeroing C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\dbPerf_MAIN_log.LDF from 0x6cf6c00 to 0x6cf8000.

2008-01-23 09:00:05.32 spid52      Zeroing C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\dbPerf_MAIN_log.LDF from page 13948 to 13960 (0x6cf8000 to 0x6d10000)

2008-01-23 09:00:05.32 spid52      Zeroing completed on C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\dbPerf_MAIN_log.LDF

2008-01-23 09:00:05.38 spid52      PostRestoreContainerFixups: running fixups on dbPerf_MAIN

2008-01-23 09:00:05.38 spid52      PostRestoreContainerFixups: fixups complete

2008-01-23 09:00:05.41 spid52      PostRestoreReplicationFixup for dbPerf_MAIN starts

2008-01-23 09:00:06.04 spid52      PostRestoreReplicationFixup for dbPerf_MAIN complete

2008-01-23 09:00:06.08 spid52      Restore: Database is restarted

2008-01-23 09:00:06.08 Backup      Restore is complete on database 'dbPerf_MAIN'.  The database is now available.

2008-01-23 09:00:06.08 spid52      Resuming any halted fulltext crawls

2008-01-23 09:00:06.08 spid52      Restore: Writing history records

2008-01-23 09:00:06.08 Backup      Database was restored: Database: dbPerf_MAIN, creation date(time): 2008/01/16(14:04:58), first LSN: 647:4889:66, last LSN: 647:4918:1, number of dump devices: 1, device information: (FILE=1, TYPE=DISK: {'c:\temp\dbperf_main.bak'}). Informational message. No user action required.

2008-01-23 09:00:06.10 spid52      Writing backup history records

2008-01-23 09:00:06.18 spid52      Restore: Done with MSDB maintenance

2008-01-23 09:00:06.18 spid52      RestoreDatabase: Finished

时间: 2024-09-06 14:39:40

微软SQL Server还原/备份为何消耗很长时间的相关文章

使用PowerShell 命令集进行SQL Server 2012 备份和还原

原文:使用PowerShell 命令集进行SQL Server 2012 备份和还原 最近心相不错,所以打算翻译一些英文文档做福利,原文在此,翻译有不足的地方还请各位兄弟指点. 讨论什么是DBA最重要的工作的时候,你最常听到就是一条就是DBA只要做好备份和恢复.事实如此,如果你不做备份,或者无法保证你的备份能够有效恢复,你和你的公司就会处于数据丢失危险下. T-SQL 命令BACKUP DATABASE已经使用了相当长的一段时间(在这之前用的是DUMP DATABASE 命令,老人们都记得).

SQL Server 数据库备份和还原认识和总结(二)_MsSql

通过<SQL Server 数据库备份和还原认识和总结(一)>,相信您对数据备份和还原有了一个更深入的认识,在上文中我没有对事务日志做剖析,在此推荐宋沄剑的文章,对事务日志做了比较详细的讲解:http://www.jb51.net/article/31038.htm.本文将针对上文继续进行数据备份和还原讲解,主要讲解备份和还原的一些关键选项. 数据库备份选项 备份数据库时,有几个备份选项需要了解一下,覆盖介质.事务日志等.谈到覆盖介质时,必须先对这个概念有所了解,不然无从谈起. ● 介质集 (

SQL Server 数据库备份和还原认识和总结 (一)_MsSql

可能许多同学对SQL Server的备份和还原有一些了解,也可能经常使用备份和还原功能,我相信除DBA之外我们大部分开发员队伍对备份和还原只使用最基础的功能,对它也只有一个大概的认识,如果对它有更深入的认识,了解它更全面的功能岂不是更好,到用时会得心应手.因为经常有中小型客户公司管理人员对数据库不了解或掌握不牢,会请我们技术人员出马找回丢失的数据或硬件损坏移动数据的现象,或其它情况的发生. 首先从数据库[恢复模式]说起,因为数据库如果恢复模式设置不正确,会导致数据无法还原. SQL Server

SQL Server 数据库备份和还原认识和总结(一)

可能许多同学对SQL Server的备份和还原有一些了解,也可能经常使用备份和还原功能,我相信除DBA之外我们大部分开发员队伍对备份和还原只使用最基础的功能,对它也只有一个大概的认识,如果对它有更深入的认识,了解它更全面的功能岂不是更好,到用时会得心应手.因为经常有中小型客户公司管理人员对数据库不了解或掌握不牢,会请我们技术人员出马找回丢失的数据或硬件损坏移动数据的现象,或其它情况的发生.     首先从数据库[恢复模式]说起,因为数据库如果恢复模式设置不正确,会导致数据无法还原.     SQ

SQL Server差异备份的备份/还原原理

原文:SQL Server差异备份的备份/还原原理 SQL Server差异备份的备份/还原原理 记住一点:差异备份是基于最后一次完整备份的差异,而不是基于最后一次差异的差异   备份过程: 1-完整备份之后有无对数据库做过修改,如果有,记录数据库的最后LSN(Last LSN) 如果完整备份之后无对数据库做过修改,那么差异备份就没有意义了   2-做差异备份时根据差异位图读取差异页面内容 注意:差异位图记录了自从最后一次完整备份以来数据库中有变化的页面,这样在做差异备份时候就不用扫全库页面,只

SQL Server 2008 备份数据库、还原数据库的方法_mssql2008

SQL Server 2008 备份数据库: 1.打开SQL , 找到要备份的数据库 , 右键 >> 任务 >>备份 2.弹出 [ 备份数据库对话框 ] ,如图: 3.点击添加 [ 按钮 ] . 如下图: 4.选择要备份的路径 和 备份的文件名 点击 [ 确定 ]. 5.然后就一直点击确定就可以了 . 然后我们来到D:\ 看看 6.这个时候 , 你可以把它压缩打包什么的 , 要用的时候 , 在文件后面加 .bak 后缀 就可以用SQL 来还原了,还原可以来看这里~ SQL Serv

SQL Server数据备份处理过程探讨

  Microsoft SQL Server提供了能够按照企业的业务和技术需求来制定数据备份和修复计划的数据库管理员程序-- 相对于个人版本来说,企业级数据库所能提供的主要优势之一就是强大的备份和修复功能组合.Microsoft SQL Server提供了能够按照企业的业务和技术需求来制定数据备份和修复计划的数据库管理员程序. 下面我们将会探讨一下Microsoft SQL Server的数据备份处理过程.当你创建一个备份计划时,你可能需要创建的是一个合适的备份集合,具有不同备份范围(Backu

SQL SERVER 数据库备份的三种策略及语句

1.全量数据备份 备份整个数据库,恢复时恢复所有.优点是简单,缺点是数据量太大,非常耗时 全数据库备份因为容易实施,被许多系统优先采用.在一天或一周中预定的时间进行全数据库备份使你不用动什么脑筋.使用这种类型的备份带来的问题是非常缺乏灵活性,而且当数据库被冲掉后,你面临丢失大量数据的潜在威胁.例如,假设你每天在午夜备份数据库. 如果服务器在晚上11点崩溃了,你将丢失前面23个小时对数据所做的全部修改.对大多数系统来说,这是无法接受的.对此规则,为数不多的例外如下: 1.系统中所存的数据可以很容易

关于SQL Server自动备份无法删除过期的备份文件奇怪现象

server|备份 关于SQL Server自动备份无法删除过期的备份文件 数据库服务器每天凌晨两点进行数据库备份,同时对5天前的数据库备份文件进行删除,不然的话就会把硬盘给撑爆的 windows的日志里给出信息:SQL Server Scheduled Job 'DB 维护计划"数据库维护计划1"的 DB 备份作业.' (0x2DA54A5BBEFC2B4A874428B91602C52A) - Status: 失败 - Invoked on: 2005-09-09 01:00:00