1-2  通过SQL管理数据库文件
u      掌握数据库文件的类型,学习在管理平台下建立数据库文件和文件组
u      掌握数据库文件及日志文件的建立操纵语句
u      掌握对数据库文件的修改技术及操纵语句
u      掌握数据库的收缩技术及操纵语句
1-2-1 数据库文件及文件组
每个 SQL Server 2005 数据库至少具有两个操作系统文件:一个数据文件和一个日志文件。数据文件包含数据和对象,例如表、索引、存储过程和视图。日志文件包含恢复数据库中的所有事务所需的信息。为了便于分配和管理,可以将数据文件集合起来,放到文件组中。
1. 数据库文件
SQL Server 2005 数据库具有三种类型的文件,如表1-2所示:
表1-2 SQL Server 2005 数据库的三种类型的文件
文件
说明
主数据文件
主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。主要数据文件的建议文件扩展名是 .mdf。
从数据文件
从要数据文件是可选的,由用户定义并存储用户数据。通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个 Windows 文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。次要数据文件的建议文件扩展名是 .ndf。
事务日志文件
事务日志文件保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。事务日志的建议文件扩展名是 .ldf。
2. 在图形化管理平台下建立数据库文件
该方法是最简便快捷的一种方式,下面我们通过一个小实验说明如何在图形化管理平台下建立数据库文件。
实验:新建数据库文件和日志文件
第一步:启动SQL Server2005的Management Studio,进入管理平台界面。在对象资源管理器中右击数据库文件夹,选择新建数据库。
图1-6 新建数据库
第二步:在弹出的新建数据库的对话框中,首先命名一个数据库名称,该名称被称为是逻辑文件名的命名;其次会在数据库文件工作区域出现两个默认文件,对这两个文件的命名称为是物理文件名的命名,后缀名分别是mdf文件(主数据库文件)和ldf文件(日志文件)。这两个文件分别可以通过设置进行数据库文件配置,包括:文件的初始化大小,自动增长率配置,文件存储路径。当然,用户还可以建立新的数据库文件(从数据库文件),后缀名为ndf文件,以及日志文件,后缀名是ldf文件。
图1-7 在弹出的新建数据库的对话框中对数据库文件进行命名
3. 文件组
每个数据库有一个主要文件组。此文件组包含主要数据文件和未放入其他文件组的所有次要文件。可以创建用户定义的文件组,用于将数据文件集合起来,以便于管理、数据分配和放置。
例如,可以分别在三个磁盘驱动器上创建三个文件 Data1.ndf、Data2.ndf 和 Data3.ndf,然后将它们分配给文件组 fgroup1。然后,可以明确地在文件组fgroup1上创建一个表。对表中数据的查询将分散到三个磁盘上,从而提高了性能。通过使用在RAID(独立磁盘冗余阵列)条带集上创建的单个文件也能获得同样的性能提高。表1-3列出了主文件组和用户定义文件组以及默认文件组的差异。
表1-3 主文件组和用户定义文件组的差异
文件组
说明
主要文件组
包含主要文件的文件组。所有系统表都被分配到主要文件组中。
用户定义文件组
该文件组是用 CREATE DATABASE 或 ALTER DATABASE 语句中的 FILEGROUP关键字,或在 SQL Server 企业管理器内的"属性"对话框上指定的任何文件组。
默认文件组
在每个数据库中,每次只能有一个文件组是默认文件组。如果没有指定默认文件组,则默认文件组是主文件组。
如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。不管何时,只能将一个文件组指定为默认文件组。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。如图1-8所示,如果PRIMARY文件组是默认文件组,则需要在默认值上打勾,则任何新存储的文件信息只能够被保存在PRIMARY文件组中,而不能够被保存在test_1文件组,除非用脚本指定存放在test_1文件组。
图1-8 创建默认文件组和从文件组
1-2-2 数据库的建立与撤消
数据库的建立是指在数据库服务器上面建立数据库的物理文件,建立一个新数据库的基本语法是:create database 数据库名
撤消数据库是对数据库物理文件删除过程,因此首先必须保证的是当前数据库并未在使用中,而是出于脱机工作的状态。撤销数据库的基本语法是:drop database 数据库名
下面我们通过一个小实验来说明,如何建立一个数据库和怎样删除一个数据库。
实验:创建MyDB数据库
(1)按照图1-9所规定的要求,建立一个主数据文件(大小4M,命名为MyDB_Prm.mdf文件)和一个日志文件(大小1M,命名为MyDB.ldf文件),存放的路径都在C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data目录下面;再建立两个从数据文件(大小1M,命名为MyDB_FG1_1.ndf和MyDB_FG1_2.ndf文件),路径相同。

