SQL Server 2019備份恢復總結

2021-09-05 15:53:25 字數 4636 閱讀 2196

一、資料庫儲存概述

1、資料檔案型別

·primary data files:每個資料庫都有乙個單獨的主要資料檔案,預設以.mdf副檔名。

主要資料檔案不僅包含資料資訊,還包含與該資料庫結構相關的資訊。建立資料庫時,資料庫結構相關資訊不僅存在於master資料庫中,同時還包含在primary data file上.

· secondary data files乙個資料庫可以有乙個或者多個二級資料檔案,預設以.ndf為副檔名。一般來說二級資料檔案並不是必須的,因為二級資料檔案不包含檔案位置等資訊。

·transaction logs: 資料庫必須至少有乙個事務日誌檔案,預設以.ldf為副檔名。日誌是整個資料庫的命脈,事務日誌不可讀的話,將無法對資料庫進行任何操作。

當你在資料庫上進行資料操作時,資料並不是直接寫入資料檔案,而是先將相關操作資訊寫入事務日誌檔案。當乙個事務結束時,該事務被標記為已提交,但這也並不意味著資料從日誌檔案寫入了資料檔案中。乙個標記為已提交的事務僅僅意味著所有與該事務相關的元素已經成功完成。

the buffer cache may be updated, but not necessarily the data file.

檢查點(checkpoint)會週期性的發生。檢查點發生時,是確認所有已提交的事務,不管是在buffer cache或者事務日誌中,都被寫入相關的資料檔案中。檢查點(checkpoint)可以通過以下方式來觸發:

1、 顯示呼叫checkpoint命令;

2、 recover interval 例項設定的週期達到(用來標識多久發生一次checkpoint)

3、 做了資料庫備份(在簡單模式下);

4、 資料庫檔案結構被改變(在簡單模式下);

5、 資料庫引擎被結束。

一般來說,寫資料的過程是由系統自動完成的,如下圖所示,但資料並不是直接寫入.mdf或者.ndf檔案中,而是先寫入事務日誌中。

1.使用者執行insert, update, delete等語句;

2.資料立即被寫入內部日誌快取中(internal log cache)

3.日誌快取會更新物理事務日誌檔案,同時將在buffer cache上執行相關變化

4.資料快取(data buffer)清除所有在快取上的髒資料,資料檔案被更新。

1、恢復模式型別

所有的資料庫都可以設定為三個不同的恢復模式:簡單(******), 完全(full),大容量日誌(bulk-logged).

a完全恢復模式

完全恢復模式是預設的恢復模式。在完全恢復模式下,需要手工的對事務日誌進行管理。使用完全恢復模式的優點是可以恢復到資料庫失敗或者指定的時間點上。

缺點則是,如果沒有進行管理的話,事務日誌將會快速增長,消耗磁碟空間。要清除事務日誌,只能通過備份事務日誌,或者切換至簡單模式。

如上圖所示,在完全恢復模式下,事務日誌會持續增長,而不管checkpoint的發生。

b簡單恢復模式

與完全恢復模式不同的是,在簡單恢復模式下,在檢查點發生時(checkpoint),當前已被提交的事務日誌將會被清除。

如上圖所示,在檢查點發生時,所有已提交的事務日誌資訊將會從事務日誌裡面刪除。因此,在簡單恢復模式下,容易造成資料丟失,因為無法將資料庫恢復到失敗的那一刻。

需要注意的是,雖然在簡單恢復模式下,系統會自動定期清除日誌,但這並不意味著事務日誌檔案不會增長。例如,如果執行乙個批量插入操作時,sql server會將該相關操作當成乙個事務,期間產生的日誌量在極端情況下,還是非常可觀的。

c大容量日誌恢復模式

大容量日誌恢復模式與完全恢復模式非常相似,但與完全恢復模式不同的是,批量操作將會盡量被最少記錄。

批量操作有以下幾種型別:

1.批量匯入資料,例如使用bcp(bulk copy import) , bulk insert命令 ,或者是在bulk使用openrowset命令;

2.大物件操作(lob),例如在text, ntext, image 列上使用writetext 或者updatetext;

3. select into 字句;

4. create index, alter index, alter index rebuild, dbcc reindex

在完全恢復模式下,上述操作產生的日誌將會是非常大的。而使用大容量日誌恢復模式將會阻止不需要或者非預期的日誌增長。

在批量操作發生時,sql server僅僅記錄了相關資料頁(data page)的id, 在sql server中,sql server pages 都有內部 id,如5:547。用這種方式,能夠將大量的page id記錄在小的日誌檔案裡。

使用大容量日誌恢復模式,將會使資料倉儲或者有大批量操作的資料庫減少很大的空間。但使用大容量恢復模式時,會使得恢復變得比較困難,一般來說,只能恢復到最後的事務日誌備份點上,但如果所有的事務日誌都被備份後,還是可以恢復成功的。

只要在必要時才使用大容量恢復模式,而且使用完成後,還需切換至完全恢復模式,同時進行備份。

2、改變恢復模式

