沒有備份的情況下恢復一個被drop的表的數據
ApexSQL Recover 恢復一個被drop的表的數據
轉自:https://solutioncenter.apexsql.com/zh/%E6%B2%A1%E6%9C%89%E5%A4%87%E4%BB%BD%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E6%81%A2%E5%A4%8D%E4%B8%80%E4%B8%AA%E8%A2%ABdrop%E7%9A%84%E8%A1%A8%E7%9A%84%E6%95%B0%E6%8D%AE/
如果你曾經意外地執行過一個 DROP 語句並且你之前有一個數據庫完整備份,在你drop掉表之前數據庫沒有發生任何改變,完整備份能讓你簡單地依靠覆蓋數據庫來恢復數據。 然而,事情並沒有那么簡單,因為往往數據庫對象和數據在 DROP 語句執行之后都會發生變化又或者你沒有做合理的備份,那么就沒有方法去還原你丟失的數據。
那就是說,每一個 DROP 操作會被記錄在SQL Server的事務日志里。這表示事務日志存儲里足夠的信息去回滾事務,並且如果數據庫處於完整恢復模式下,對於 DROP 操作數據庫備份能夠支持時點還原。
正因為 DROP 操作是被記錄到事務日志的,如果它被包含在一個顯式,活動事務里那么是能夠被回滾的。例如,下面的SQL 查詢:
DROP TABLE Customer SELECT * FROM Customer
會顯示出 Msg 208, Level 16, State 1 這樣的結果,錯誤消息 因為 Customer 表已經被drop掉了
然而,下面的SQL 代碼:
BEGIN TRAN DROP TABLE Customer ROLLBACK SELECT * FROM Customer
會返回 Customer 表所有的記錄行數因為 DROP 表操作被回滾了。
已經被 DROP 的表就不能回滾,很明顯這個表存儲的數據也會丟失。 那是不是說由於 DROP 操作在沒有數據庫完整備份的情況下你就不能夠恢復丟失的數據了呢?
幸運的是,不是的,ApexSQL Recover在這里就能夠發揮它的作用
ApexSQL Recover 恢復工具,能夠恢復已刪除的,截斷了的(truncate,損壞的或者置疑的數據。它能恢復由於drop操作而丟失的對象和數據並且
可以還原刪除了的和在線BLOBs文件讓它能夠像SharePoint 恢復那樣完美。
要恢復由於 DROP 操作並且沒有備份的數據丟失情況,只需要按下面的來做:
- 啟動 ApexSQL Recover
- 選擇恢復由於DROP操作導致丟失的數據
- 在Select the database to recover 的步驟:
- 指定你想恢復數據的數據庫所在的SQL實例 在server下拉框旁邊
- 指定SQL實例的驗證方法(如果你選擇SQL Server授權請選擇一個合法的證書)
- 在數據庫下拉列表中指定數據庫名
然后點擊“下一步”
-
在“ Are additional data sources available?”步驟, 選擇“No additional transaction logs are available ”選擇
-
在“Select a recovery action”步驟,選擇“Save recovery script to file”選項並指定一個T-SQL腳本文件保存的路徑,所有的已丟失數據都插入到這個腳本文件並保存起來
- 點擊“恢復”
就像那樣,你會獲取到所有的你所丟失的數據,在沒有一個單獨SQL數據庫備份的情況下。
翻譯者: 林勇樺
July 2, 2015