SQL Server 數(shù)據(jù)庫(kù)備份和還原認(rèn)識(shí)和總結(jié) (一)
首先從數(shù)據(jù)庫(kù)【恢復(fù)模式】說(shuō)起,因?yàn)閿?shù)據(jù)庫(kù)如果恢復(fù)模式設(shè)置不正確,會(huì)導(dǎo)致數(shù)據(jù)無(wú)法還原。
SQL Server 2012對(duì)數(shù)據(jù)庫(kù)備份和還原與SQL Server 2008基本沒(méi)有太大變化,僅對(duì)還原時(shí)間點(diǎn)選擇UI和相關(guān)還原選項(xiàng)做了小改動(dòng),備份和還原核心沒(méi)有做變化,這只是個(gè)人的掌握和了解,僅供參考,具體還請(qǐng)以官方文檔為依據(jù)。以下利用SQL Server 2012 SSMS(SQL Server Management Studio)做圖例演示。
SQL Server 2008數(shù)據(jù)庫(kù)恢復(fù)模式分為三種:完整恢復(fù)模式、大容量日志恢復(fù)模式、簡(jiǎn)單恢復(fù)模式。
◆ 大容量日志恢復(fù)模式。它是對(duì)完整恢復(fù)模式的補(bǔ)充。簡(jiǎn)單地說(shuō)就是要對(duì)大容量操作進(jìn)行最小日志記錄,節(jié)省日志文件的空間(如導(dǎo)入數(shù)據(jù)、批量更新、SELECT INTO等操作時(shí))。比如一次在數(shù)據(jù)庫(kù)中插入數(shù)十萬(wàn)條記錄時(shí),在完整恢復(fù)模式下每一個(gè)插入記錄的動(dòng)作都會(huì)記錄在日志中,使日志文件變得非常大,在大容量日志恢復(fù)模式下,只記錄必要的操作,不記錄所有日志,這樣一來(lái),可以大大提高數(shù)據(jù)庫(kù)的性能,但是由于日志不完整,一旦出現(xiàn)問(wèn)題,數(shù)據(jù)將可能無(wú)法恢復(fù)。因此,一般只有在需要進(jìn)行大量數(shù)據(jù)操作時(shí)才將恢復(fù)模式改為大容量日志恢復(fù)模式,數(shù)據(jù)處理完畢之后,馬上將恢復(fù)模式改回完整恢復(fù)模式。
◆ 簡(jiǎn)單恢復(fù)模式。在該模式下,數(shù)據(jù)庫(kù)會(huì)自動(dòng)把不活動(dòng)的日志刪除,因此簡(jiǎn)化了備份的還原,但因?yàn)闆](méi)有事務(wù)日志備份,所以不能恢復(fù)到失敗的時(shí)間點(diǎn)。通常,此模式只用于對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)安全要求不太高的數(shù)據(jù)庫(kù)。并且在該模式下,數(shù)據(jù)庫(kù)只能做完整和差異備份。
了解了以上數(shù)據(jù)庫(kù)還原模式后,一般就應(yīng)該知道將自己的數(shù)據(jù)庫(kù)設(shè)置為何種模式了。備份數(shù)據(jù)庫(kù),SQL Server 2008提供了四種備份方式:完整備份、差異備份、事務(wù)日志備份、文件和文件組備份。
◆ 差異備份:差異備份是完整備份的補(bǔ)充,只備份上次完整備份后更改的數(shù)據(jù)。相對(duì)于完整備份分來(lái)說(shuō),差異備份的數(shù)據(jù)量比完整數(shù)據(jù)備份小,備份的速度也比完整備份要快。因此,差異備份通常作為常用的備份方式。在還原數(shù)據(jù)時(shí),要先還原前一次做的完整備份,然后還原最后一次所做的差異備份,這樣才能讓數(shù)據(jù)庫(kù)里的數(shù)據(jù)恢復(fù)到與最后一次差異備份時(shí)的內(nèi)容相同。
◆ 事務(wù)日志備份:事務(wù)日志備份只備份事務(wù)日志里的內(nèi)容。事務(wù)日志記錄了上一次完整備份或事務(wù)日志備份后數(shù)據(jù)庫(kù)的所有變動(dòng)過(guò)程。事務(wù)日志記錄的是某一段時(shí)間內(nèi)的數(shù)據(jù)庫(kù)變動(dòng)情況,因此在進(jìn)行事務(wù)日志備份之前,必須要進(jìn)行完整備份。與差異備份類(lèi)似,事務(wù)日志備份生成的文件較小、占用時(shí)間較短,但是在還原數(shù)據(jù)時(shí),除了先要還原完整備份之外,還要依次還原每個(gè)事務(wù)日志備份,而不是只還原最后一個(gè)事務(wù)日志備份(這是與差異備份的區(qū)別)。
◆ 文件和文件組備份。如果在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),為數(shù)據(jù)庫(kù)創(chuàng)建了多個(gè)數(shù)據(jù)庫(kù)文件或文件組,可以使用該備份方式。使用文件和文件組備份方式可以只備份數(shù)據(jù)庫(kù)中的某些文件,該備份方式在數(shù)據(jù)庫(kù)文件非常龐大時(shí)十分有效,由于每次只備份一個(gè)或幾個(gè)文件或文件組,可以分多次來(lái)備份數(shù)據(jù)庫(kù),避免大型數(shù)據(jù)庫(kù)備份的時(shí)間過(guò)長(zhǎng)。另外,由于文件和文件組備份只備份其中一個(gè)或多個(gè)數(shù)據(jù)文件,當(dāng)數(shù)據(jù)庫(kù)里的某個(gè)或某些文件損壞時(shí),可能只還原損壞的文件或文件組備份。
完整備份可能比較好理解。例如,在2012年1月1日早上8點(diǎn)進(jìn)行了完整備份,那么將來(lái)在還原時(shí),就可以恢復(fù)到2012年1月有1日早上8點(diǎn)時(shí)的數(shù)據(jù)庫(kù)狀態(tài)。
差異備份是備份完整備份后的數(shù)據(jù)變動(dòng)情況。例如,在2012年1月1日早上8點(diǎn)進(jìn)行了完整備份后,在1月2日和1月3日又分別進(jìn)行了差異備份,那么在1月2日的差異備份里記錄的是從1月1日到1月2日這一段時(shí)間里的數(shù)據(jù)變動(dòng)情況,而在1月3日的差異備份里記錄的是從1月1日到1月3日這一段時(shí)間里的數(shù)據(jù)變動(dòng)情況。因此,如果要還原到1月3日的狀態(tài),只要先還原1月1日做的完整備份,再還原1月3日做的差異備份就可以了。
事務(wù)日志備份是以事務(wù)日志文件作為備份對(duì)象,相當(dāng)于將數(shù)據(jù)庫(kù)里的每一個(gè)操作都記錄下來(lái)了。假設(shè)在2012年1月1日早上8點(diǎn)進(jìn)行了完整備份后,到1月2日早上8點(diǎn)為止,數(shù)據(jù)庫(kù)里的數(shù)據(jù)變動(dòng)了100次,如果此時(shí)做了差異備份,那么差異備份記錄的是第100次數(shù)據(jù)變動(dòng)后的數(shù)據(jù)庫(kù)狀態(tài),而如果此時(shí)做了事務(wù)日志備份,備份的將是這100次的數(shù)據(jù)變動(dòng)情況。
再舉一個(gè)例子,例如在2012年1月1日早上8點(diǎn)進(jìn)行了完整備份后,在1月2日和1月3日又進(jìn)行了事務(wù)日志備份,那么在1月2日的事務(wù)日志備份里記錄的是從1月1日到1月2日這一段時(shí)間里的數(shù)據(jù)變動(dòng)情況,而在1月3日的事務(wù)日志備份里記錄的是從1月2日到1月3日這一段時(shí)間里的數(shù)據(jù)變動(dòng)情況。因此,如果要還原到1月3日的數(shù)據(jù),需要先還原1月1日做的完整備份,再還原1月2日做的事務(wù)日志備份,最后還要還原1月3日所做的事務(wù)日志備份。
了解了以上數(shù)據(jù)庫(kù)備份方式后,便可以針對(duì)自己的數(shù)據(jù)庫(kù)利用以上方式來(lái)備份數(shù)據(jù)庫(kù)了。合理備份數(shù)據(jù)庫(kù)需要考慮幾方面,首先是數(shù)據(jù)安全,其次是備份文件大小,最后是做備份和還原能承受的時(shí)間范圍。
例如,如果數(shù)據(jù)庫(kù)里每天變動(dòng)的數(shù)據(jù)量很小,可以每周(周日)做一次完整備份,以后的每天(下班前)做一次事務(wù)日志備份,那么一旦數(shù)據(jù)庫(kù)發(fā)生問(wèn)題,可以將數(shù)據(jù)恢復(fù)到前一天(下班時(shí))的狀態(tài)。
當(dāng)然,也可以在周日時(shí)做一次完整備份,周一到周六每天下班前做一次差異備份,這樣一旦數(shù)據(jù)庫(kù)發(fā)生問(wèn)題,同樣可以將數(shù)據(jù)恢復(fù)到前一天下班時(shí)的狀態(tài)。只是一周的后幾天做差異備份時(shí),備份的時(shí)間和備份的文件都會(huì)跟著增加。但這也有一個(gè)好處,在數(shù)據(jù)損壞時(shí),只要恢復(fù)完整備份的數(shù)據(jù)和前一天差異備份的數(shù)據(jù)即可,不需要去恢復(fù)每一天的事務(wù)日志備份,恢復(fù)的時(shí)間會(huì)比較短。
如果數(shù)據(jù)庫(kù)里的數(shù)據(jù)變動(dòng)得比較頻繁,損失一個(gè)小時(shí)的數(shù)據(jù)都是十分嚴(yán)重的損失時(shí),用上面的辦法備份數(shù)據(jù)就不可行了,此時(shí)可以交替使用三種備份方式來(lái)備份數(shù)據(jù)庫(kù)。
例如,每天下班時(shí)做一次完整備份,在兩次完整備份之間每隔八小時(shí)做一次差異備份,在兩次差異備份之間每隔一小時(shí)做一次事務(wù)日志備份。如此一來(lái),一旦數(shù)據(jù)損壞可以將數(shù)據(jù)恢復(fù)到最近一個(gè)小時(shí)以?xún)?nèi)的狀態(tài),同時(shí)又能減少數(shù)據(jù)庫(kù)備份數(shù)據(jù)的時(shí)間和備份數(shù)據(jù)文件的大小。
在前面還提到過(guò)當(dāng)數(shù)據(jù)庫(kù)文件過(guò)大不易備份時(shí),可以分別備份數(shù)據(jù)庫(kù)文件或文件組,將一個(gè)數(shù)據(jù)庫(kù)分多次備份。在現(xiàn)實(shí)操作中,還有一種情況可以使用到數(shù)據(jù)庫(kù)文件的備份。例如在一個(gè)數(shù)據(jù)庫(kù)中,某些表里的數(shù)據(jù)變動(dòng)得很少,而某些表里的數(shù)據(jù)卻經(jīng)常改變,那么可以考慮將這些數(shù)據(jù)表分別存儲(chǔ)在不同的文件或文件組里,然后通過(guò)不同的備份頻率來(lái)備份這些文件和文件組。但使用文件和文件組來(lái)進(jìn)行備份,還原數(shù)據(jù)時(shí)也要分多次才能將整個(gè)數(shù)據(jù)庫(kù)還原完畢,所以除非數(shù)據(jù)庫(kù)文件大到備份困難,否則不要使用該備份方式。
針對(duì)以上備份方案,能看出數(shù)據(jù)還是不完整嗎?比如昨天夜間12點(diǎn)做了完整備份,每隔一小時(shí)做了一次事務(wù)日志備份,最后一次事務(wù)日志備份是今天中午12點(diǎn),現(xiàn)在是今天中午12點(diǎn)10分,發(fā)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)遭到丟失或破壞,可最后一次事務(wù)日志備份是今天中午12點(diǎn),如果我此時(shí)將數(shù)據(jù)庫(kù)恢復(fù)到12點(diǎn),那么12點(diǎn)后至12點(diǎn)10分前沒(méi)遭到破壞的操作數(shù)據(jù)將丟失(比如數(shù)據(jù)庫(kù)有三個(gè)表,一個(gè)表的數(shù)據(jù)遭到破壞,其它兩個(gè)表的數(shù)據(jù)被其它用戶(hù)變動(dòng))。此時(shí)就要用到【尾部日志備份】,尾部日志備份原理是從最后一次事務(wù)日志備份的時(shí)間點(diǎn)開(kāi)始,將之后的所有操作進(jìn)行備份,還原時(shí)便可以找到12點(diǎn)后操作的正確數(shù)據(jù)了。
注:進(jìn)行尾部日志備份時(shí),數(shù)據(jù)庫(kù)將強(qiáng)制停止數(shù)據(jù)庫(kù),此時(shí)如果不停止數(shù)據(jù)庫(kù),還有用戶(hù)繼續(xù)操作,尾部日志備份將失去意義。SQL Server 2012如果你最后一次備份事務(wù)日志后,對(duì)數(shù)據(jù)進(jìn)行過(guò)改動(dòng),即發(fā)生過(guò)事務(wù)日志(也就是當(dāng)前日志文件記錄的LSN(日志序列號(hào))大于最后一次事務(wù)日志備份里記錄的最大LSN,SQL Server通過(guò)LSN來(lái)區(qū)分日志的記錄),并尚未對(duì)尾部日志備份,它會(huì)提示并要求你必須先做尾部備份。
實(shí)例部分:
◆ 首先進(jìn)行完整備份【MyTest.bak】,然后再基于此備份文件進(jìn)行兩次事務(wù)日志備份,最后一次事務(wù)日志備份時(shí)間為【2012-8-4 23:07】
圖1-1:備份文件名為【MyTest.bak】,最后一次事務(wù)日志備份時(shí)間為【2012-8-4 23:07】
圖1-2:選擇備份文件“MyTest.bak”后,此時(shí)能看到“要還原的備份集”列表里顯示有備份文件,分別列出了完整備份文件和兩次事務(wù)日志備份。
如果事務(wù)日志備份有兩次,分別是“事務(wù)日志1”、“事務(wù)日志2”,那么在還原時(shí)去掉“事務(wù)日志1”復(fù)選框,“事務(wù)日志2”也會(huì)自動(dòng)去掉,但只去掉“事務(wù)日志2”是允許的,這也充分驗(yàn)證了上文講到的:“在還原數(shù)據(jù)時(shí),除了先要還原完整備份之外,還要依次還原每個(gè)事務(wù)日志備份,而不是只還原最后一個(gè)事務(wù)日志備份”,不比差異備份可以基于完整備份,只還原最后一次差異備份即可。
圖1-3:我【2012-08-04 23:36:53】插入一條數(shù)據(jù),【2012-08-04 23:37:44】又做了一次事務(wù)日志備份3,然后再將時(shí)間點(diǎn)還原到【2012-08-04 23:36:00】,還原后,此時(shí)間點(diǎn)后的數(shù)據(jù)就沒(méi)有了。
【注意:在還原時(shí)會(huì)提示數(shù)據(jù)庫(kù)正在使用,一般要斷開(kāi)全部連接后,才能進(jìn)行還原。我一般使用腳本將數(shù)據(jù)脫機(jī)再聯(lián)機(jī),所有連接將會(huì)全部斷開(kāi)】
alter database MyTest set offline with ROLLBACK IMMEDIATE--脫機(jī)
alter database MyTest set online with ROLLBACK IMMEDIATE--聯(lián)機(jī)
圖2-1:備份文件名為【MyTestA.bak】,備份時(shí)間為【2012-8-4 22:33】
圖2-2:先選擇最后一次完整備份文件MyTestA,此時(shí)能看到“要還原的備份集”列表里顯示有備份文件,然后再點(diǎn)“時(shí)間線”按鈕進(jìn)入“備份時(shí)間線”界面,將最后一次完整備份時(shí)間由“22:33:41”改為它之前任何一個(gè)時(shí)間點(diǎn),如改為“22:32:41”,然后再確定,會(huì)看到圖2-3的效果。
圖2-3:只要基于完整備份再還原到某個(gè)時(shí)間點(diǎn)是不允許的,因?yàn)橥暾麄浞莺鬀](méi)做過(guò)任何差異備份或事務(wù)日志備份。此時(shí)能看到“要還原的備份集”列表里顯示為空,無(wú)法進(jìn)行還原。
- Sqlserver事務(wù)備份和還原的實(shí)例代碼(必看)
- sqlserver數(shù)據(jù)庫(kù)高版本備份還原為低版本的方法
- SqlServer高版本數(shù)據(jù)備份還原到低版本
- sqlserver還原數(shù)據(jù)庫(kù)的時(shí)候出現(xiàn)提示無(wú)法打開(kāi)備份設(shè)備的解決方法(設(shè)備出現(xiàn)錯(cuò)誤或設(shè)備脫)
- 企業(yè)管理器備份和還原SQL Server數(shù)據(jù)庫(kù)
- SQL Server 2008 備份數(shù)據(jù)庫(kù)、還原數(shù)據(jù)庫(kù)的方法
- sql server 2000數(shù)據(jù)庫(kù)備份還原的圖文教程
- sql server 2005數(shù)據(jù)庫(kù)備份還原圖文教程
- SQLSERVER數(shù)據(jù)庫(kù)備份后無(wú)法還原的解決辦法
- SQL Server2012數(shù)據(jù)庫(kù)備份和還原的教程
相關(guān)文章
SQL?Server數(shù)據(jù)庫(kù)表的創(chuàng)建與管理操作大全
這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫(kù)表的創(chuàng)建與管理操作的相關(guān)資料,?SQL?Server是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它可以幫助用戶(hù)創(chuàng)建、管理和查詢(xún)數(shù)據(jù),文中介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01sql server數(shù)據(jù)庫(kù)中raiserror函數(shù)用法的詳細(xì)介紹
這篇文章主要介紹了sql server數(shù)據(jù)庫(kù)中raiserror函數(shù)用法的詳細(xì)介紹,raiserror用于拋出一個(gè)異?;蝈e(cuò)誤,讓這個(gè)錯(cuò)誤可以被程序捕捉到。對(duì)此感興趣的可以了解一下2020-07-07詳解安裝sql2012出現(xiàn)錯(cuò)誤could not open key...解決辦法
這篇文章主要介紹了詳解安裝sql2012出現(xiàn)錯(cuò)誤could not open key...解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11SqlServer如何通過(guò)SQL語(yǔ)句獲取處理器(CPU)、內(nèi)存(Memory)、磁盤(pán)(Disk)以及操作系統(tǒng)相關(guān)信息
這篇文章主要介紹了SqlServer如何通過(guò)SQL語(yǔ)句獲取處理器(CPU)、內(nèi)存(Memory)、磁盤(pán)(Disk)以及操作系統(tǒng)相關(guān)信息的相關(guān)資料,需要的朋友可以參考下2015-11-11SQL 比較一個(gè)集合是否在另一個(gè)集合里存在的方法分享
SQL 比較一個(gè)集合是否在另一個(gè)集合里存在的方法分享,需要的朋友可以參考下。2011-11-11Sql Server 如何去掉內(nèi)容里面的Html標(biāo)簽
這篇文章主要介紹了Sql Server 去掉內(nèi)容里邊的Html標(biāo)簽的實(shí)現(xiàn)方法,代碼超簡(jiǎn)單,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05CentOS安裝SQL Server vNext CTP1教程
這篇文章主要為大家詳細(xì)介紹了CentOS上安裝SQL Server vNext CTP1的相關(guān)過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11SQL Server 分頁(yè)查詢(xún)存儲(chǔ)過(guò)程代碼
SQL Server分頁(yè)查詢(xún)存儲(chǔ)過(guò)程,對(duì)于想使用存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)的朋友可以參考下。2010-05-05全國(guó)省市區(qū)縣最全最新數(shù)據(jù)表(數(shù)據(jù)來(lái)源谷歌)
因?yàn)楣ぷ黜?xiàng)目需求,需要一個(gè)城市縣區(qū)數(shù)據(jù)表,上網(wǎng)搜了下,基本都不全,所以花了3天時(shí)間整理了一遍.2010-04-04