第 3章 数据库的创建和管理
3.1 数据库的存储结构
3.2 创建和删除数据库
3.3 修改数据库
3.1 数据库的存储结构
数据库的存储结构分为逻辑存储结构和物理
存储结构两种。
数据库的逻辑存储结构指的是数据库是由哪
些性质的信息所组成 。 实际上,SQL Server
的数据库是由诸如表、视图、索引等各种不同
的数据库对象所组成。
数据库的物理存储结构是讨论数据库文件是
如何在磁盘上存储的,数据库在磁盘上是以文
件为单位存储的,由数据库文件和事务日志文
件组成,一个数据库至少应该包含一个数据库
文件和一个事务日志文件。
3.1 数据库的存储结构
3.1.1 数据库文件
1.主数据库文件( Primary Database File)
一个数据库可以有一个或多个数据库文件,
一个数据库文件只能属于一个数据库。当有多
个数据库文件时,有一个文件被定义为主数据
库文件(简称为主文件),其扩展名为 mdf。
3.1 数据库的存储结构
主数据库文件用来存储数据库的启动信息以
及部分或者全部数据,是所有数据库文件的起
点,包含指向其它数据库文件的指针。一个数
据库只能有一个主数据库文件。
3.1 数据库的存储结构
2.辅助数据库文件( Secondary
Database File)
用于存储主数据库文件中未存储的剩余数据
和数据库对象,一个数据库可以没有辅助数据
库文件,但也可以同时拥有多个辅助数据库文
件。
辅助数据库文件的扩展名为 ndf(简称为辅
助文件)。
3.1 数据库的存储结构
3.事务日志文件
存储数据库的更新情况等事务日志信息, 当
数据库损坏时,管理员使用事务日志恢复数据
库。
每一个数据库至少必须拥有一个事务日志文
件,而且允许拥有多个日志文件。事务日志文
件的扩展名为 ldf,日志文件的大小至少是
512KB。
SQL Server事务日志采用提前写入的方式 。
3.1 数据库的存储结构
注意,SQL Server 2000中的数据和事务日
志文件不能存放在压缩文件系统或象共享网络
目录等远程的网络驱动器上。
SQL Server 2000的文件拥有两个名称,即
逻辑文件名和物理文件名。当使用 Transact-
SQL命令语句访问某一个文件时,必须使用该
文件的逻辑名 。
物理文件名是文件实际存储在磁盘上的文件
名,而且可包含完整的磁盘目录路径。
3.1 数据库的存储结构
3.1.2 数据库文件组
利用文件组可以使服务器的性能得到提高。
主文件组中包含了所有的系统表, 当建立数据
库时, 主文件组包括主数据库文件和未指定组的
其他文件 。
用户定义文件组中可以指定一个缺省文件组,
那么在创建数据库对象时如果没有指定将其放在
哪一个文件组中, 就会将它放在缺省文件组中 。
如果没有指定缺省文件组, 则主文件组为缺省文
件组 。
3.1 数据库的存储结构
一个文件只能存在于一个文件组中, 一个文
件组也只能被一个数据库使用;日志文件是独
立的, 它不能作为任何文件组的成员 。
本章首页
3.2 创建和删除数据库
3.2.1 创建数据库
创建数据库需要一定许可,在默认情况下,
只有系统管理员和数据库拥有者可以创建数据
库。数据库被创建后,创建数据库的用户自动
成为该数据库的所有者。
创建数据库的过程实际上就是为数据库设计
名称、设计所占用的存储空间和存放文件位置
的过程等。
3.2 创建和删除数据库
1.使用向导创建数据库
2.使用企业管理器创建数据库
3.使用 Transact-SQL语言创建数据库
3.2 创建和删除数据库
说明:在 Transact-SQL语言的命令格式中,
用 [ ]括起来的内容表示是可选的; [,… n]表
示重复前面的内容;用 < >括起来表示在实际
编写语句时,用相应的内容替代;用 { }括起来
表示是必选的;类似 A|B的格式,表示 A和 B只
能选择一个,不能同时都选。
3.2 创建和删除数据库
CREATE DATABASE database_name
[ON [PRIMARY] [<filespec> [,… n]
[,<filegroupspec> [,… n]] ]
[LOG ON {<filespec> [,… n]}]
[FOR LOAD|FOR ATTACH]
3.2 创建和删除数据库
?<filespec>::=
( [NAME=logical_file_name,]
FILENAME=‘os_file_name’
[,SIZE=size]
[,MAXSIZE={max_size|UNLIMITED}]
[,FILEGROWTH=growth_increment] )
[,… n]
?<filegroupspec>::=
FILEGROUP filegroup_name <filespec> [,… n]
3.2 创建和删除数据库
? database_name:新数据库的名称 。 数据库名称
在服务器中必须唯一, 最长为 128个字符, 并且要符
合标识符的命名规则 。 每个服务器管理的数据库最多
为 32767个 。
? ON,指定存放数据库的数据文件信息 。
<filespec>列表用于定义主文件组的数据文件,
<filegroup>列表用于定义用户文件组及其中的文件 。
? PRIMARY:用于指定主文件组中的文件 。 主文件
组的第一个由 <filespec>指定的文件是主文件 。 如果
不指定 PRIMARY关键字, 则在命令中列出的第一个
文件将被默认为主文件 。
3.2 创建和删除数据库
? LOG ON:指明事务日志文件的明确定义 。 如果没
有本选项, 则系统会自动产生一个文件名前缀与数据
库名相同, 容量为所有数据库文件大小 1/4的事务日
志文件 。
? FOR LOAD:表示计划将备份直接装入新建的数
据库, 主要是为了和过去的 SQL Server版本兼容 。
? FOR ATTACH:表示在一组已经存在的操作系统
文件中建立一个新的数据库 。
? NAME:指定数据库的逻辑名称 。
? FILENAME:指定数据库所在文件的操作系统文
件名称和路径, 该操作系统文件名和 NAME的逻辑名
称一一对应 。
3.2 创建和删除数据库
? SIZE:指定数据库的初始容量大小 。 如果没有指定
主文件的大小, 则 SQL Server默认其与模板数据库
中的主文件大小一致, 其它数据库文件和事务日志文
件则默认为 1MB。 指定大小的数字 size可以使用 KB、
MB,GB和 TB后缀, 默认的后缀为 MB。 Size中不能
使用小数, 其最小值为 512KB,默认值为 1MB。 主
文件的 size不能小于模板数据库中的主文件 。
? MAXSIZE:指定操作系统文件可以增长到的最大
尺寸 。 如果没有指定, 则文件可以不断增长直到充满
磁盘 。
3.2 创建和删除数据库
? FILEGROWTH:指定文件每次增加容量的
大小,当指定数据为 0时,表示文件不增长。
增加量可以确定为以 KB,MB作后缀的字节数
或以 %作后缀的被增加容量文件的百分比来表
示。默认后缀为 MB。如果没有指定
FILEGROWTH,则默认值为 10%,每次扩容
的最小值为 64KB。
3.2 创建和删除数据库
例 3-2-1:使用 CREATE DATABASE创建一
个 student数据库,所有参数均取默认值。
例 3-2-2:创建一个 Student1数据库,该数
据库的主文件逻辑名称为 Student1_data,物
理文件名为 Student1.mdf,初始大小为
10MB,最大尺寸为无限大,增长速度为 10%;
数据库的日志文件逻辑名称为 Student1_log,
物理文件名为 Student1.ldf,初始大小为 1MB,
最大尺寸为 5MB,增长速度为 1MB。
3.2 创建和删除数据库
例 3-2-3:创建一个指定多个数据文件和日志文件
的数据库。该数据库名称为 students,有 1个 10MB
和 1个 20MB的数据文件和 2个 10MB的事务日志文件。
数据文件逻辑名称为 student1和 student2,物理文
件名为 student1.mdf和 student2.mdf。主文件是
student1,由 primary指定,两个数据文件的最大尺
寸分别为无限大和 100MB,增长速度分别为 10%和
1MB。事务日志文件的逻辑名为 studentlog1和
studentlog2,物理文件名为 studentlog1.ldf和
studentlog2.ldf,最大尺寸均为 50MB,文件增长速
度为 1MB。
3.2 创建和删除数据库
3.2.2 删除数据库
1.利用企业管理器删除数据库
2.利用 Drop语句删除数据库
Drop database database_name[,… n]
说明:只有处于正常状态下的数据库,才能
使用 DROP语句删除。当数据库处于以下状态
时不能被删除:数据库正在使用;数据库正在
恢复;数据库包含用于复制的已经出版的对象。
本章首页
3.3 修改数据库
3.3.1 数据库更名
在重命名数据库之前, 应该确保没有用户使
用该数据库, 而且数据库应该设置为, 单用户,
模式 。 系统存储过程 sp_renamedb语法如下:
sp_renamedb
[@dbname=]'old_name',[@newname=]
'new_name'
3.3 修改数据库
3.3.2 利用企业管理器修改数据库属性
限 制 访 问 包 含 两 个 选 项,, db_owner,
dbcreator或 sysadmin的成员, 选项表示只有数据
库的所有者, 数据库创建者和系统管理员才有权使用
数据库;, 单用户, 选项表示数据库在同一时间只能
供一个用户使用 。
ANSI NULL默认设置:允许在数据库表的列中输
入空 ( NULL) 值 。
递归触发器:指定是否允许触发器递归调用 。
自动更新统计信息:允许使用 SELECT INTO或
BCP,WRITETEXT,UPDATETEXT命令向表中大
量插入数据 。 在开发数据库时常常将此选项设置为真 。
3.3 修改数据库
残缺页检测:允许自动检测有损坏的页 。 页是数据
库内容的基本存储单位, 每个页的大小为 8KB。 由于
SQL Server对页的读写单位是大小为 512字节的扇区,
当每个页的第一个扇区被成功写入后, SQL Server
就认为此页已经被成功写入 。 因此, 如果写完第一个
扇区后发生突发事件, 导致写入中断, 就会产生有损
坏的页, 需要通知备份来恢复数据库 。
自动关闭:当数据库中无用户时, 自动关闭该数据
库, 并将所占用的资源交还给操作系统 。 对那些不间
断使用的数据库不要使用此选项 。
3.3 修改数据库
自动收缩:允许定期对数据库进行检查, 当数据库
文件或日志文件中未用空间超过其大小的 25%时, 系
统将会自动缩减文件, 使其未用空间等于 25%。 当文
件大小没有超过其建立时的初始大小时, 不会缩减文
件 。 缩减后的文件也必须大于或等于其初始大小 。
自动创建统计信息:在优化查询时, 根据需要自动
创建统计信息 。
使用被引用的标识符:标识符必须用双引号括起来,
且可以不遵循 Transact-SQL命名标准。
3.3 修改数据库
3.3.3 使用 Transact-SQL语言修改数据库
只 有 数 据 库 管 理 员 或 具 有 CREATE
DATABASE权限的数据库所有者才有权执行该
语句 。
ALTER DATABASE语句的语法格式如下:
3.3 修改数据库
Alter database databasename
{add file<filespec>[,… n] [to filegroup
filegroupname]
|add log file <filespec>[,… n]
|remove file logical_file_name
|remove filegroup filegroup_name
|modify file <filespec>
|modify name=new_databasename
|add filegroup filegroup_name
|modify filegroup filegroup_name
{filegroup_property|name=new_filegroup_
name}}
3.3 修改数据库
add file<filespec>[,… n] [to filegroup
filegroupname]:表示 向指定的文件组中添加新
的数据文件 。
add log file <filespec>[,… n]:增加新的
日志文件 。
remove file logical_file_name,删除指定
的操作系统文件 。
remove filegroup filegroup_name,删除
指定的文件组 。
modify file <filespec>:修改某个操作系统
文件 。
3.3 修改数据库
modify name=new_databasename:重
命名数据库 。
add filegroup filegroup_name:增加一
个文件组 。
modify filegroup filegroup_name:修改
某个指定文件组的属性。
3.3 修改数据库
3.3.4 缩小数据库
1.使用企业管理器可以缩小数据库。
2.使用 Transact-SQL语言缩小数据库。
( 1)使用 DBCC SHRINKDATABASE命令
收缩指定数据库中的数据文件。
DBCC SHRINKDATABASE
(database_name[,target_percent][,{N
OTRUNCATE |TRUNCATEONLY}])
3.3 修改数据库
? database_name:要收缩的数据库名称 。
? Target_percent:当数据库收缩后, 数据库文件
中剩余可用空间的百分比 。
? NOTRUNCATE:被释放的文件空间依然保持在数
据库文件中 。 如果未指定, 将所释放的文件空间被操
作系统回收 。
? TRUNCATEONLY:将数据文件中未使用的空间释
放给操作系统,并将文件收缩到上一次所分配的大小。
使用 TRUNCATEONLY 时,将忽略
target_percent的限制。
3.3 修改数据库
( 2) 使用 DBCC SHRINKFILE命令收缩数
据库的指定数据文件或日志文件大小
DBCC SHRINKFILE的语法格式如下:
DBCC SHRINKFILE
(file_name
{[,target_size]|[,{EMPTYFILE|NOTRUN
CATE|TRUNCATEONLY}]})
3.3 修改数据库
file_name:要收缩文件的逻辑名称 。
target_size:将文件缩小到指定的长度,
以 MB为单位 。 如果不指定, 将文件减少到最
大程度 。
EMPTYFILE:将数据从指定文件中转移到
同一文件组中的其它文件 。
NOTRUNCATE和 TRUNCATEONLY:与
DBCC SHRINKDATABASE命令中相同。
本章首页