改變資料庫的恢復模式,可以通過以下語句來實現:

alter database database_name set recovey bulk_logged

也可以通過gui介面來修改。

改變恢復模式並不需要重啟資料庫例項。

二、資料庫備份介紹

1、備份位置

在sql server上,有多種備份位置可以選擇,如本地磁碟,網路磁碟,遠端位址,磁帶等。

各種備份位置均有自己的優點和缺點。

2、邏輯備份裝置

在sql server上,可以通過建立邏輯備份裝置來完成備份。使用邏輯備份裝置的好處是,當變更備份位址時,不需要更改備份指令碼,只需要更改邏輯備份裝置的定義即可。

建立邏輯備份裝置的指令碼如下:

exec sp_adddumpdevice @devtype=』disk』,@logicalname=』mybackup』,

@physicalname=』d:\backup\mydb.bak』

刪除備份裝置的指令碼:

sp_dropdevice @logicalname=』mybackup』

上述指令碼只是刪除邏輯備份裝置的定義,下述指令碼將同時刪除備份檔案:

sp_dropdevice @logicalname=』mybackup』,@devfile=』delfile』

使用邏輯備份裝置的方法如下:

backup database mydb to mybackup

當然,還可在邏輯備份裝置上指定過期時間等備份屬性,如:

backup database mydb to mybackup with expiredate=』13/01/2010』

或: backup database mydb to mybackup with retaindays=7

3、備份集與儲存集

每乙份備份包含於乙個備份集,而乙個備份集包含於乙個儲存集。通過系統gui進行備份時,sql server會自動指定備份集和儲存集,目的則是為了簡化管理。用t-sql顯示指定則用如下語法:

backup database mydb to mybackup with retaindays=7,

name=』full』,

medianame=』allbackups』

names是指備份集名稱,medianame是指儲存集名稱。

4、全備份

不管恢復模式是哪乙個,所有的備份都必須要有乙個全備份,特別是日誌備份和差異備份,如果沒有全備份的話,將無法進行恢復。

簡單的全備份指令碼如下所示,也可以通過維護計畫來指定全備份:

backup database mydb to disk=』d:\backup\mydb.bak』

但需要注意的是,上述命令是將資料庫備份附加到當前的存在的檔案上,如果不存在則建立它,並不會覆蓋原有檔案。要覆蓋同名的備份檔案,需要指定init引數。

backup database mydb to disk=』d:\backup\mydb.bak』 with init

5、日誌備份

在完全恢復模式或者大容量日誌恢復模式下,日誌備份不僅僅是恢復的需要,同時也是手工管理事務日誌檔案的一種方式。如果從不進行備份的話,在完全恢復模式或者大容量恢復模式下,事務日誌將會持續增長,直至消耗完所在磁碟。

日誌備份的指令碼如下:

backup log mydb_log to disk=』d:\backup\mydb.trn』

需要養成使用.trn為日誌備份的副檔名的習慣。

每個在資料庫上的動作都會被安排乙個log sequence number (lsn)。如果需要還原到指定的時間點,需要有持續的lsn記錄。也就是說,在完全恢復模式或者大容量日誌模式下,乙個不被打斷的事務日誌備份鏈是恢復資料庫的基本要求。

6、差異備份

backup database mydb to disk=』d:\backup\mydb.dif』 with differential,init

進行資料庫恢復時,先恢復資料庫全備份,再恢復資料庫差異備份,最後才恢復日誌備份。

差異備份是與上一次全備份緊密相連的,不管期間有多少次日誌備份和差異備份,差異備份還是會從上一次全備開始備份。因此,經常會遇到這樣的一種情況,在生產庫上需要臨時使用資料庫時,便用backup database … to disk=』..』進行了乙個備份,下一次的差異備份便會以這回的全備為準,如果過後把這個臨時全備刪除掉後,後面的差異備份就沒用了。

差異備份並不意味著磁碟空間肯定會少,這取決於實際情況。當期間大量操作發生時,差異備份還是會變得很大。

SQL Server 2019中的資料型別總結

sql server表中的每乙個欄位都只能包含乙個預先指定的特定資料型別,例如字元或數字。這個宣告叫做資料型別。在這篇文章裡,我們將比較和對照sql server 2008的各種資料型別。此外,我們還將展示各種特定環境下哪種資料型別是最好的解決方法。在sql server 2008中有超過35種的不...

SQL Server 2019高可用性解決方案優劣分析

在sql server 2008資料庫中,本身就帶有不少的高可用性解決方案。如可以採用故障轉移群集 資料庫映象 日誌傳送或者複製等手段來提高資料庫的高可用性。由於解決方案多了,資料庫管理員不得不掌握各個解決方案的優點與缺陷,然後根據企業的實際應用來選擇合適的解決方案。其實,這不僅僅是在考驗解決方案的...

SQL Server 2019連線字串寫法大全

一 net framework data provider for sql server 型別 net framework類庫 使用 system.data.sqlclient.sqlconnection 廠商 microsoft 標準安全連線 data source myserveraddress...