在谈到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/。