SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
簡(jiǎn)介
???
??? 在數(shù)據(jù)庫(kù)數(shù)據(jù)文件因各種原因發(fā)生損壞時(shí),如果日志文件沒有損壞。可以通過備份結(jié)尾日志(Tail of log)使得數(shù)據(jù)庫(kù)可以恢復(fù)到災(zāi)難發(fā)生時(shí)的狀態(tài)。
??? 例如:
????
???? 上圖中。在DB_1中做了完整備份,在Log_1,Log_2處做了日志備份。在Log_2備份之后不久,發(fā)生了故障。從Log_2備份到災(zāi)難發(fā)生時(shí)之間的日志。就是結(jié)尾日志(Tail of log)。如果不能備份尾端日志,則數(shù)據(jù)庫(kù)只能恢復(fù)到Log_2備份的點(diǎn)。尾端日志期間所做的改動(dòng)全部丟失。更詳細(xì)的概念可以查看我之前關(guān)于日志的博文。
???? 下面我們分別來看在SQL Server實(shí)例運(yùn)行良好和SQL Server實(shí)例崩潰狀態(tài)下,備份結(jié)尾日志方法。
SQL Server實(shí)例運(yùn)行正常時(shí),結(jié)尾日志的備份
??? 下面來模擬一次災(zāi)難下結(jié)尾日志的備份:
???
??? 現(xiàn)在數(shù)據(jù)庫(kù)TestBackUp有了一個(gè)完整備份和一個(gè)日志備份,而最后那條”日志備份后的測(cè)試數(shù)據(jù)”是在上次日志備份之后的,被結(jié)尾日志所包含。
??? 接下來模擬數(shù)據(jù)庫(kù)文件所在磁盤損壞(日志文件完好)
??? 1.停掉Server SQL服務(wù)
??? 2.刪除數(shù)據(jù)庫(kù)文件(MDF文件)
???
???? 此時(shí)在SSMS中訪問數(shù)據(jù)庫(kù)TestBackUp會(huì)出現(xiàn)不可用:
????
???? 此時(shí),因?yàn)镾QL Server實(shí)例可用,通過在T-SQL語(yǔ)句指定NO_TRUNCATE選項(xiàng)(必須指定,否則無法備份尾端日志),備份尾端日志:
???
???? 依次進(jìn)行完整備份恢復(fù),和兩次事務(wù)日志恢復(fù),可以看到數(shù)據(jù)已經(jīng)成功恢復(fù)到災(zāi)難點(diǎn):
???
?
當(dāng)SQL Server實(shí)例崩潰時(shí),結(jié)尾日志的備份
??? 此時(shí)由于各種原因,所處的SQL Server實(shí)例也崩潰,無法通過T-SQL來備份結(jié)尾日志。此時(shí)數(shù)據(jù)庫(kù)文件損壞,而事務(wù)日志文件保持正確。
??? 假設(shè)情況和上面例子一樣,此時(shí)我手里有一個(gè)完整備份(TestBackUp_FULL.bak)和一個(gè)日志備份(TestBackUp_log1.bak),還有一個(gè)日志文件(ldf)。
??? 這時(shí)我將這幾個(gè)文件拷貝到其他擁有SQL Server實(shí)例的機(jī)器上。
??? 新建一個(gè)和原數(shù)據(jù)庫(kù)名一樣的數(shù)據(jù)庫(kù)。設(shè)置為脫機(jī):
???
??? 刪除新建數(shù)據(jù)庫(kù)的MDF文件。
??? 將需要備份的數(shù)據(jù)庫(kù)的日志文件替換掉原有的LDF文件。
??? 此時(shí)直接備份結(jié)尾日志,成功:
???
??? 原有Sql server實(shí)例恢復(fù)后一次恢復(fù)完整備份和兩個(gè)日志備份。成功恢復(fù)到災(zāi)難發(fā)生點(diǎn)。
?
總結(jié)
??? 我相信看到這篇文章的人都不希望碰到用到上面兩種方法的情況。但是,墨菲定律(事情如果有變壞的可能,無論這種可能性有多小,它總會(huì)發(fā)生)是殘酷的,事先練習(xí)一下總是比真正遇到情況用生產(chǎn)數(shù)據(jù)練習(xí)愜意的多:-)
轉(zhuǎn)載于:https://www.cnblogs.com/CareySon/archive/2012/02/23/2365006.html
總結(jié)
以上是生活随笔為你收集整理的SQL Server中灾难时备份结尾日志(Tail of log)的两种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日本丰田叉车进口电瓶48V360AH多少
- 下一篇: EF-Entity Framework