俗话说,好记性不如烂笔头,好多东西是学了忘,忘了学,很头疼的,所以干脆把这些东西记下来。
1.使用T-SQL创建数据库 School
--判断数据库是否存在
if exists(select * from sys.databases where name=N'School')
drop database School
go
--创建数据库
create database School
on primary
(
name=school_main, --逻辑名称
filename='d:\school_main.mdf', --主要数据文件的路径及名字
size=3MB, --初始大小
maxsize=unlimited, --最大上限,未指定就是不设定文件上限,直到磁盘满
filegrowth=10% --增量,可以用%或者xMB,但是不能超过最大上线
),
(
name=school_secondary_first,
filename='d:\school_secondary_first.ndf',--次要数据文件的路径及名字
size=3MB,
maxsize=500MB,
filegrowth=10MB
),
filegroup school_two --一个新的文件组
(
name=school_secondary_second,
filename='d:\school_secondary_second.ndf',--次要数据文件的路径及名字
size=3MB,
maxsize=500MB,
filegrowth=10MB
)
log on
(
name=school_log,
filename='d:\school_log.ldf',
size=3MB,
maxsize=300MB,
filegrowth=1MB
)
go
2.查看数据库文件属性
如果我想找到具体的数据库文件去哪里找呢?有个方法,调用系统存储过程 exec sp_helpdb 数据库名
exec sp_helpdb school
View Code
3.数据库文件和文件组
从上面创建的数据库实例中我们可以知道,一个数据库的文件至少有一个数据库主文件和一个事务日志文件,当然也可能是多个。那既然可以是好多个文件,不会是没有上线吧?
其实,最多可以为每个数据库指定32767个文件和32767个文件组。
这里我们通过执行系统存储过程来查看数据库信息
从上图可以看到新建的School数据库文件,发现多增加的数据文件名字后缀是.ndf,而且全部的文件并不是在同一个文件组里,这里引申出来两个名次“数据库文件的类型”和“文件组” 。
a.数据库文件类型,包含三中文件类型,分别是主要数据文件、次要数据文件、事务日志
- 主要数据文件 包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件,扩展名是.mdf。
- 次要数据文件 次要数据文件是可选的,由用户定义并存储用户数据。通过将每个文件存放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个Windows文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长,其扩展名是.ndf。
- 事务日志 事务日志
b.文件组
每个数据库有一个主要文件组。此文件组包含主要数据文件和未放入其他文件组的所有次要文件。可以创建用户定义的文件组,用于将数据文件集合起来,以便于管理、数据分配和放置。
另外,如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配到默认文件组(PRIMARY)。不管何时,只能将一个文件组指定为默认文件组。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。
接下来,我们为School新增一个文件组,然后向这个文件组中添加一个次要数据文件。
use school
go
--向数据库添加新文件组
alter database school add filegroup school_third
go
--向数据库中增加新文件
alter database school add file
(
name=school_secondary_third,
filename='e:\school_secondary_third.ndf',
size=3MB,
maxsize=100MB,
filegrowth=10MB
)
to filegroup school_third --指定该文件所在的文件组
go
c.删除数据库文件
例如要删除School中school_third文件组里的school_secondary_third.ndf次要数据文件。
use school
go
alter database school remove file school_secondary_third --注意哦,file后面跟的是文件的逻辑名称,不是文件名称
go
d.管理文件组
上面提到的每个数据库都有一个默认的PRIMARY文件组,这个组是不可被删除的。
那么默认文件组和自定义文件组之间有什么区别呢?
- 默认文件组最大的好处是新创建文件只要不指定文件组,那么文件都放在默认组中。另外,系统表等信息总是放在PRIMARY文件组中,即使它不再是默认文件组。
怎样将新增的文件组设置为默认文件组呢?按下面的步骤
- 新增一个文件组,语法是:alter database 数据库名 add filegroup 文件组名
- 向新建的文件组里新增一个数据文件,具体见上面(如果不为新增的文件组添加文件,第三步执行出错)
- 将新增的文件组设为默认组,语法是:alter database 数据库名 modify filegroup 文件组名 default
修改文件组名