Sqlserver误删除数据后恢复数据一例

Sqlserver误删数据恢复:

    版本:Sqlserver 2005

    今天凌晨,开发同事在操作Sqlserver数据库时,误删了一个表一年的数据,由于该数据库是每天两次全备(数据库大小为18G左右),于是就把昨天中午的备份拿过来还原出来,然后把这个表的数据导出来还原到生产库上,但是这样的话这个表就少了半天的数据,今天客户知道后要求必须恢复完全。
    我对Sqlserver了解的特别少,也就只能从网上查查资料,然后把Oracle的思路带过来试试。
    
    首先只有备份肯定是不行的 还必须得有事务日志。
    
    看了一下现场的生产环境,日志20多G。。就先对事务日志做了一次备份,据我推测这应该是数据库创建使用到现在的所有的事务日志文件。
    
    事务日志备份完后,在昨天晚上同事还原的临时库的基础上,再利用昨天中午的备份+刚备份的事务日志,再进行还原。
    
    还原选项大概是这样的:

Sqlserver误删除数据后恢复数据一例_第1张图片

Sqlserver误删除数据后恢复数据一例_第2张图片

   由于之前没操作过Sqlserver恢复+在生产库上操作,操作起来特别害怕。。还特害怕把现在正在用的正式库还原了
    (所有的恐惧都是源于未知)
    
    常规选项页中选好还原的目标时间点,下面选好源数据库后会自动关联出可用的备份集
    
    特别要注意的是选项中移一定要修改还原为的路径
    
    还原的时候 可以通过sp_who2定位还原的会话,然后通过以下sql监控还原进度:

SELECT session_id,
       percent_complete,
       request_id,
       start_time,
       status,
       command,
       sql_handle,
       database_id,
       user_id,
       blocking_session_id,
       wait_type,
       wait_time,
       last_wait_type,
       wait_resource,
       open_transaction_count,
       open_resultset_count,
       transaction_id,
       estimated_completion_time,
       cpu_time,
       total_elapsed_time,
       scheduler_id,
       reads,
       writes,
       logical_reads
  FROM sys.dm_exec_requests
 WHERE session_id = 54

  查出是status字段一直是suspended,让我以为恢复被什么阻塞了呢,然后发现percent_complete一直在上涨,判断status字段应该没有什么影响吧。。
 
 恢复完成后顺利的从数据库里面找到了之前未恢复的数据。

你可能感兴趣的:(Sqlserver)