SQL Server 備份和還原
SQL Server 備份
恢復模式
SQL Server 數(shù)據(jù)恢復模式分為三種:完整恢復模式、大容量日志恢復模式、簡單恢復模式。

完整恢復模式
默認的恢復模式,它會完整記錄下操作數(shù)據(jù)庫的每一個步驟,使用完整恢復模式可以將一個數(shù)據(jù)庫恢復到一個特定的時間點,這個時間點可以是最近一次可用的備份、一個特定的日期和時間的事務。
大容量日志恢復模式
它是對完整恢復模式的補充,就是要對大容量操作進行最小日志記錄,節(jié)省日志文件的空間。
比如說一次在數(shù)據(jù)庫中插入幾十萬條記錄時,如果是完整恢復模式會記錄每一個插入動作,使日志文件變的非常大。在大容量日志恢復模式下,只記錄必要操作,不記錄所有日志,這樣可以提高數(shù)據(jù)庫性能。但是由于日志記錄不完整,一旦出現(xiàn)問題,數(shù)據(jù)將可能無法恢復。
因此,一般只有在操作大量數(shù)據(jù)的時候才將恢復模式改為大容量日志恢復模式,在數(shù)據(jù)處理完畢后,馬上將恢復模式改回完整數(shù)據(jù)庫模式。
簡單恢復模式
簡單恢復模式下,數(shù)據(jù)庫會自動把不活動的日志刪除,因此簡化了備份的還原,但因為沒有日志備份,所以不能恢復到失敗的時間點。通常,這個模式只用于對數(shù)據(jù)庫安全要求不太高的數(shù)據(jù)庫。并且數(shù)據(jù)庫只能做完整和差異備份,無法使用事務日志備份。
數(shù)據(jù)庫備份
SQL Server 提供了四種備份模式:完整備份,差異備份,事務日志備份,文件和文件組備份。

完整備份
備份整個數(shù)據(jù)庫的所有內(nèi)容,包括事務日志。該備份類型需要比較大的存儲空間來存儲備份文件,備份時間也比較長,在還原數(shù)據(jù)庫時,也只要還原一個備份文件即可。
如:2015年1月1日 8點進行了完整備份,那么恢復數(shù)據(jù)的時候就是恢復到2015年1月1日 8點的數(shù)據(jù)。
差異備份
差異備份是完整備份的補充,只備份上次完整備份后更改的數(shù)據(jù)。相對于完整備份來說,差異備份的數(shù)據(jù)量比完整數(shù)據(jù)備份小,備份的速度也比完整備份要快。因此,差異備份通常座位常用的備份方式。在還原數(shù)據(jù)時,要先還原前一次的完整備份,然后還原***一次所做的差異備份。
如:2015年1月1日 8點進行了完整備份,在1月2日 和1月3日又分別進行了差異備份,那么1月2日記錄的是1-2的數(shù)據(jù),1月3日則是1-3的數(shù)據(jù)。因此在還原時,如果想回到3日的狀態(tài),需要先恢復完整備份,然后還原1月3日的差異備份即可。
事務日志備份
事務日志備份只備份事務日志里的內(nèi)容,事務日志記錄了上一次完整備份或事務日志備份后數(shù)據(jù)庫的所有變動過程。事務日志記錄的是某一段時間內(nèi)的數(shù)據(jù)庫變動情況,因此在進行事務日志備份之前,必須要進行完整備份。與差異備份類似,事務日志備份生成的文件嬌小、占用時間較短,但是在還原數(shù)據(jù)庫時,除了要線還原完整備份外,還要依次還原每個事務日志備份,而不是還原***一個。
如:2015年1月1日 8點進行了完整備份,此時對數(shù)據(jù)庫做的所有改動都會按照時間分批存儲在事務日志備份中,這樣可以還原到某個時間點,使用SSMS可以自動完整相關時間鏈。
文件和文件組備份
如果在創(chuàng)建數(shù)據(jù)庫時,為數(shù)據(jù)庫創(chuàng)建了多個數(shù)據(jù)庫文件或文件組,可以使用該方式。使用文件和文件組備份方式可以只備份數(shù)據(jù)庫中的某些文件,該備份方式在數(shù)據(jù)庫文件非常龐大時非常有效,由于每次備份一個或幾個文件,可以分多次來備份數(shù)據(jù)庫,避免大型數(shù)據(jù)庫備份的時間過長。另外,當某個文件損壞時,可以只還原損壞的文件或文件組部分。
進行完整備份





備份完成后,去選擇的目錄中查看文件。

- --完整備份
- select count(*) from news
- --79647
此時插入測試數(shù)據(jù),并執(zhí)行差異備份
- --插入測試數(shù)據(jù)
- declare @index int = 1
- while (@index <100)
- begin
- insert into news (title,content,datetime) values ('title' + cast(@index as varchar),'content',getdate())
- set @index = @index +1
- end
- select count(*) from news
- --79746

查看目錄,文件已經(jīng)變大了。

繼續(xù)插入測試數(shù)據(jù),并執(zhí)行事務日志備份
- --插入測試數(shù)據(jù)
- declare @index int = 1
- while (@index <100)
- begin
- insert into news (title,content,datetime) values ('title' + cast(@index as varchar),'content',getdate())
- set @index = @index +1
- end
- select count(*) from news
- --79845

目錄下的文件又變大了,我就不截圖了。
此時刪除所有數(shù)據(jù)
- --刪除數(shù)據(jù)
- delete news
- --0
SQL Server 還原
還原數(shù)據(jù)庫時,如果必須還原一個完整備份、一個差異備份以及一個事務日志備份,則必須按照這個順序來還原。
在還原數(shù)據(jù)庫時,數(shù)據(jù)庫處于一個不可用的狀態(tài),如此就可以添加后續(xù)的差異和事務日志備份了。
使用SSMS工具恢復,可以自動識別一個完整的備份鏈,從而根據(jù)指定的內(nèi)容還原全部備份,還原后數(shù)據(jù)庫就可用了。








select count(*) from news
--79845
執(zhí)行sql語句,數(shù)據(jù)還原到***一次有效的事務日志備份了。
關于備份還有一個小東西,備份設置,可以設置好物理路徑,存?zhèn)€邏輯名,備份的時候選擇這個名字,不用去找路徑。




唯一一點作用就是可以看里面詳細的備份信息