530 likes | 628 Views
第 2 章 数据库文件管理. 本章提要 数据库结构:文件和文件组、页和扩展盘区 使用 SQL Server 企业管理器管理数据库 使用 T-SQL 语句管理数据库. 2.1 数据库存储结构. 从逻辑意义上讲, SQL Server 2000 数据库用于存放数据库对象,如表、视图、存储过程、触发器、索引和约束等,在企业管理器中,可以直观地看到他们。但是,从物理意义的角度讲这些数据库对象是要以一定的数据文件形式存储在硬盘中的,这就是所谓数据库的物理结构。. 2.1.1 文件和文件组 1 .文件
E N D
第2章 数据库文件管理 本章提要 • 数据库结构:文件和文件组、页和扩展盘区 • 使用SQL Server企业管理器管理数据库 • 使用T-SQL语句管理数据库
2.1 数据库存储结构 从逻辑意义上讲,SQL Server 2000数据库用于存放数据库对象,如表、视图、存储过程、触发器、索引和约束等,在企业管理器中,可以直观地看到他们。但是,从物理意义的角度讲这些数据库对象是要以一定的数据文件形式存储在硬盘中的,这就是所谓数据库的物理结构。
2.1.1 文件和文件组 • 1.文件 • SQL Server的文件亦称为数据库操作系统文件,每一个数据库都对应于两个或多个文件,在该数据库内创建的数据库对象(如表、视图等)都保存在这些文件中。 • 数据库操作系统文件分为三类:主数据文件、次要(二级)数据文件和事务日志文件。
(1)主数据文件(Primary data File):主数据文件是数据库的起点,指向数据库中文件的其他部分。主数据文件的默认扩展名为“.mdf”。每个数据库必须且只能包含一个主数据文件,用于存储数据库的启动信息、数据和数据库对象。
(2)次要(Secondary)数据文件也称为辅数据文件,其默认扩展名为“.ndf”。每个数据库可以没有或有一个以上的次要数据文件,用于存储主数据文件中没有存储的数据和数据库对象。(2)次要(Secondary)数据文件也称为辅数据文件,其默认扩展名为“.ndf”。每个数据库可以没有或有一个以上的次要数据文件,用于存储主数据文件中没有存储的数据和数据库对象。
(3)事务日志(Transaction log)文件的默认扩展名为“.ldf”。每个数据库必须包含一个以上的日志文件。用于存放对数据库进行操作的事物日志,在数据库遭到破坏时,可以利用日志文件恢复数据。 • 前两类文件统称为数据文件。数据库操作系统文件的大小可以设置为自动增长或非自动增长,而自动增长又可以设置成受限制的自动增长或不受限制的自动增长。
2.数据库文件组 • 在有多个数据文件时,为了管理和分配上的目的,可以将他们分成几个组,每一组可以有多个数据文件。其中含有主数据文件的那一组称为主文件组,它包含主数据文件和其他文件组中不包含的文件,数据库的系统表就存放在主数据文件组中。其他的文件组称为非主文件组或用户定义文件组。主数据文件组不必命名,而用户定义文件组必须命名。
SQL Server 2000 的数据库文件和文件组必须遵循以下规则: • 一个文件或一个文件组只能被一个数据库使用。 • 一个文件只能属于一个文件组。 • 数据和事务日志不能共存于同一文件或文件组。 • 日志文件不能属于文件组。
2.1.2 数据库的物理存储结构 • 数据库的各种数据文件和日志文件最终都是存储在磁盘上的。SQL Server中,日志文件是由一系列日志记录组成的,而数据文件则由页面和扩展盘区组成。页面是数据库中使用的最小数据单元,1页=8k字节。 • 扩展盘区是SQL Server 2000为表或索引分配空间的最小单位,1个扩展盘区=8页。
1.页 • 页(pages)是SQL Server 2000中数据的最小基本存储单位,页可以分为如下几类。 • 数据页面:用于存储数据库数据。 • 索引页面:用于存储索引数据。 • 文本/图像页:用于存储text、ntext和image类型的 数据。 • 全局分配映射页:用于扩展盘区分配的信息。 • 页的剩余(可用)空间页:用于存储页面剩余空间的信息。 • 索引分配映射页 :用于存储页面被表或索引使用的扩展盘区的信息。
2.扩展盘区 • 1个扩展盘区是8个连续的页,它是表和索引的基本存储单位。SQL Server 2000有两类扩展盘区。 • 统一扩展盘区:该扩展盘区的所有八页只能由拥有该盘区的单个对象(表或索引)独自使用。 • 混合扩展盘区
3.日志文件 • 从物理上讲,日志文件是由一系列连续的日志记录组成的,日志记录序列必须存储在一个或多个物理文件内。 • 从逻辑上讲日志文件是环状的。新的日志文件记录不断地添加到最近一次日志文件记录的后面,而日志记录中的不活动部分将在日志备份后被系统自动删除(截断)。
2.1.3 数据库规划 规划阶段必须完成下列任务: 确定系统的范围,确定开发工作所需的资源(人员、硬件和软件),估计软件开发的成本,确定项目进度。
2.1.4 SQL Server的系统数据库与示例数据库 • SQL Server的数据库可以分为两大类:系统数据库和用户数据库。系统数据库是SQL Server内置的,它们用于管理目的,不能随便更改或删除。用户数据库一般由用户创建,其使用与管理由其创建者决定。SQL Server安装时建立了6个数据库,其中master,tempdb,model和msdb是4个系统数据库;pubs和Northwind是两个用户数据库,用以示例。
2.1.4.1 系统数据库 • master数据库用以记录SQL Server系统的相关信息,如登录账户及其密码、系统配置信息、数据库信息和用户数据库的位置等,还包括许多系统存储过程用以执行某些系统操作。
tempdb数据库用于保存所有临时表、临时存储过程以及其他临时数据 。 • model数据库是所有新建数据库的模板,用户每创建一个新数据库,其内容都与模板相同。 • msdb数据库由SQL Server Agent服务使用,用于自动执行数据库有关操作,如自动进行备份、警报和复制等。
2.1.4.2 示例数据库 • SQL Server 2000在安装时建立了两个示例数据库——pubs和Northwind, 许多教材以及联机丛书中的例题都是以这两个数据库的数据为样本的。
2.1.4.3系统表 • SQL Server 2000中主要有两类系统表,表的名称都是以“sys”开头。一类系统表位于master数据库中,用于存放服务器级别的系统信息 。 • 另一类系统表位于每个数据库中,用于记录每个数据库的数据库级信息。用户数据库中的系统表继承自model数据库,用户每建立一个新的数据库,其系统表的结构与数量都与model数据库一致。
2.1.5 SQL Server的标识符 • 标识符是指SQL Server中服务器组、服务器、数据库、数据库对象(如表、视图、存储过程、触发器、规则等)、列、变量等的名称。SQL Server标识符分两类:规则标识符与界定标识符。
2.1.5.1 规则标识符 • 在SQL Server中,规则标识符是可以直接使用的标识符,但其书写必须遵守如下规则:
(1)标识符的第一个字符必须是Unicode 2.0标准所定义的字符,包括26个英文字母、下划线_、@、#,及其他语言中的字母符号。其中以一个“@”开头的表示局部变量;以“@@”开头的表示全局变量;以一个“#”开头的表示局部临时数据库对象,以“##”开头的表示全局临时数据库对象。
(2)标识符第一个字符后的字符可以是Unicode 2.0标准所定义的字符、_、@、#、$或阿拉伯数字。 • (3)标识符中不允许有空格、或其他特殊字符。 • (4)标识符不能与SQL Server保留关键字相同,无论是大写或小写。
2.1.5.2界定标识符 • 如果希望使用规则标识符以外的形式定义标识符,则必须在这类标识符外加上界定符号,以指明该界定符号内的字符为标识符,这类标识称为界定标识符。SQL Server中的界定符号有方括号[ ]、英文单引号' ' 、英文双引号" " 三种,其中方括号与英文双引号均可以用于界定标识符,但单引号只能是字符串的界定符号。
2.1.5.3 命名规则 • 1.对象命名规则 • 在SQL Server 2000中,数据库对象的全名为:服务器名.数据库名.拥有者名.对象名,应用时根据需要可以省略服务器名、数据库名、拥有者名中的一项或多项。
2.文件名 • SQL Server 2000 文件有两个名称: • (1)逻辑文件名(logical_file_name) 逻辑名用于以后执行T-SQL 语句需要引用该文件名时使用。 • (2)物理文件名(os_file_name) • 指定操作系统文件的包括物理路径在内的物理文件名。
2.2 创建数据库 • SQL Server 2000 中对数据库的大多数操作,几乎都可以使用两种方法实现,一种是编写Transact-SQL语句,另一种是利用企业管理器。 • Transact-SQL语言简称T-SQL,是SQL Server 中使用的一种结构化查询语言(Structured Query Language) 。
2.2.1 使用SQL Server企业管理器创建数据库 • 在企业管理器中,应该在某个数据库服务器(或称数据库实例)下创建用户数据库。 • 创建数据库的步骤:(见P16)
2.2.2 使用创建数据库向导创建数据库 创建数据库的步骤:(见P19)
命令说明: • (1)database_name:表示要创建的数据库名称,该名称在数据库服务器中必须惟一,并且符合标识符的规则。 • (2)关键字ON:用于指定存储数据库数据的磁盘文件(数据文件)。 • (3)[ < filespec > [ ,...n ] ]:表示n个用逗号隔开的数据文件的定义。
(4)[ , <filegroup> [ ,...n ] ] :表示n个用逗号隔开的文件组的定义。 • (5)[ LOG ON { < filespec > [ ,...n ] } ]:表示n个用逗号隔开的日志文件的定义。如果没有指定LOG ON,将自动创建一个日志文件,该文件使用系统生成的名称,大小为数据库中所有数据文件总大小的25%。
(6)< filespec > ::= 表示数据文件或日志文件的定义,具体如下: • (7)PRIMARY:该关键字指定其后面紧跟的文件组为主文件组。主文件组包含所有数据库系统表,组中第一个文件为主文件,一个数据库只能有一个主文件。如果没有指定PRIMARY,那么CREATE DATABASE 语句中列出的第一个文件将成为主文件。
(8)NAME = logical_file_name:指定操作系统文件的逻辑名。逻辑名用于以后执行T-SQL 语句需要引用该文件名时使用。 • (9)FILENAME = 'os_file_name' :指定操作系统文件的包括物理路径在内的物理文件名。
(10)SIZE = size:关键字SIZE指定 文件的初始长度为size,size的取值为整数,单位可以使用千字节(KB)、兆字节(MB)、千兆字节(GB)或兆兆字节(TB),默认值为MB。
(11)MAXSIZE = { max_size | UNLIMITED }:指定文件的最大长度为max_size时,其数值单位同上;指定文件的最大长度为UNLIMITED则表示大小不受限制。
(12)FILEGROWTH = growth_increment:指定操作系统文件每次增长的增量为growth_increment。growth_increment的取值为整数,可以使用KB、MB、GB、TB或%作单位,如果未在数量后面指定MB、KB或%等,则默认为MB。如果指定%,则增量大小为发生增长时文件大小的指定百分比。如果没有指定 FILEGROWTH,则默认值为10%,最小值为64 KB。
(13)语法中所有数据文件(无论属于哪个文件组)之间,都应该用逗号隔开;数据文件与日志文件之间没有逗号;所有日志文件之间也应该用逗号隔开,日志文件不分组。(13)语法中所有数据文件(无论属于哪个文件组)之间,都应该用逗号隔开;数据文件与日志文件之间没有逗号;所有日志文件之间也应该用逗号隔开,日志文件不分组。 • 示例:创建学生数据库。(P25)
2.3 修改数据库 2.3.1 使用SQL Server企业管理器修改数据库 步骤:[企业管理器] 右击[学生成绩库]节点 [快捷菜单] [属性] 2.3.2 使用ALTER DATABASE语句修改数据库
命令说明: • (1)ADD FILE、ADD LOG FILE、ADD FILEGROUP分别表示将要添加数据文件、日志文件、数据文件组。其中TO FILEGROUP选项则表示将文件添加到指定文件组。 • (2)REMOVE FILE、REMOVE FILEGROUP分别表示将要删除数据文件或文件组。
(3)MODIFY NAME、MODIFY FILE、REMOVE FILEGROUP分别表示将要修改数据库名称、数据文件或文件组。 • (4)filegroup_property表示文件组的三种属性之一,即READONLY(只读)、READWRITE(读写)、DEFAULT(默认,只有一个文件组为默认文件组)。其余所有语法项目与创建数据库CREATE DATABASE 语句相同。
(5)一次只能修改一项数据库属性。 • (6)只有空数据文件才能被删除。 • (7)使用MODIFY FILE修改数据库文件的大小时,只能增大,不能缩小。 • (8)主数据文件组不能修改为READONLY。 • 示例:(P27) [例1]、 [例2]、 [例3] • [例4]、 [例5]、 [例6]
2.4 压缩数据库和数据文件 数据库大小为自动增长型时,数据库会随着使用过程而增大。在SQL Server 2000中,可以将数据库设置成定期检查并自动收缩有大量空闲空间的数据库,也可以使用手工方法收缩数据库。手工收缩有3种方法。
2.4.1 使用SQL Server企业管理器压缩数据库 • 使用企业管理器收缩数据库的方法是在图4-3所示窗口中选定一个要收缩的数据库并右击,在弹出的级联菜单中依次选择“所有任务”、“收缩数据库”,系统将弹出图4-4所示“收缩数据库”对话框,在该对话框中进行收缩数据库操作。
2.4.2 使用DBCC SHRINKDATABASE 语句压缩数据库 • (1)使用DBCC SHRINKDATABASE 语句手工收缩数据库。 • 命令格式: • DBCC SHRINKDATABASE( database_name [ , target_percent ] ) • 命令说明: • target_percent表示数据库收缩后,数据文件可用空闲空间占整个数据库文件空间的百分比。
(2)使用DBCC SHRINKFILE语句,可以将单个数据库文件收缩到比其初始创建大小还要小。但必须分别收缩每个文件。 • 命令格式: • DBCC SHRINKFILE (logical_file_name, target_size ) • 命令说明: • target_size表示文件的可用空闲空间大小,默认单位是兆字节MB。
2.5 删除数据库 2.5.1 使用SQL Server企业管理器删除数据库 具体步骤: (见P34)