等級(jí) 8次回復(fù) 如何將sql server的數(shù)據(jù)庫(kù)的數(shù)據(jù)還原到之前的某個(gè)時(shí)間點(diǎn)? sql server的設(shè)置都是默認(rèn)設(shè)置,現(xiàn)在看到mdf和ldf文件都有,而且日志文件比mdf文件還要大。 能還原到上個(gè)月的數(shù)據(jù)嗎,因?yàn)橛行?shù)據(jù)不小心這幾天被自己刪除了。 如果能的話,怎么操作?
等級(jí) 1樓
--數(shù)據(jù)還原到指定時(shí)間點(diǎn)的處理示例 --創(chuàng)建測(cè)試數(shù)據(jù)庫(kù) CREATE DATABASE Db GO --對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份 BACKUP DATABASE Db TO DISK='c:\db.bak' WITH FORMAT GO --創(chuàng)建測(cè)試表 CREATE TABLE Db.dbo.TB_test(ID int) --延時(shí)1秒鐘,再進(jìn)行后面的操作(這是由于SQL Server的時(shí)間精度最大為百分之三秒,不延時(shí)的話,可能會(huì)導(dǎo)致還原到時(shí)間點(diǎn)的操作失敗) WAITFOR DELAY '00:00:01' GO --假設(shè)我們現(xiàn)在誤操作刪除了 Db.dbo.TB_test 這個(gè)表 DROP TABLE Db.dbo.TB_test --保存刪除表的時(shí)間 SELECT dt=GETDATE() INTO # GO --在刪除操作后,發(fā)現(xiàn)不應(yīng)該刪除表 Db.dbo.TB_test --下面演示了如何恢復(fù)這個(gè)誤刪除的表 Db.dbo.TB_test --首先,備份事務(wù)日志(使用事務(wù)日志才能還原到指定的時(shí)間點(diǎn)) BACKUP LOG Db TO DISK='c:\db_log.bak' WITH FORMAT GO --接下來,我們要先還原完全備份(還原日志必須在還原完全備份的基礎(chǔ)上進(jìn)行) RESTORE DATABASE Db FROM DISK='c:\db.bak' WITH REPLACE,NORECOVERY GO --將事務(wù)日志還原到刪除操作前(這里的時(shí)間對(duì)應(yīng)上面的刪除時(shí)間,并比刪除時(shí)間略早 DECLARE @dt datetime SELECT @dt=DATEADD(ms,-20,dt) FROM # --獲取比表被刪除的時(shí)間略早的時(shí)間 RESTORE LOG Db FROM DISK='c:\db_log.bak' WITH RECOVERY,STOPAT=@dt GO --查詢一下,看表是否恢復(fù) SELECT * FROM Db.dbo.TB_test /*--結(jié)果: ID ----------- (所影響的行數(shù)為 0 行) --*/ --測(cè)試成功 GO --最后刪除我們做的測(cè)試環(huán)境 DROP DATABASE Db DROP TABLE #
等級(jí) 2樓 如果上述方法不行,可以用Log Explorer http://www./SoftDown.asp?ID=14562 http://www./app/servlet/net.yiii.club.DownloadServlet?Information_Id=I00023471 解壓縮密碼 www.heibai.net http://www./softview_8647.htm 注冊(cè)機(jī)產(chǎn)生的是注冊(cè)碼,是兩個(gè) 用解壓縮密碼解開后,壓縮包里也有一個(gè)注冊(cè)機(jī)的 打開log explorer file=>attach log file->選擇服務(wù)器和登陸方式->connect-> 選擇數(shù)據(jù)庫(kù)->attach->左面對(duì)話框中browse->view log->就可以看到log記錄了 想恢復(fù)的話: 右鍵log記錄 undo transation->選擇保存文件名和路徑->然后打開該文件到查詢分析器里執(zhí)行 T-sql代碼就可以了 例如 如果log是delete table where ...的話,生成的文件代碼就是insert table .... Log Explorer for SQL Server v3.3 特別版 www.chinaz.com Log Explorer is the leading transaction analysis and data recovery solution for Microsoft SQL Server. By providing unprecedented access to the SQL Server transaction log, Log Explorer gives you the ability to understand and solve elusive database problems by browsing the transaction log, exporting data to create reports, and selectively recovering modified, deleted, dropped, or truncated data. 打開log explorer file=>attach log file->選擇服務(wù)器和登陸方式->connect-> 選擇數(shù)據(jù)庫(kù)->attach->左面對(duì)話框中browse->view log->就可以看到log記錄了 想恢復(fù)的話: 右鍵log記錄 undo transation->選擇保存文件名和路徑->然后打開該文件到查詢分析器里執(zhí)行 T-sql代碼就可以。。。 例如 如果log是delete table where ...的話,生成的文件代碼就是insert table .... 右鍵log記錄 undo transation->選擇保存文件名和路徑->然后打開該文件到查詢分析器里執(zhí)行T-sql代碼。。。 log explorer使用的一個(gè)問題 1)對(duì)數(shù)據(jù)庫(kù)做了完全 差異 和日志備份 備份時(shí)選用了刪除事務(wù)日志中不活動(dòng)的條目 再用Log explorer打試圖看日志時(shí) 提示No log recorders found that match the filter,would you like to view unfiltered data 選擇yes 就看不到剛才的記錄了 如果不選用了刪除事務(wù)日志中不活動(dòng)的條目 再用Log explorer打試圖看日志時(shí),就能看到原來的日志 2)修改了其中一個(gè)表中的部分?jǐn)?shù)據(jù),此時(shí)用Log explorer看日志,可以作日志恢復(fù) 3)然后恢復(fù)備份,(注意:恢復(fù)是斷開log explorer與數(shù)據(jù)庫(kù)的連接,或連接到其他數(shù)據(jù)上, 否則會(huì)出現(xiàn)數(shù)據(jù)庫(kù)正在使用無法恢復(fù)) 恢復(fù)完后,再打開log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data 選擇yes 就看不到剛才在2中修改的日志記錄,所以無法做恢復(fù). -------------------------------------------------------------------------------- 系統(tǒng)中有一個(gè)數(shù)據(jù)庫(kù)DB1,系統(tǒng)正在使用的過程中,不小心刪除了某表T1的數(shù)據(jù) 現(xiàn)我可以按照用完整備份文件加日志備份時(shí)間點(diǎn)TIME1恢復(fù)的方法來恢復(fù)該數(shù)據(jù)庫(kù) 但問題出在該數(shù)據(jù)庫(kù)一直還必須在使用中,所以除了你刪除了數(shù)據(jù)的TA表外,其它的 表的數(shù)據(jù)你不能只是恢復(fù)到錯(cuò)誤時(shí)間點(diǎn)TIME1處,因?yàn)椋琓IME1以后也有數(shù)據(jù)變化 解決這個(gè)問題有兩個(gè)方法 1:用LOG EXEPLORE 可以輕松搞定 2:先建立一個(gè)數(shù)據(jù)庫(kù)DB2,將完整備份文件恢復(fù)到DB2中,再用DB2中的T1數(shù)據(jù)來更新 DB1中的T1數(shù)據(jù)即可. --查看備份信息 RESTORE FILELISTONLY FROM DISK ='C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup' --還原舊的備份 RESTORE DATABASE db2 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup' with replace,norecovery, move 'db1_Data' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_data.mdf', move 'db1_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_log.ldf' --還原數(shù)據(jù)日志到時(shí)間點(diǎn) restore log db2 from disk='db_log_backup' with stopat='2003/4/22 9:57'
等級(jí) 3樓
引用 2 樓 dawugui 的回復(fù): 如果上述方法不行,可以用Log Explorer http://www./SoftDown.asp?ID=14562 http://www./app/servlet/net.yiii.club.DownloadServlet?Information_Id=I00023471 解壓縮密碼 www.heibai.net http://www./softview_8647.htm 注冊(cè)機(jī)產(chǎn)生的是注冊(cè)碼,是兩個(gè) 用解壓縮密碼解開后,壓縮包里也有一個(gè)注冊(cè)機(jī)的 打開log explorer file=>attach log file->選擇服務(wù)器和登陸方式->connect-> 選擇數(shù)據(jù)庫(kù)->attach->左面對(duì)話框中browse->view log->就可以看到log記錄了 想恢復(fù)的話: 右鍵log記錄 undo transation->選擇保存文件名和路徑->然后打開該文件到查詢分析器里執(zhí)行 T-sql代碼就可以了 例如 如果log是delete table where ...的話,生成的文件代碼就是insert table .... Log Explorer for SQL Server v3.3 特別版 www.chinaz.com Log Explorer is the leading transaction analysis and data recovery solution for Microsoft SQL Server. By providing unprecedented access to the SQL Server transaction log, Log Explorer gives you the ability to understand and solve elusive database problems by browsing the transaction log, exporting data to create reports, and selectively recovering modified, deleted, dropped, or truncated data. 打開log explorer file=>attach log file->選擇服務(wù)器和登陸方式->connect-> 選擇數(shù)據(jù)庫(kù)->attach->左面對(duì)話框中browse->view log->就可以看到log記錄了 想恢復(fù)的話: 右鍵log記錄 undo transation->選擇保存文件名和路徑->然后打開該文件到查詢分析器里執(zhí)行 T-sql代碼就可以。。。 例如 如果log是delete table where ...的話,生成的文件代碼就是insert table .... 右鍵log記錄 undo transation->選擇保存文件名和路徑->然后打開該文件到查詢分析器里執(zhí)行T-sql代碼。。。 log explorer使用的一個(gè)問題 1)對(duì)數(shù)據(jù)庫(kù)做了完全 差異 和日志備份 備份時(shí)選用了刪除事務(wù)日志中不活動(dòng)的條目 再用Log explorer打試圖看日志時(shí) 提示No log recorders found that match the filter,would you like to view unfiltered data 選擇yes 就看不到剛才的記錄了 如果不選用了刪除事務(wù)日志中不活動(dòng)的條目 再用Log explorer打試圖看日志時(shí),就能看到原來的日志 2)修改了其中一個(gè)表中的部分?jǐn)?shù)據(jù),此時(shí)用Log explorer看日志,可以作日志恢復(fù) 3)然后恢復(fù)備份,(注意:恢復(fù)是斷開log explorer與數(shù)據(jù)庫(kù)的連接,或連接到其他數(shù)據(jù)上, 否則會(huì)出現(xiàn)數(shù)據(jù)庫(kù)正在使用無法恢復(fù)) 恢復(fù)完后,再打開log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data 選擇yes 就看不到剛才在2中修改的日志記錄,所以無法做恢復(fù). -------------------------------------------------------------------------------- 系統(tǒng)中有一個(gè)數(shù)據(jù)庫(kù)DB1,系統(tǒng)正在使用的過程中,不小心刪除了某表T1的數(shù)據(jù) 現(xiàn)我可以按照用完整備份文件加日志備份時(shí)間點(diǎn)TIME1恢復(fù)的方法來恢復(fù)該數(shù)據(jù)庫(kù) 但問題出在該數(shù)據(jù)庫(kù)一直還必須在使用中,所以除了你刪除了數(shù)據(jù)的TA表外,其它的 表的數(shù)據(jù)你不能只是恢復(fù)到錯(cuò)誤時(shí)間點(diǎn)TIME1處,因?yàn)?,TIME1以后也有數(shù)據(jù)變化 解決這個(gè)問題有兩個(gè)方法 1:用LOG EXEPLORE 可以輕松搞定 2:先建立一個(gè)數(shù)據(jù)庫(kù)DB2,將完整備份文件恢復(fù)到DB2中,再用DB2中的T1數(shù)據(jù)來更新 DB1中的T1數(shù)據(jù)即可. --查看備份信息 RESTORE FILELISTONLY FROM DISK ='C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup' --還原舊的備份 RESTORE DATABASE db2 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\db1_backup' with replace,norecovery, move 'db1_Data' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_data.mdf', move 'db1_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL\data\db2_log.ldf' --還原數(shù)據(jù)日志到時(shí)間點(diǎn) restore log db2 from disk='db_log_backup' with stopat='2003/4/22 9:57' 頂烏龜大俠
等級(jí) 4樓 估計(jì)沒有備份過數(shù)據(jù)庫(kù)..........還是用log explorer吧
等級(jí) 5樓 用log explorer比較穩(wěn)妥
等級(jí) 6樓 用log plore 看了一下,怎么只看到最近三天的日志啊。 但是ldf文件很大啊,比mdf文件還要大呢。 我要想恢復(fù)到10月20號(hào)的數(shù)據(jù)。 我的數(shù)據(jù)庫(kù)設(shè)置都是默認(rèn)設(shè)置,因?yàn)椴辉趺炊栽O(shè)置都沒有修改。
等級(jí) 7樓 為什么用explorer只看到最近幾天的記錄??????
等級(jí) 8樓
引用 6 樓 的回復(fù): 用log plore 看了一下,怎么只看到最近三天的日志啊。 但是ldf文件很大啊,比mdf文件還要大呢。 我要想恢復(fù)到10月20號(hào)的數(shù)據(jù)。 我的數(shù)據(jù)庫(kù)設(shè)置都是默認(rèn)設(shè)置,因?yàn)椴辉趺炊?,所以設(shè)置都沒有修改。 你好,六樓的,可以共享一下你的工具嗎?