在談到SQL Server的高可用性之前,我們首先要談一談單實例的高可用性。在單實例的高可用性中,不可忽略的就是文件和文件組的高可用性。SQL Server允許在某些文件損壞或離線的情況下,允許數據庫依然保持部分在線,從而保證了高可用性。
文件和文件組
有關文件和文件組的基本概念,有很多文章已經闡述過了。這裡我只是提一下,文件組作為SQL Server訪問文件的一個抽象層而存在。因此SQL Server上所做的操作不是直接針對文件,而是針對文件組。
使用多個文件組和文件不僅僅是為了分散IO和提高性能,還有高可用性方面的原因。有關一個數據庫應該包含幾個文件或文件組,Paul Randal已經做過非常棒的闡述,請參閱:http://www.sqlskills.com/blogs/paul/files-and-filegroups-survey-results/。
數據庫中使用多個文件或文件組在高可用性方面的好處包括:
某文件的IO損壞,數據庫還可以保證部分在線。
將索引和表分開存放,假如索引文件不在線,數據依然可以被訪問。
歷史數據和熱數據分開,歷史歸檔數據損壞,不影響熱數據。
分開數據文件使得在災難恢復時僅僅恢復部分數據從而縮短了宕機時間
數據庫分為多個文件使得可以通過增加文件或移動文件的方式解決空間不足的問題
文件
在SQL Server中,文件分為三類,分別為:
主數據文件
輔助數據文件
日志文件
其中,主數據文件默認以擴展名mdf結尾,輔助數據庫文件默認以ndf結尾,日志文件以ldf結尾。雖然擴展名是可以修改的,但強烈建議不要去改擴展名。
上面提到文件名值得是物理文件名,但是實際上在SQL Server中進行操作,操作的是邏輯文件名。
任何時間,文件都會處於某一種狀態,這些狀態包括:
在線
離線
恢復中
還原掛起
質疑
可以通過sys.database_files這個DMV來查看數據庫文件中包含狀態在內的相關信息,如圖1所示。
圖1.查看數據庫中文件的狀態等相關信息
你甚至可以在數據庫缺少NDF文件時附加數據庫,具體細節,請參閱MCM黃大師的一篇文章:http://www.sqlnotes.info/2013/05/07/attach-database-with-missing-ndf-file/。