《大话数据库》 -- 第二章 创建和维护数据库
一、DBMS系统数据库
所谓系统数据库就是存储DBMS本身运行所需要的全部数据的数据库。

二、T-SQL创建数据库(P25)
创建数据库(主文件mdf、次要数据文件ndf、文件组、自动增长)等等详见P25页。
另外可参见《传智播客SQL+ADO摘抄》
三、文件、文件组
文件和文件组的内容详见P28-P33
1、文件
数据库文件大小是有限制的,取决于硬盘大小。如果创建数据库时不指定maxsize,那么就默认用系统数据库model中设置的大小。如果maxsize指定为unlimited,则会一直到把整个硬盘占满为止。
(1)主要数据文件: 每个数据库只有一个主要数据文件.mdf
(2)次要数据文件: 即.ndf是可选的,可用于将数据分散到多个磁盘上。
另外如果数据库超过了单个Windows文件的最大限制,可以使用次要数据文件,这样数据库就能继续增长。
(3)日志文件: 即.ldf保存对数据库操作的记录。
2、文件组
每个数据库只有一个主要文件组primary,该组包含主要数据文件和未放入其它文件组的所有次要数据文件。
可以创建用户定义的文件组,用于将数据文件集合起来,以便管理、数据分配和放置。
3、通过文件组来管理文件
使用文件组可以隔离用户对文件的依赖,用户仅仅针对文件组来创建表,而不用关心实际磁盘中的文件情况。
另外使用文件组管理文件,可以使同一组的文件分布在不同的硬盘上,利用硬盘IO并行处理。从而提高性能。
四、文件组的填充策略和优化方案
1、文件组的填充策略
文件组对组内的所有数据文件都使用按比例填充的策略
当数据写入文件组(表是与文件组关联的,而非文件)时,SQLServer引擎按文件中的可用空间比例将数据写入文件组中的每个文件,而不是将所有数据都写入第一个文件直至其填满再写入下一个文件。
例如,实际上数据库引擎是这么做的:如果文件f1还有100MB可用,f2还有200MB可用,则引擎从f1中分配一个区,从f2分配两个区,以此类推。这样两个文件几乎同时填满,并且可获得简单的条带化。
如果数据库是自动增长的,则当文件组中的所有文件填满后,数据库引擎便会采用循环方式一次自动扩展一个文件以容纳更多的数据。
例如:某个文件组由3个文件组成(都是自动增长)。当文件组中所有文件的空间用完,只扩展第一个文件,第一个满了再扩展第二个文件...。直到3个文件全满了。再拐回来扩展第一个文件,以此类推,循环扩展。
2、优化方案
(1)可以将文件组中的文件分散到多个硬盘上,当对数据进行访问的时候,多个读/写磁头可以同时并行地访问数据,加快数据库操作速度。
(2)可以将特定表(比如电商的Order表、物流信息表)创建到特定文件组,而把该文件组的所有文件存放在高速硬盘上。这样提升特定表的访问速度。
五、扩展数据库大小
数据库空间填满时,会报1005错误:请删除不需要的文件,删除文件组中的对象...以便增加可用磁盘空间。这时就必须扩展数据库。
方式有3种:1、设置数据库自动增长
2、修改数据库文件Maxsize值
3、为数据库增加新的次要数据文件和日志(一般用此方式)
六、收缩数据库
场景:比如我们一次把系统中10年前的数据全部删除或者转移了,只保留最近3年的数据。那么数据库必然会空出很多空间。还有种情况,是设计数据库的时候因为某种不确定因素,设计过大,后来发现用不上或者必须收缩。那么这就需要用到数据库收缩功能。
1、自动收缩(很少使用)
数据库——右键属性——选项——自动收缩设置为true
2、收缩文件
数据库——右键属性——收缩——文件
收缩操作可做以下选择:
(1)释放未使用的空间:将该文件中未使用的空间释放出来,数据在文件中不移动。
(2)在释放未使用的空间前重新组织页:此选项可以将文件收缩到“指定大小”,并将数据重新组织。其最小值为数据库“实际使用的空间”
(3)通过将数据迁移到同一文件组的其他文件来清空文件(这种很少用)
3、收缩数据库
数据库——右键任务——收缩——数据库
即同时收缩所有“数据库文件”和“日志文件”
收缩操作:
收缩后的最大可用空间:设为0%,即收缩所有的可用空间。
七、数据库快照
1、概念
快照是数据库在某个时间点的只读静态视图。换句话说,快照可以理解为一个只读数据库。
主要用途如下:
(1)提供了数据库某一个时间点的静态视图,主要为报表提供服务。
(2)可利用数据库快照来恢复数据库,相比备份恢复来说,速度会大大提高。
(3)和数据库镜像结合使用,提供读写分离。
(4)作为软件测试环境或数据变更前的备份,比如大批导入或删除数据前,或将数据提供给测试人员进行测试前,做一个快照。
如果出现问题或是测试结束,可以利用快照恢复到创建时的状态。
2、快照原理
快照并不复制整个数据库的页,而是仅仅复制在快照建立之后改变的页(复制或写)。因此当利用快照进行数据库恢复时,也仅仅将那些做出改变的页恢复到源数据库。这个速度无疑会大大高于备份恢复的方式。
但是随着快照存在的时间越来越长,快照会不断增长。所以推荐在快照达到源数据库大小的30%之前,重新创建快照。
快照不能当做常规的定期数据库备份。(该备份还是做好备份)
3、创建快照

八、数据库的分离和附加
目的:移动数据库文件、或者将数据库更改到同一计算机不同SQLServer实例。
详见《SQL Server 数据库分离和附加 and 脱机和联机》
九、数据库的脱机和联机
目的:主要用来复制数据库文件等。联机状态下不能复制数据库文件(不能对之进行任何文件操作)
详见《SQL Server 数据库分离和附加 and 脱机和联机》
十、备份和还原数据库
详见《SQL Server 数据库分离和附加 and 脱机和联机》
浙公网安备 33010602011771号