当前课程知识点:SQL SERVER数据库技术 > 第2章 创建与管理数据库 > 2.1 数据库对象及构成 > sql server 2008数据库中的文件和文件组的详解
1.文件和文件组的含义与关系
每个数据库有一个主数据文件.和若干个从文件。
文件是数据库的物理体现。 文件组可以包括分布在多个逻辑分区的文件,实现负载平衡。文件组允许对文件进行分组,以便于管理和数据的分配/放置。
例如,可以分别在三个硬盘驱动器上创建三个文件(Data1.ndf、Data2.ndf 和 Data3.ndf),并将这三个文件指派到文件组 fgroup1 中。然后,可以明确地在文件组 fgroup1 上创建一个表。对表中数据的查询将分散到三个磁盘上,因而性能得以提高。在 RAID(磁盘冗余阵列)条带集上创建单个文件也可以获得相同的性能改善。然而,文件和文件组使您得以在新磁盘上轻易地添加新文件。另外,如果数据库超过单个 Microsoft Windows 文件的最大大小,则可以使用次要数据文件允许数据库继续增长。
2.文件、文件组在实践应用中常见的问题
通常情况下我们构造的数据库都只有两个文件,mdf文件和ldf文件.但是这样有两个缺点:
(1)容易导致文件过大
我们知道,mdf文件是数据库文件,这样的话也就意味着随着数据库的增大mdf就会相应的增大,显然在现在的应用中数据膨胀是太常见的事情了,当你的应用变大后,mdf文件 也会变大,然而windows对文件的大小是有要求的,这样的话很容易导致mdf文件达到windows所允许的文件大小的界限(于是数据库就崩溃了)。
(2)没有利用到磁盘阵列
大型的服务器好多都有磁盘阵列,你可以把磁盘阵列简单的假象成n个一块转动的磁盘,磁盘阵列的设计是希望通过多个磁盘的串联来得到更大的读写效率.但是如果你的数据库只有一个mdf文件(ldf文件暂时不考虑),那么你总是只能够利用这个磁盘阵列里面的一个磁盘而已.那样的话昂贵的磁盘阵列的效率就由并联变成串联了.试想如果我们能够让mdf分散成多个文件,比如说磁盘阵列上的每个磁盘中都分配一个文件,然后把mdf中的数据分散到各个文件中,我在读取的时候就是串联的读取了,这样就充分的利用了磁盘阵的存取效能.
这两个问题平常我们没有遇到过(条件不具备),但是做大型的服务开发的时候这几乎是致命的.
3.查询文件组和文件语句
这在2008下,运行
SELECT df.[name],
df.physical_name,
df.[size],
df.growth,
f.[name][filegroup],
f.is_default
FROM sys.database_files df JOIN sys.filegroups f
ON df.data_space_id = f.data_space_id
4.MSDN官方解释
了解文件和文件组
每个 SQL Server 数据库至少具有两个操作系统文件:一个数据文件和一个日志文件。数据文件包含数据和对象,例如表、索引、存储过程和视图。日志文件包含恢复数据库中的所有事务所需的信息。为了便于分配和管理,可以将数据文件集合起来,放到文件组中。
à数据库文件
SQL Server 数据库具有三种类型的文件。
主要数据文件
主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。主要数据文件的建议文件扩展名是 .mdf.
次要数据文件
是可选的,由用户定义并存储用户数据。通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个 Windows 文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。次要数据文件的建议文件扩展名是 .ndf。
事务日志文件
事务日志文件保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。事务日志的建议文件扩展名是 .ldf.
文件组 。每个数据库有一个主要文件组。此文件组包含主要数据文件和未放入其他文件组的所有次要文件。可以创建用户定义的文件组,用于将数据文件集合起来,以便于管理、数据分配和放置。
例如,可以分别在三个磁盘驱动器上创建三个文件 Data1.ndf、Data2.ndf 和 Data3.ndf,然后将它们分配给文件组 fgroup1。然后,可以明确地在文件组 fgroup1 上创建一个表。对表中数据的查询将分散到三个磁盘上,从而提高了性能。通过使用在 RAID(独立磁盘冗余阵列)条带集上创建的单个文件也能获得同样的性能提高。但是,文件和文件组使您能够轻松地在新磁盘上添加新文件。
以下列出了存储在文件组中的所有数据文件。
主文件组
主要包含主要文件的文件组。所有系统表都被分配到主要文件组中。
用户定义文件組
用户首次创建数据库或以后修改数据库时明确创建的任何文件组
默认文件组
如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。不管何时,只能将一个文件组指定为默认文件组。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。
PRIMARY 文件组是默认文件组,除非使用 ALTER DATABASE 语句进行了更改。但系统对象和表仍然分配给 PRIMARY 文件组,而不是新的默认文件组。
5.操作实例
复制代码 代码如下:
--创建数据库
--切换到 master 数据库
USE master
GO
create database db_Study
on primary --主文件组和主要数据文件
(name='db_study_Primary',
filename='D:\study\db_study_pri.mdf'),
filegroup db_Study_filegroup1 --用户定义文件组1
(name='db_study_fg_data1',
filename='D:\study\db_study_fg_data1_1.ndf'),--次要数据文件1
(name='db_study_fg_data2' ,
filename='D:\study\db_study_fg_data2_2.ndf'),--次要数据文件2
filegroup db_Study_filegroup2
(name='db_study_fg_data3',
filename='D:\study\db_study_fg_data3_1.ndf')
log on
(name='db_study_log',
filename='D:\study\db_study.ldf')
go
--5.2查询文件组和文件
SELECT df.[name],
df.physical_name,
df.[size],
df.growth,
f.[name][filegroup],
f.is_default
FROM sys.database_files df JOIN sys.filegroups f
ON df.data_space_id = f.data_space_id
/*
name physical_name size growth filegroup is_default
db_study_Primary D:\study\db_study_pri.mdf 280 128 PRIMARY 1
db_study_fg_data1 D:\study\db_study_fg_data1_1.ndf 128 128 db_Study_filegroup1 0
db_study_fg_data2 D:\study\db_study_fg_data2_2.ndf 128 128 db_Study_filegroup1 0
db_study_fg_data3 D:\study\db_study_fg_data3_1.ndf 128 128 db_Study_filegroup2 0
*/
--修改默认数据文件组
alter database db_study
modify filegroup db_study_filegroup1 default
--在默认文件组db_study_filegroup1创建表,
--并且指定图像数据保存在用户定义文件组db_study_filegroup1
create table my_test
(
ID int primary key,
[Name] varchar(10),
PIC image
)textimage_on db_study_filegroup2
--在用户定义文件组db_study_filegroup2上创建索引
create index ix_my_test on my_test(ID) on db_study_filegroup2
GO
--5.5将要删除数据文件db_study_fg_data1的数据转移到其他数据文件中,
--并且清空数据文件db_study_fg_data1
DBCC SHRINKFILE(db_study_fg_data1,EMPTYFILE)
go
--删除数据文件db_study_fg_data1
ALTER DATABASE DB_study
REMOVE FILE db_study_fg_data1
go
-1.1 数据库基础知识
--数据库的概念
--数据库概念
--数据模型(1)
--数据模型(2)
--数据模型
--实体间的联系
--E-R图
--数据技术的发展
--数据库技术发展
-1.1 数据库基础知识--作业
-1.2 SQL SERVER简介
--数据库应用场景
--企业应用
--安装与配置
-1.2 SQL SERVER简介--作业
-1.3 课堂练习-安装和配置SQL SERVER2008
-职场小故事之一——数据库工程师采访录(1)
-2.1 数据库对象及构成
--sql server 2008数据库中的文件和文件组的详解
--管理数据库和文件
--创建文件组
--文件和文件组
-2.1 数据库对象及构成--作业
-2.2 创建数据库
--使用SQL SERVER Management Studio创建数据库
-2.2 创建数据库--作业
-2.3 修改数据库
--使用T-SQL扩充数据库或事务日志的容量-01(操作演示)
--使用T-SQL扩充数据库或事务日志的容量-02(操作演示)
-2.3 修改数据库--作业
-2.4 重命名或删除数据库
-2.4 重命名或删除数据库--作业
-2.5 课堂练习-创建数据库和数据库文件
-职场小故事之二 数据库工程师采访录(2)
-3.1 数据表设计
--数据表设计
-3.1 数据表设计--作业
-3.2 创建数据表
--创建数据表
-3.2 创建数据表--作业
-3.3 修改数据表结构
-3.3 修改数据表结构--作业
-3.4 删除数据表
-3.4 删除数据表--作业
-3.5 课堂练习-创建数据类型和数据表
--数据类型详解
-- 创建数据类型和表
--程序源代码
-3.5 课堂练习-创建数据类型和数据表--作业
-扩展知识
--数据类型详解
-职场小故事之三——数据库工程师是干什么的?
-4.1 合并多个查询结果中的数据
-4.1 合并多个查询结果中的数据--作业
-4.2 抽取数据到另一个表中
-4.2 抽取数据到另一个表中--作业
-4.3 添加数据
--向表中添加数据
-4.3 添加数据--作业
-4.4 更新数据
--将“电子出版概论”课程的上课时间修改为“周二晚”——程序源代码
--将“01数据库”班级所有学生的选课密码初始化为#*3456
--更新表中的数据
-4.4 更新数据--作业
-4.5 删除数据
--学生为“00000005”的学生因故取消课程编号为“017”的选修课
--学号为“0000005”的学生因故取消“中餐菜肴制作”选修课——程序源代码
--删除表中数据
-4.5 删除数据--作业
-4.6 课堂练习
-职场小故事之四——冯玉才:“背”着数据库闯天下
-5.1 查询单个数据表数据
-5.1 查询单个数据表数据--作业
-5.2 使用聚合函数查询
--使用聚合函数查询
-5.2 使用聚合函数查询--作业
-5.3 使用分组查询结果
--查看报名人数大于15的各类课程的最少报名人数和最多报名人数
--查看报名人数大于15并且每组平均报名人数大于30的课程类别和各组的平均报名人数
--查看课程类别为“信息技术”、“管理”的平均报名人数,并给出其他课程类别
--使用分组查询
-5.3 使用分组查询结果--作业
-5.4 排序查询结果
--重新排序查询结果
-5.4 排序查询结果--作业
-5.5 多表连接查询数据
--比较连接查询
--多表连接查询数据
-第5章 查询与统计数据-作业
-5.6 课堂练习-查询与统计数据
--程序源代码
-职场小故事之五——IT独行侠数据库独立咨询顾问牛新庄的故事
-6.1 索引的概述
--索引的技巧
--索引简介
--索引的分类
--索引的分类
-6.1 索引的概述--作业
-6.2 创建索引
--创建索引
-6.2 创建索引--作业
-6.3 重命名索引
--将sutdent表的IX_STUNAME索引重命名为IX_STUNAMENEW
--重命名索引
-6.3 重命名索引--作业
-6.4 删除索引
--删除索引
--删除索引
-6.4 删除索引--作业
-6.5 索引分析
--查询学号为“00000001”的学生信息,分析哪些索引被系统采用
--查询名为"林斌"的学生,分析执行该数据花费的磁盘活动量信息
--分析索引
-6.5 索引分析--作业
-6.6 索引维护
--使用UPDATE STATISTICS更新索引的统计信息
--维护索引
-6.6 索引维护--作业
-6.7 课堂练习-创建和优化索引
--创建和优化索引
--程序源代码
-职场小故事之六——数据库安全门事件
-实现索引
-7.1 数据完整性概述
--数据完整性的概述
--数据完整性概述
-7.1 数据完整性概述--作业
-7.2 创建约束
--创建主键约束
--创建主键约束
--添加唯一约束
--创建唯一约束
--约束的STUNO列值只允许为8位数字,并且不可以为8个0
--删除检查约束
--创建检查约束
--为STUCOU表添加默认约束,STATE列的默认值“报名”
--创建默认约束
--创建外键约束
-7.2 创建约束--作业
-7.3 创建默认值
--创建并绑定默认值
--创建默认值
--解除默认值UnsureDefault与Teacher列的绑定
--删除默认值
-7.3 创建默认值--作业
-7.4 创建规则
--创建规则
--解除规则CreditRule与Course表Credit列的绑定
--删除规则
-7.4 创建规则--作业
-7.5 课堂练习-实现数据完整性
-- 实现数据完整性
--程序源代码
-职场小故事之七——数据库工程师的发展前景
-8.1 视图的概述
--视图的基本概念
--视图简介
-8.1 视图的概述--作业
-8.2 创建视图
--创建视图
--创建视图
-8.2 创建视图--作业
-8.3 修改视图
--修改视图并加密
--修改视图
-8.3 修改视图--作业
-8.4 重命名视图
--重命名视图
--重命名视图
-8.4 重命名视图--作业
-8.5 删除视图
--删除视图
--删除视图
-8.5 删除视图--作业
-8.6 课堂练习-实现视图
-- 实现视图
--程序源代码
-职场小故事之八——数据库面对的工作岗位及职责
-9.1 存储过程概述
--存储过程的优点
--存储过程的优点
-9.1 存储过程概述--作业
-9.2 创建与执行不带参数的存储过程
--创建存储过程,返回学生表中班级编号为“20000001”的所有数据行
--执行存储过程
-9.2 创建与执行不带参数的存储过程--作业
-9.3 创建与执行带参数的存储过程
--执行存储过程
-9.3 创建与执行带参数的存储过程--作业
-9.4 修改存储过程
--修改的存储过程
-9.4 修改存储过程--作业
-9.5 删除存储过程
--删除存储过程
--删除存储过程
-9.5 删除存储过程--作业
-9.6 课堂练习-实现存储过程和函数
-- 实现存储过程和函数
--程序源代码
-职场小故事之九——数据库错误致虎航安全事故
-10.1 触发器概述
--触发器的概述
-10.1 触发器概述--作业
-10.2 创建触发器
--创建触发器
--测试触发器
--创建触发器
-10.2 创建触发器--作业
-10.3 修改触发器
--测试结果
--修改触发器
-10.3 修改触发器--作业
-10.4 删除触发器
--删除触发器
--删除触发器
-10.4 删除触发器--作业
-10.5 禁用或启用触发器
--禁用触发器
--启用触发器
--禁用或启用触发器
-10.5 禁用或启用触发器--作业
-10.6 课堂练习-管理触发器
--程序源代码
-职场小故事之十——韩国农协银行事件透视数据库安全问题
-11.1 SQL SERVER安全机制
--安全设计理念
-11.1 SQL SERVER安全机制--作业
-11.2 管理登录名和用户
--创建登录名
-11.2 管理登录名和用户--作业
-11.3 管理角色
--角色
-11.3 管理角色--作业
-11.4 管理权限
--创建登录名
--创建用户
-11.4 管理权限--作业
-11.5 课堂练习-管理安全性
--管理安全性
--程序源代码
-11.5 课堂练习-管理安全性--作业
-职场小故事之十一——银行账号“泄密”虚惊
-12.1 脱机后复制数据库文件
--数据库脱机操作
-12.1 脱机后复制数据库文件--作业
-12.2 备份与还原数据库
-12.2 备份与还原数据库--作业
-12.3 数据的导入和导出
--数据导入与导出
-12.4 复制数据库
--复制数据库
--数据库复制
-12.5 课堂练习-灾难恢复
-- 灾难恢复
--程序源代码
-职场小故事之十二——2011年数据库泄密事件
-13.1 windows应用程序开发
-13.1 windows应用程序开发--作业
-13.2 ASP.NET网站开发
-13.2 ASP.NET网站开发--作业
-国家软件开发文档标准
--操作手册编写规范
-- 详细设计说明书编写规范
-- 项目开发总结报告编写规范
--用户手册编写规范