关于MS SQL Server数据库文件

关于数据库文件
从总体来看,数据库文件包括如下一些文件:
·         一个主数据文件(.mdf
·         0 个或多个辅助数据文件(.ndf
·         1 个或多个日志文件(.ldf
他们各自的作用又是什么呢?答案实际上很明显,我再次强调一下:
·         主数据文件:除了存储数据以外,还可以跟踪其余的数据库文件,估计是存储了index页面和allocation页面的结果。简单地说就是用来存放系统表和数据的。在用最简单的create database命令创建数据库时,主数据文件的默认大小为master数据库主数据文件的大小。
·         辅助数据文件:在主数据文件达到最大值之后来存储数据用的,至于当用户插入一条记录,究竟是插入主数据文件中还是插入到辅助数据文件中,还是两个数据库文件都插入相同的一条记录,这个问题后面具体讨论。
·         日志文件:存储恢复事务的所有必要的信息,因为事务的回复主要是靠日志来完成,所以日志文件在数据库文件中是必备的,至少有一个。在用最简单的create database命令创建数据库时,日志文件的默认大小为1MB。
 
创建数据库文件时,我们有5个属性必须指定(可以指定TB,GB,MB,默认为MB):
·         逻辑名(Name):也就是物理名的别称,存储于数据库中。
·         物理名(Filename):这个可是实实在在的数据库文件,存储于操作系统的某一个磁盘中。
·         初始容量(Size):定义数据库文件的最小的容量。如果用最简单的create dabatase创建数据库时,则主数据文件的初始容量默认为至少等于master数据库中主数据文件的大小,日志文件的初始容量默认为1MB;如果在创建数据库时只指定了数据文件的初始容量,而没有指定日志数据文件的初始容量,则日志数据文件的默认大小为所有数据文件和的25%。
·         最大容量(Maxsize) 在数据库创建后,数据文件会逐步增大,但是能增长到的最大容量就是这个值所定义的。如果最大容量没有指定,则文件一直会填满整个磁盘。
·         增长增量(Filegrowth) 指定用来存储表、索引或者日志文件的操作系统文件的增量,即数据库的容量每次增加多少。如果增量没有指定,则数据文件的默认增量为1MB(和yukon中不同),日志文件的默认增量为10%(katmai和yukon是一样的)。
 
所有的关于数据库及数据库文件/文件组的信息,都可以通过以下视图和存储过程查看到。
·         Sys.databases
·         Sys.database_files
·         Sp_helpdb
·         Sp_databases
·         Sp_helpfile
·         Sp_helpfilegroup
 
另外,在创建数据文件时,我们还可以有其他的一些属性可以指定:
·         文件组:文件组对组内的所有文件都使用按比例填充策略。当将数据写入文件组时,Microsoft SQL Server   根据文件中的可用空间量将一定比例的数据写入文件组的每个文件,而不是将所有的数据先写满第一个文件,接着再写入下一个文件。例如,如果文件   f1   有   100   兆字节   (MB)   可用空间,文件   f2   有   200   MB   可用空间,则从文件   f1   中分配一个扩展盘区,从文件   f2   中分配两个扩展盘区,依此类推。这样,两个文件几乎同时填满,并且可获得简单的条带化。  
   
  一旦文件组内的所有文件已满,SQL   Server   就自动地采用循环方式一次扩展一个文件,以容纳更多的数据(假定数据库设置为自动增长)。例如,某个文件组由三个文件组成,它们都设置为自动增长。当文件组中的所有文件的空间用完时,只扩展第一个文件。当第一个文件已满,不能将更多的数据写入该文件组时,扩展第二个文件。当第二个文件已满,不能将更多的数据写入该文件组时,扩展第三个文件。如果第三个文件已满,不能将更多的数据写入该文件组,那么再次扩展第一个文件,依此类推。  
   
  使用文件和文件组时,通过允许跨多个磁盘、多个磁盘控制器或   RAID(独立磁盘冗余阵列)系统创建数据库,可提高数据库性能。例如,如果计算机中有四个磁盘,那么可以创建一个由三个数据文件和一个日志文件组成的数据库,每个磁盘上放置一个文件。在对数据进行访问时,四个读/写磁头可以同时并行地访问数据,从而加速数据库操作。  
   
  另外,文件和文件组允许数据布局,因为可以在特定的文件组中创建表。因为特定表的所有输入/输出都可以定向到特定的磁盘,所以性能得以改善。例如,可以将最常用的表放在一个文件组中的一个文件中,该文件组位于一个磁盘上;而将数据库中其它的不常访问的表放在另一个文件组中的其它文件中,该文件组位于第二个磁盘上。  
 
Create database CrossSQL
on
 
PRIMARY -- 主数据文件组 , 可以直接用 Primary, 也可以省略 ,primary 为默认的文件组
(
      NAME = CrossSQL1, -- 数据库的逻辑名 , 存储于数据库文件中
      FILENAME = 'c:/CrossGQL/CrossGQL_dat1.mdf',-- 数据库的物理名 , 即在文件系统中的名称 , 一个数据库有且只有个 mdf
      SIZE = 10,-- 初始容量 , 默认单位为 MB
      MAXSIZE = 50,-- 最大容量
      FILEGROWTH = 15% -- 增长值 , 默认为 MB, 也可以用百分比来作为增长率
),   -- 在一个组中有多个文件时 , "," 分隔开
(
      NAME = CrossSQL2,
      FILENAME = 'c:/CrossGQL/CrossGQL_dat2.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 15%
),
 
FILEGROUP Group1 -- 此为用户自定义的文件组 , 利用文件组可以实现数据的分布式 , 从而提高数据的访问速率
(
      NAME = CrossSQL3,
      FILENAME = 'c:/CrossGQL/CrossGQL_dat3.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 5
),
(
      NAME = CrossSQL4,
      FILENAME = 'd:/CrossGQL/CrossGQL_dat4.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 5
),
 
FILEGROUP Group2
(
      NAME = CrossSQL5,
      FILENAME = 'e:/CrossGQL/CrossGQL_dat5.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 5
),
(
      NAME = CrossSQL6,
      FILENAME = 'c:/CrossGQL/CrossGQL_dat6.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 5
)
 
LOG ON -- 日志的存放 , 一个数据库至少有一个日志数据文件 , 一般情况下 , 日志数据文件的大小为所有数据文件大小的 /4
(
      NAME = 'CrossSQL_log1',
      FILENAME = 'c:/CrossGQL/CrossGQL_log1.ldf',
      SIZE = 5MB,
      MAXSIZE = 25MB,
      FILEGROWTH = 5MB
)
go
 

你可能感兴趣的:(sql,数据库,server,database,存储,扩展,磁盘)