SQL Server还原数据库实战


今天早上,客户经理过来说,客户发现拜访类报表的数据不对,都显示的当前组织,而且kpi值也不对。

我看了一下结存任务,判断应该是晚上的结存任务就把新的主数据给结存了,而覆盖了之前结存的1月份的主数据。

我问他是几号导入的新版主数据,他问了开发人员,说是应用程序在昨天晚上9点把之前销售代表对主数据做的修改生效了,因为不是在月中最后一天导入主数据,这样就导致新的数据覆盖了老的数据,就出问题了。

想了想,可以通过数据库的备份文件来还原数据库,然后从这个还原后的数据库中找到之前的主数据,再把主数据结存到1月份就可以。

在备份文件夹找到了最近的完整数据库备份文件,然后查看备份文件,取得数据库的逻辑名称:

点击(此处)折叠或打开

  1. RESTORE FILELISTONLY FROM 
  2. DISK = 'D:\DB_backup\Nia_backup_2016_01_30_201201_3105469.bak'


然后,把还原语句改成这样,注意一定要修改还原后数据库的 数据文件、日志文件的路径,不然会和原来的数据库文件有冲突而报错:

点击(此处)折叠或打开

  1. restore database Nia_TEMP --新的数据库名称 
  2. from disk = 'D:\DB_backup\Nia_backup_2016_01_30_201201_3105469.bak' 
  3. with move 'kace' to 'D:\DB_backup\Nia_SFA.mdf', --数据的逻辑名称->新的物理路径 
  4.      move 'kace_log' to 'D:\DB_backup\Nia_SFA.log' --日志的逻辑名称->新的物理路径 
  5. /*
  6. Processed 15055352 pages for database 'Nia_TEMP', file 'lkkace' on file 1.
  7. Processed 184 pages for database 'Nia_TEMP', file 'lkkace_log' on file 1.
  8. RESTORE DATABASE successfully processed 15055536 pages in 15896.332 seconds (7.399 MB/sec).
  9. */

可以看到,一共处理了 15055352页,也就是15055352.0*8*1024/1024/1024/1024,数据库大小是114GB。
这个数据库最后花了15896.332 seconds才还原完,也就是差不多4.5个小时,真够慢的。。。

另外,通过这个语句,可以看到数据库还原的百分比,当等于100的时候,就说明还原完成了:

select percent_complete 
from sys.dm_exec_requests with(nolock)
where session_id  = xxx

posted @ 2016-12-22 13:54  小木瓜瓜瓜  阅读(221)  评论(0编辑  收藏  举报