关于MS SQL Server数据库文件

原创 2007年09月11日 19:06:00
关于数据库文件
从总体来看,数据库文件包括如下一些文件:
·         一个主数据文件(.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
 

【MS SQL Server】使用【数据库收缩功能】实现多个数据文件的合并

收缩用户数据库   1 为什么要收缩数据库 SQL Server 2000采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了100MB,而实际上只占用了50MB空...
  • WolfOfSiberian
  • WolfOfSiberian
  • 2014年10月12日 11:26
  • 876

MS SQL Server和MySQL区别

MySQL支持enum,和set类型,SQL Server不支持MySQL不支持nchar,nvarchar,ntext类型MySQL的递增语句是AUTO_INCREMENT,而MS SQL是iden...
  • lonet
  • lonet
  • 2014年01月14日 16:35
  • 1406

MS Sql server 表复制

一、请问专家,如何复制其它表的结构到一指定的表中去,比如以下的例子:   有如下三个表:  表A:字段1, 字段2, 字段3  表B:字段1, 字段2, 字段3  表C:字段1, 字段2, 字段3  ...
  • feng19821209
  • feng19821209
  • 2006年06月08日 00:55
  • 5723

MS SQL Server 数据类型详解

本文转载自:http://blog.csdn.net/iamduoluo/article/details/6329199
  • xjh2011xjh
  • xjh2011xjh
  • 2014年05月13日 20:47
  • 1046

如何获取SQL Server 2008数据库数据文件的位置

在SQL Server中,要获取数据库数据文件的物理位置,有三种方法: sp_helpdb bright name          filename                       ...
  • cuivivid
  • cuivivid
  • 2013年11月15日 09:29
  • 1333

关于对MS SQLServer 实例的理解

关于对MS SQLServer 实例的理解
  • msdnchina
  • msdnchina
  • 2016年06月17日 07:30
  • 924

如何在SQL中写正则表达式(适用于Ms SQL Server 2000以上版本)

由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都替换掉。当然我可以通过写一个程序去修改,那毕竟有点麻烦。直接在查询分析器中执行,但是MS SQL Serve...
  • yangbingqi222
  • yangbingqi222
  • 2010年06月04日 15:40
  • 665

MS SQL 的入门学习

SQL 语言入门教程 第一课简介 SQL 是英文Structured Query Language 的缩写,意思为结构化查询语言。 SQL 语言的主要功能就是同各种数据库建立联系,进行沟通。按...
  • xiabanghu
  • xiabanghu
  • 2012年11月28日 07:55
  • 3691

最优化的ms sql server分页sql语句

 作者:yanekemail:yanek@126.com特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。说明:pagesize: 每页显示记录数cureentpage:当前页数selec...
  • 5iasp
  • 5iasp
  • 2006年04月14日 15:47
  • 2873

解决MS SQL Server 死锁的问题

1、怎么去监控MS SQL Server 中发生的死锁问题(MS SQL 7.0)http://support.microsoft.com/kb/251004/zh-cn/2、INF: 了解和解决 S...
  • shaken
  • shaken
  • 2005年08月11日 17:08
  • 1043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于MS SQL Server数据库文件
举报原因:
原因补充:

(最多只允许输入30个字)