图1-9 创建MyDB数据库基本要求
(2)启动SQL Server2005的Management Studio,进入管理平台界面,在新建的查询界面中键入下面的代码:

USE master;

--调用主数据库master,任何用户自定义数据库文件的创建都是在master数据库下完成的。

GO

--

--

CREATE DATABASE MyDB

ON

--ON

PRIMARY (--

-- NAME

FILENAME='c:\Program Files\

Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_Prm.mdf',

-- FILENAME

SIZE=4MB, --

--

FILEGROWTH=1MB --

--

FILEGROUP MyDB_FG1

--

--

( NAME = 'MyDB_FG1_Dat1',

FILENAME = 'c:\Program Files\

Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_1.ndf',

SIZE = 1MB,

MAXSIZE=10MB,

FILEGROWTH=1MB),

--

( NAME = 'MyDB_FG1_Dat2',

FILENAME = 'c:\Program Files\

Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_2.ndf',

SIZE = 1MB,

MAXSIZE=10MB,

FILEGROWTH=1MB)

LOG ON

-- LOG ON

( NAME='MyDB_log',

FILENAME = 'c:\Program Files\

Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB.ldf',

SIZE=1MB,

MAXSIZE=10MB,

FILEGROWTH=1MB);

GO

1-2-2 数据库的建立与撤消

数据库的建立是指在数据库服务器上面建立数据库的物理文件,建立一个新数据库的基本语法是:create  database  数据库名

撤消数据库是对数据库物理文件删除过程,因此首先必须保证的是当前数据库并未在使用中,而是出于脱机工作的状态。撤销数据库的基本语法是:drop database 数据库名

下面我们通过一个小实验来说明,如何建立一个数据库和怎样删除一个数据库。

实验:创建MyDB数据库

(1)按照图1-9所规定的要求,建立一个主数据文件(大小4M,命名为MyDB_Prm.mdf文件)和一个日志文件(大小1M,命名为MyDB.ldf文件),存放的路径都在C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data目录下面;再建立两个从数据文件(大小1M,命名为MyDB_FG1_1.ndf和MyDB_FG1_2.ndf文件),路径相同。

图1-9  创建MyDB数据库基本要求

(2)启动SQL Server2005的Management Studio,进入管理平台界面,在新建的查询界面中键入下面的代码:

USE master;

--调用主数据库master,任何用户自定义数据库文件的创建都是在master数据库下完成的。

GO

--结束批处理

--在默认文件组中建立日志文件和数据库文件,特别注意的是针对于主数据文件的增长率和最大字节数的规定

ON

--ON语句的出现表示下面的代码是建立数据文件,并且下面存储的文件将存储在主文件组之中。

PRIMARY (--如果出现PRIMARY则表示下面的数据文件为主数据文件

NAME='MyDB_Primary',   -- NAME关键词表示逻辑文件名的命名,注意结束时以逗号结尾

FILENAME='c:\Program Files\

Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_Prm.mdf',

-- FILENAME关键词表示物理文件名的命名,后面的字符串必须在单引号范围内书写,并且是存在的物理路径,建议打开windows的资源管理器,直接寻找到物理文件夹后将路径地址复制下来比较保险。

SIZE=4MB, -- 默认的初始值大小为4兆。

MAXSIZE=10MB,   -- 文件最大增长到10兆即停止存储

FILEGROWTH=1MB  -- 文件增长率是按照兆字节进行增招,每次增长1兆。

--注意这是建立数据库文件MyDB_Primary的最后一句话,因此结尾处没有逗号。),                                                --注意此处括号后仍然有逗号,表示将继续建立数据文件的意思。

FILEGROUP MyDB_FG1

--如果出现有FILEGROUP则表示将下列创建的数据文件保存到文件组MyDB_FG1中,

--而不是默认的主文件组之中,如果不出现FILEGROUP关键词,则直接存储在默认的主文件组之中。

( NAME = 'MyDB_FG1_Dat1',

Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_1.ndf',

SIZE = 1MB,

MAXSIZE=10MB,

FILEGROWTH=1MB),

--注意此处用逗号区分下一个数据文件的建立从此开始也被存储在文件组MyDB_FG1中

( NAME = 'MyDB_FG1_Dat2',

FILENAME = 'c:\Program Files\

Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_2.ndf',

SIZE = 1MB,

MAXSIZE=10MB,

FILEGROWTH=1MB)

LOG ON

-- LOG ON语句的出现表示下面的代码是建立日志文件,日志文件没有主从之分。

( NAME='MyDB_log',

FILENAME = 'c:\Program Files\

Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB.ldf',

SIZE=1MB,

MAXSIZE=10MB,

FILEGROWTH=1MB);

GO

1-2-3 数据库的修改

数据库的修改是指针对于已经建立的数据库文件或者日志文件进行后期的修改过程,修改数据库的基本语法是:

ALTER DATABASE database

/需要修改的数据库/

{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]

/指定要添加的文件以及将要添加到的文件组/

| ADD LOG FILE < filespec > [ ,...n ]

/添加的日志文件名称以及路径/

| REMOVE FILE logical_file_name

/从数据库文件中删除物理文件,注意:必须在文件中数据为空的时候才可以/

| ADD FILEGROUP filegroup_name 

/指定将要添加的文件组/

| REMOVE FILEGROUP filegroup_name 

/指定将要删除的文件组信息,注意:必须是在文件组为空的时候才可以/

实验:向数据库sales中添加一个含有两个数据库文件和两个5M的日志文件的文件组

第一步:启动SQL Server2005的Management Studio,进入管理平台界面后,点击工具栏中的第一项:新建查询。

第二步:在打开的新建查询界面中,请键入下面代码并执行

Use master

Go

Alter database sales add filegroup salesgroup

--修改数据库sales,增加文件组salesgroup

Go

--下面是修改数据库sales,增加一个数据库文件sales1_data

Alter database sales

add file

(name=sales1_data,

--逻辑文件名是sales1_data

filename='E:\Program Files\Microsoft SQL Server\MSSQL\Data\sales1data.ndf',

--物理文件名是sales1data.ndf,此处必须用单引号将具体的物理路径和文件括住,同时需注意文件名的后缀是ndf文件。建议直接复制资源管理器的路径,避免出错。

size=5,

--初始化大小为MB,此处在数字后面是否加MB都可以

maxsize=50,  --文件最大是MB

filegrowth=5%  --文件增长率是百分之五),

--此处仅仅建立了一个数据文件,下面增加另一个数据文件sales3_data,其他内容与上面相同

(name=sales3_data,

filename='E:\Program Files\Microsoft SQL Server\MSSQL\Data\sales3_data.ndf',

size=5,

maxsize=50,

filegrowth=5)

To filegroup salesgroup

--将上面两个数据文件保存到新建的文件组salesgroup中,结束数据文件的添加工作,如果不写该句话,则直接保存至默认的文件组中。

--下面,再次开始修改数据库sales,但此次仅仅修改该数据库的日志文件。

Alter database sales

Add log file  --添加日志文件

(name=saleslog2,

filename='E:\Program Files\Microsoft SQL Server\MSSQL\Data\saleslog2.ldf',

--日志文件的后缀名称是ldf

size=5,

maxsize=50,

filegrowth=5),

--添加日志文件saleslog2.ldf完毕,具体含义与数据文件一致,下面再添加另一个日志文件saleslog3.ldf

(name=saleslog3,

filename='E:\Program Files\Microsoft SQL Server\MSSQL\Data\saleslog3.ldf',

size=5,

maxsize=50,

filegrowth=5)

--结束日志文件的添加工作,日志文件是没有工作组的概念的

小问题:

在新建数据文件和日志文件时候,按兆字节增长和百分比增长应当在什么情况下使用?各自有什么好处?

数据库服务器的数据存储首先被存储到内部寄存器当中,当达到一定的字节量时候进行一次性的反写磁盘,进行磁盘数据存储。因此,如果确定当前的应用系统是小型应用系统,则每次存储的数据量不大,可以考虑使用按照百分比增长;但是如果是大型应用系统,每次存储的数据量较大,则建议使用兆字节增长。总之,为了避免存储在内部寄存器中数据的意外丢失,以最小数据量写磁盘为最佳。故而实际我们在创建数据文件和日志文件时候多采用系统默认的形式,即不随便制定文件的增长率较好。

1-2-4 数据库的收缩

数据库在使用一段时间后,会产生一些磁盘碎片的空间,这是由于频繁的删除和插入数据造成的。数据库的收缩就是将这些产生的碎片空间进行重新整合,从而优化数据磁盘组合,进而提高查询效率的过程。在压缩数据库时,将创建一个新的数据库文件,重新组织表页以使其驻留在相邻的数据库页中,并通过将所有数据库数据都重写到新的数据页中来回收未使用的空间。

实验1:通过资源管理器收缩数据库实验

第一步:鼠标右键单击school,在展开的菜单中,选择收缩数据库。如图1-10所示。

图1-10  选择收缩数据库

第二步:配置当前的分配空间和可用空间。如图1-11所示。

图1-11  选择收缩数据库

第三步:我们也可以收缩单个的数据库文件,见图1-12所示。通过配置界面,我们可以选择收缩的文件是数据库文件还是日志文件,以及具体的收缩操作。

图1-12  选择收缩数据库的具体文件

实验2:通过命令行收缩数据库实验

第一步:收缩数据库

若要收缩特定数据库的所有数据和日志文件,我们通过关键词DBCC SHRINKDATABASE来完成并实现对数据库的收缩工作,其基本的命令如下所示:

DBCC SHRINKDATABASE    ( database_name [ , target_percent ]  )

相关参数的意义是,database_name表示是要收缩的数据库名称;target_percent是指数据库收缩后的数据库文件中所要的剩余可用空间百分比。

问题:

假设有数据库文件字节为60M,收缩比为25%,请问可用空间是多少?

假设可用的空间是x,那么基本的代数表达式为: =25%,因此可用空间为12M。

--例如:请使得数据库中的文件减小,以使 school 中的文件有 10% 的可用空间。

DBCC SHRINKDATABASE (school, 10)

第二步:收缩数据库文件或日志文件

收缩数据库文件或日志文件基本的命令如下所示:

DBCC SHRINKFILE ( { file_name | file_id }  { [ , target_size ]}  )

相关参数的意义是:database_name是已收缩文件的逻辑名称,target_size是用兆字节表示的所要的文件大小(用整数表示)。

在进行数据库文件收缩时候,需要注意的事项包括两点:

q 如果已用空间超过目标文件的时候,就仅仅是放掉原来未使用的磁盘空间。

q 文件改大可以,改小不可以。

--例如:收缩数据库school_data,以使 school 中的数据库文件为128M的可用空间。

本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/302525,如需转载请自行联系原作者

1-2 通过SQL管理数据库文件相关推荐

  1. sql azure 语法_Azure Kubernetes服务(AKS)–管理SQL Server数据库文件

    sql azure 语法 In this article, we will review on managing database files of SQL Server running on Azu ...

  2. 人人都是 DBA(V)SQL Server 数据库文件

    SQL Server 数据库安装后会包含 4 个默认系统数据库:master, model, msdb, tempdb. SELECT [name],database_id,suser_sname(o ...

  3. 快速附加没有日志文件的 SQL Server 数据库文件!

    快速附加没有日志文件的 SQL Server 数据库文件: 1 CREATE DATABASE [数据库名称] 2 ON (FILENAME = '数据库文件路径和文件名(如:D:\db\mydb.m ...

  4. sql server数据库文件的迁移(mdfldf文件)

    sql server数据库文件的迁移(mdf&ldf文件) mssql server数据库文件修改, --查看当前的存放位置 select database_id,name,physical_ ...

  5. 用SQL附加数据库文件

    用SQL附加数据库文件 下面我们要在SQL(使用版本:SQL Server 2014 Management Studio)中引入数据库文件,首先要把准备好的数据库文件附加在数据库(PartOneDB. ...

  6. SQL Server2000数据库文件损坏时如何恢复

    出现这样的问题是比较严重的了,能否修复只能看你的运气-- SQL Server2000中,如果数据库文件(非系统数据库文件)遇到错误的时候,仅适用于非master,msdb的数据库. 说明如下: 1 ...

  7. SQL SERVER数据库文件收缩

    --进入需要收缩的数据库,获取数据文件名,日志名,因为这些名字不一定和数据库名一致,但执行DBCC的时候又需要 select * from sysfiles --截断事务日志,这个地方写数据库名,非文 ...

  8. sql sever 数据库文件收索操作

    为什么会有数据库收索操作,是因为数据库在使用过程中,他会先占领一块磁盘,再在磁盘中写数据.在建立数据库和数据库属性->文件,会有自动增长的比例.当数据库大小为10G的时候以百分之10的速度增长, ...

  9. 使用SQL Storage Compress压缩SQL Server 数据库文件

    2013-01-07 17:1711人阅读评论(0)收藏编辑删除 这几天在测试SQL Server数据压缩功能,通过对数据仓库表启用压缩,磁盘空间大大减小,查询性能和备份速度都有提高.但是SQL Se ...

最新文章

  1. Python 数据分析包:pandas 基础
  2. 01迷宫(BFS+记忆)
  3. 李倩星r语言实战_《基于R的统计分析与数据挖掘》教学大纲
  4. 程序员常用网站收藏[定期更新]——csdn博客
  5. linux setuid函数_setuid函数解析
  6. python math库函数源码_11. math库函数
  7. 路由器有一个android设备连接不上,Android http连接 – 多个设备无法连接同一台服务器...
  8. 等效低通信号=带通信号的复包络
  9. ubuntu gedit 工具菜单下没有 Manage external tools
  10. F - Restoring the Expression CodeForces - 898F
  11. jqTransform表单美化
  12. 基于SSM医院预约管理系统
  13. Python编程语言入门视频教程,人生苦短,我用Python!
  14. Excel数据分析day1
  15. PyQt5自定义图片组件:同时显示多张图片
  16. 微积分专项----MIT GS老师
  17. web前端入门到实战:HTML字符实体,转义字符串
  18. excel文件被写保护怎么解除_如何去掉Excel表格中的密码保护?
  19. 短视频系统源代码,加载本地图片和加载网络图片
  20. CSS(列表+表格+链接+自定义鼠标光标)样式

热门文章

  1. 初学者学python好还是c-学Python还是学C?
  2. php和python写爬虫-python和php哪个更适合写爬虫
  3. python为什么中文要encoding-python 中文编码问题如何解决?
  4. 在windows中python安装sit-packages路径位置 在Pycharm中导入opencv不能自动代码补全问题
  5. 2014年全国职称计算机考试word2007考试真题,全国职称计算机考试讲义·真题·预测三合一. Word2007中文字处理...
  6. LeetCode LRU Cache(最近最少使用缓存)
  7. 远程代理模式-Remote Proxy(Java实现)
  8. tensorflow 之tensorboard 对比不同超参数训练结果
  9. js动态给当前点击元素添加css类
  10. 写你的shell,其实很简单[架构篇]