ONLY三行腳本, SQL數據恢復到指定時間點

jopen 9年前發布 | 27K 次閱讀 SQL SQL Server 數據庫服務器

  經常看到有人誤刪數據,或者誤操作,特別是Update和Delete的時候沒有加WHERE ... 然后就喊爹喊娘了,怕是親爹媽也無奈搖肩。

  話說,如果沒有犯過錯誤,那你還算是搞程序的嗎?!沒了偶爾的心跳,注定一輩子的孤獨啊,哈哈哈.... 

        OK,書歸正傳,要分享一下我的當時的處理方案,與諸君共勉,歡迎吐槽,多多溝通。 

        遇到這種情況,一般都是沒有做備份,或者備份不及時(比如,當時我公司的數據,就沒有做實時備份,不過還好的是我25號數據誤操作,組長也然在19號做了備份,萬幸萬幸哦!),不然也不會來發問了。首先要淡定,否則會有更大的麻煩。

       不過,不用擔心,現在就告訴你,三行sql腳本,數據恢復到指定的時間。客官,請上眼..

 

        首先,你要確定的是你數據恢復模式是哪一種。具體方法:選擇操作的數據庫,“屬性”——》“選項”——》“恢復模式”,是否選擇的是“完整”。

      確保在誤操作之前存在一個全庫備份(或已有多個差異備份或增量備份),首先要做的事就是進進行一次日志備份(如果為了不讓日志文件變大而置trunc. log on chkpt.選項為1那你就死翹了) 

  backup database Demo to disk='D:\db.bak'

 

確保數據庫的恢復模式最起碼不能為【簡單】。至于如何修改成完整模式,這個應該沒必要多說了。

 ONLY三行腳本, SQL數據恢復到指定時間點

 

或者使用腳本檢查:

select recovery_model,recovery_model_desc  

from sys.databases  

where name ='AdventureWorks'  

 ONLY三行腳本, SQL數據恢復到指定時間點

</div>

 ONLY三行腳本, SQL數據恢復到指定時間點

然后,要確保別人不再鏈接數據庫 ,然后做一次日志尾部備份

 

看下這段剁手都來不及的腳本吧 ...

UPDATE Person SET Gender='女'

操作前: ONLY三行腳本, SQL數據恢復到指定時間點               >>       操作后: ONLY三行腳本, SQL數據恢復到指定時間點  

 

如果,這是張客戶表,呃,,,

當然,我相信你是無心之舉,無論如何,淡定,淡定,相信我,這個時候,老板是不會炒了你的,但是,你抓雞也是要趕緊找回丟失的數據。 

 

ONLY三行腳本, SQL數據恢復到指定時間點 

 --1、 首先,備份事務日志(還原日志必須在 還原完全備份的基礎上進行。而使用事務日志才能還原到指定的時間點

   BACKUP  LOG Demo TO disk='D:\\db_log.bak' WITH FORMAT

</div>

 

  --2、接下來,我們要先還原完全備份(還原日志必須在還原完全備份的基礎上進行)   

  RESTORE DATABASE Db FROM DISK='c:\db.bak' WITH REPLACE,NORECOVERY   

 

 

 3、將事務日志還原到刪除操作前(這里的時間對應上面的刪除時間,并比刪除時間略早    

RESTORE LOG Db FROM DISK='c:\db_log.bak' WITH RECOVERY,STOPAT=''     --獲取比表被刪除的時間略早的時間   

  ONLY三行腳本, SQL數據恢復到指定時間點

 

 

如果發現備份不了可以用下面語句查看,并把spid殺掉:

 SELECT  * FROM sys.sysprocesses WHERE dbid=DB_ID('Demo')  

 

 

 --查詢一下,看表是否恢復   

SELECT * FROM Demo.Person   
</div>

 

ps,  操作這些腳本的時候 ,建議是在master 數據庫下進行,很好, 解決數據恢復嘍

 

 

After All:

 平時不做備份,出了問題就抓雞,這也是你們咎由自取!如果你的公司是這樣,建議你趕緊離去,一個對數據不重視的公司,你留著有何意義。

但是,任誰也避免不了工作中的一些失誤,關鍵是咱們解決問題的能力。但作為久經沙場的戰友們,此時,不是要你想到多少種方案解決,你的朋友圈有多少酒友可以求助,有多路大神求支援 ... 

你只需做兩件事:1、30秒認真想想你前后都做了哪些操作;

                       2、15秒內向你的直屬領導如實匯報。

 

這種方法有幾個缺點(此處杜撰被人,也然找不到作者何人):

1、如果你發現誤操作以后還有很多人做了操作,那么你還原成功后,別人的操作就會沖掉,所以發生誤操作后,要馬上停止別人對數據庫的操作。

2、這個方法要對數據庫獨占,所以你想偷偷恢復是不行的了。勇敢承認錯誤吧。

對于核心數據表,還是要先做好預防操作。

</div>
來自:http://www.cnblogs.com/fuguoliang/p/4642004.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!