第04章数据库创建.doc_第1页
第04章数据库创建.doc_第2页
第04章数据库创建.doc_第3页
第04章数据库创建.doc_第4页
第04章数据库创建.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章 数据库创建与管理数据库是全部资源的总称,是其他对象的容器。要存储、管理和使用数据,首先要建立数据库。数据库的管理是其他操作的基础。4.1 SQL Server数据库基础4.1.1 SQL Server数据库概述启动SSMS(SQL Server Management Studio),在【对象资源管理器】中展开服务器下的数据库节点,可以看到如图4.1所示的数据库节点。SQL Server数据库节点由四个部分组成:系统数据库、数据库快照、与报表服务相关的数据库和用户数据库。系统数据库、数据库快照和报表服务相关数据库参见有关章节。而用户数据库,就是用户根据需要建立的数据库。在一个SQL Server服务器实例内,最多可以建立32767个数据库。点击展开用户数据库“家电进销管理”节点,如图4.2所示。 图4.1 SSMS中数据库节点内容示意图 4.2 SSMS中用户数据库包含的对象示意数据库由“关系图、表、视图、可编程性、安全性”等对象构成。创建一个数据库时就自动包含了这些对象节点,以后用户根据需要建立相应的对象。可以认为,SQL Server数据库是由表、视图、用户、可编程等数据库对象组成的集合。在这些对象中,表是用于相关联数据的组织与管理的对象,其他对象一般都是围绕着表对象来创建和使用的。可以说,数据库是相关联的数据及各种有关对象的集合和容器。4.1.2 SQL Server数据库存储SQL Server数据库及其包含的全部对象,作为一个整体都保存在外存上相应的数据库文件中。在存储时,SQL Server数据库包含两类文件:数据文件和事务日志文件。数据文件用于存储数据库的数据和各种对象,事务日志文件用于存储有关数据库操作信息的事务日志。一个数据库至少有一个数据文件和一个日志文件。可以有多个数据文件和多个日志文件。一个数据库最多可以拥有32767个数据文件和32767个日志文件。数据文件分为主数据文件和辅助数据文件两种类型形式。每个数据库都有且仅有一个主数据文件。主数据文件默认后缀是mdf。辅助数据文件或称次数据文件是可选的,用于将数据和数据库对象分散存储在不同的文件乃至不同的存储设备上,以提高数据库安全性和处理性能。次数据文件由用户根据需要定义,可以是0到多个。次数据文件默认后缀ndf。SQL Server使用文件组对数据文件进行逻辑上的组合。一个数据文件必定属于某个文件组。创建数据库时,SQL Server自动建立了一个主文件组。主数据文件自动属于主文件组。用户可以定义其他文件组。次数据文件可以属于主文件组,也可以属于用户文件组。例如,在某个数据库中,2个文件(datal.ndf和data3.ndf)分别创建在2个不同的磁盘驱动器中,然后为它们指定一个文件组fgroupl。以后,所创建的表可以明确指定放在文件组fgroupl上。对该表中数据的查询将分布在这2个磁盘上,这样,可以通过执行并行访问而提高查询性能。在创建表时,不能指定将表放在某个文件内,但可指定将表放在某个文件组内。因此,可以通过指定某个文件属于某个文件组,再指定表属于该文件组来达到将该表放在特定文件内的目标。事务日志文件存储用户或系统对数据库的操作。数据库的操作以事务为一个工作单元。一个事务,要么全部完成,要么全部不完成。一个事务发生时,首先登记事务日志,只有完成并提交的事务才会写入数据库。这种事务机制用来保证数据库操作的一致性和完整性。日志记录对数据库的所有更新操作。日志记录每一个事务的开始、对数据的改变和取消修改的足够信息。对于一些大型操作,例如创建索引,日志只是记录该操作的事实,而不是记录所涉及的数据。事务日志还记录数据页的分配和释放,以及每一事务的提交和回滚。这样就允许SQL Server恢复事务或者撤消事务。日志文件的基本作用是保障数据库完整。若数据库由于某种故障被破坏,可以先利用已有最新数据库备份还原,然后对于备份后的新操作,通过查阅日志文件,将已提交事务重新执行,未提交事务撤销即可。另外,日志可用于追踪审计,从而提高安全性。随着对数据厍不断进行操作,日志是连续增加的。每一个数据库都至少有一个事务日志文件,根据需要可定义多个日志文件,日志文件的默认后缀是ldf。定义日志文件时,一般不要将其与数据文件放在一个磁盘上,以免同时出现损坏。使用文件和文件组,要注意以下几点。 一个文件或者文件组只能用于一个数据库,不能用于多个数据库。 主数据文件只属于主文件组。 一个数据文件只能是某一个文件组的成员,不能同时是多个文件组的成员。 事务日志文件不属于任何文件组。SQL Server数据库的存储组织结构如图4.3所示。SQL Server数据库存储数据文件事务日志文件(ldf)1-n个主数据文件(mdf)(主文件组)次数据文件(ndf)(主文件组、用户文件组)1个0-n个图4.3 SQL Server数据库存储组织示意数据文件和日志文件都有明确的磁盘路径和名称。不过,SQL Server内部如果直接用物理文件执行操作,使用起来不方便,也容易发生错误。为此,定义数据库时需要为每个文件定义内部逻辑名。这样在系统内使用逻辑名就非常方便可靠。在SQL Server中,可管理的最小物理存储空间称作页(Page),每页大小8KB,即8192字节,1MB空间可以有128页。系统给数据文件分配的磁盘空间逻辑上被分解为从0-n的连续多个编号的页。磁盘I/O操作在页级水平完成,也就是说,SQL Server每次读或写整页。由于每页上要分配一部分空间来记录与该页有关的系统信息,因此每页可用空间是8060个字节。每页有一个96字节的页头(Header),用来存储页的系统信息,具体包括:页编号,页类型、该页剩余空闲空间等。数据行在页头之后,按顺序存储在页中。在页的底部有一个登记每行数据记录在页中偏移量的表格。在表中,每一行数据不能跨页存储。这样,表中每一行的字节数最大不能超过一页的可用大小。但是,包含varchar、Nvarchar、varbinary等数据类型列的表不受这种限制。SQL Server规定连续8页构成一个盘区(Extents)。盘区是管理磁盘空间的基本单元,用于表、索引的存储。每兆磁盘空间对应16个盘区。为了更有效分配空间,SQL Server不为小数据量的表分配一个完整盘区。SQL Server提供两种类型盘区,即统一区(Uniform Extents)和混合区(Mixed Extents)。由单个对象所拥有的盘区是统一区,区中全部8页只能由所属对象使用。由两个或两个以上对象共享的盘区称为混合区,最多可以由8个对象拥有,8个页分别由不同对象使用。一个新表或索引通常是从混合盘区中分配页,当表或索引的大小增长超过了8页,那么就以统一区方式进行分配。当在已存在的表上创建索引,如果索引大小超过了8页,也以统一区方式分配空间。4.1.3 创建数据库前的准备用户在创建数据库之前,应进行基本规划,对有关要求有充分的认识。1了解数据库命名规则在SQL Server上创建数据库时,数据库的命名规则取决于数据库兼容的级别。SQL Server 2008使用的是100级别。数据库级别可以用存储过程“sp_dbcmptlevel”来设置。SQL Server 2008数据库的命名规则如下。l 名称长度不能超过1 28个字符,本地临时表的名称不能超过1 1 6个字符。l 名称的第一个字符必须是英文字母、中文、下划线、“”或“#”符号。l 除第一个字符之外的其他字符,还可以包括数字09、$。l 名称中间不允许有空格或其他特殊字符。l 名称不能是保留字。由于在Transact-SQL中,“”开头的标识符表示局部变量、“”表示全局变量、“#”表示全局临时对象,所以不建议用这些符号作为数据库名称开头。在SQL Server 2008中,保留字区分大小写,但不建议用不同大小写的保留字来做为数据库名。2拥有创建数据库的权限不是任何SQL Server服务器用户都可以创建数据库。创建数据库,必须是服务器管理员,或者至少要拥有Create database、Create any database或Alter any database权限。创建数据库的用户将成为该数据库的所有者。另外,任何连接访问SQL Server的用户,可以通过授权成为数据库的所有者。3完整设计好数据库、确定所有的表数据库首先是表的集合。事先做好数据库设计,确定有多少表,每个表的名称、字段结构、字段类型和大小、所有索引和约束等。4估算数据库大小、规划文件存放位置创建数据库要事先指定数据库文件的大小,另外,由于数据库经常更新,因此大小会频繁发生变动,这样,在创建前,比较准确的估算数据库大小就十分重要。数据库的大小等于数据库中所有表大小、索引大小以及其他占据物理空间的数据库对象大小之和。其中,估算表的大小最重要,因此要掌握计算单个表大小的方法。依照前述数据库空间管理的知识,估算单个表的基本方法如下。表是记录(行)的集合,一条记录的大小可根据组成该记录的字段大小之和得到。假设某个表一行数据记录的字节数是800字节。这时,一个数据页上最多只能存放10行数据(注意数据不能跨页)。若该表大约有10万行数据,那么该表将占用1万个数据页的空间。因此,该表占用空间的大小估计为:100008KB=80000KB=78.125MB。依次计算所有表的可能大小,再考虑其他因素,就可以得到数据库大小的设计值。由于处理性能和安全性的考虑,设计数据库时应根据运行环境,规划好文件组的划分,数据文件的个数、位置、大小和所在文件组,以及事务日志文件的个数、位置、大小等。事务日志文件不要与数据文件放在同一个位置。4.2 创建数据库在SQL Server中,创建数据库主要使用SQL Server Management Studio(SSMS)。主要方法有两种:使用可视方式交互创建数据库,或用Transact-SQL命令创建数据库。4.2.1 SSMS交互创建数据库交互创建数据库的基本步骤和方法如下。 单击【开始】|【程序】|【Microsoft SQL Server 2008】|【SQL Server Management Studio】,输入登录账户信息,连接启动SSMS程序界面。 在【对象资源管理器】窗格中展开服务器,选择【数据库】节点单击右键,在弹出菜单中选择【新建数据库】命令,弹出“新建数据库”对话窗口,如图4.4所示。图4.4 交互创建SQL Server数据库操作界面对话框中有【常规】、【选项】和【文件组】三个选择页。完成这三个选择页相关内容定义,就完成了数据库的创建工作。 在“数据库名称”框中输入数据库名称。图中输入“TestDB”。在“所有者”框中输入该数据库的所有者。直接使用“默认值”,或通过单击文本框右边的 按钮进一步选择所有者。数据库所有者是对该数据库具有全部控制权限的用户。默认数据库的所有者为创建该数据库的用户。选择“使用全文索引”复选框,可以在数据库中进行全文索引查询(图中不可用)。 在“数据库文件”下的列表中,定义存储数据库的数据文件和事务日志文件。列表初始包含两行。一行用于定义数据文件,另一行用于定义日志文件。该列表中各字段值的含义如下。l 逻辑名称:定义文件的逻辑名。l 又件类型:定义当前文件是数据文件还是日志文件。l 文件组:显示或用于定义当前数据文件所属文件组。l 初始大小:定义文件的初始容量。默认值由model数据库设置。l 自动增长:用于设置在文件容量不够用时,根据何种方式自动增加文件大小。单击右边 按钮,打开“更改自动增长设置”对话框进行设置,如图4.5所示。l 路径:指定存放文件的目录。在默认情况下,SQL Server 将存放路径设置为SQL Server 安装目录下的data子目录。单击 按钮可以打开“定位文件夹”对话框更改数据文件或日志文件的存储路径。l 文件名:定义数据文件和日志文件的文件名。单击【添加】按钮,可添加次数据文件,或增加日志文件。单击【删除】按钮删除当前选择的文件,但初始的主数据文件和日志文件不能删除。如图4.5和图4.6所示分别为数据文件、日志文件的自动增长设置对话框,分别由两项设置内容组成:“文件增长”和“最大文件大小”。 图4.5 定义数据文件自动增长方式 图4.6 定义日志文件自动增长方式不选择“启用自定增长”复选框,则这两项都不可设置,以后由用户手动更改。选择“启用自定增长”复选框。“文件增长”可以单选“按百分比”或“按MB” 方式。“按百分比”方式每次根据现有大小按所设置的百分比增长(但增长值为最接近该百分比值的64KB的倍数);“按MB”方式每次固定增加相同的大小,默认增长单位为MB,在Transact-SQL命令中还可以使用KB、GB等单位。“最大文件大小”可以单选“限制文件增长”和“不限制文件增长”方式。 单击选择页【选项】,打开如图4.7所示页面,在这里可以设置所创建数据库的排序规则、恢复模式、兼容级别、恢复、游标等各种选项。数据库选项的设置对于数据库的操作和管理有很大影响,因此要根据需要设置。另外将来根据需要也可以进行修改。大多数选项都可以在这里设置,有些选项必须使用Transact-SQL命令。完整的数据库选项及其含义见附录C。设置【兼容级别】为SQL Server 2008(100),这样可以保证SQL Server 2008以前版本的数据库能够顺利创建数据库关系图。图4.7 设置数据选项界面 单击选择页【文件组】,打开如图4.8所示页面,页中可以查看数据库中当前文件组及其所属文件的个数。单击【添加】按钮,可以定义新的文件组。在定义数据文件时,除主文件必须属于PRIMARY组以外,次文件可以选择不同的文件组。单击【删除】按钮删除文件组。注意PRIMARY组不可删除。若某个文件组中包含数据文件,那么删除文件组也将同时删除所包含的数据文件,不过,若该文件中有数据,则数据文件和文件组都不可删除。完成以上操作后,单击【确定】按钮,关闭【新建数据库】对话框。这样就完成了一个数据库的创建。可以在【对象资源管理器】窗格右键单击“数据库”节点,选择【刷新】命令,就能看到新建的数据库。图4.8 定义文件组界面4.2.2 Transact-SQL创建数据库使用Transact-SQL命令创建数据库,相关的主要有三条命令:CREATE DATABASE、ALTER DATABASE、DROP DATABASE。分别完成数据库的创建、修改和删除操作。为了精确描述Transact-SQL命令语法,需要事先约定描述命令语法的符号,这些符号不是语法的一部分。另外还要对一些表达方式进行规定。主要约定如下。l Transact-SQL命令词或关键字全部用大写字母。l 需要用户完成的标识符或对象用小写字母或中文表示。l 方括号()表示可选项。方括号括起来的内容根据需要选择或省略。l “N”表示重复项,表示前面列出的同样的选项可以重复n遍。l 尖括号()表示括起来的部分需要进一步定义或说明,如语法中的。该项的真正语法随后在符号“:=”后加以定义。l 花括号()括起来的部分不可省略。若与符号“|”连用,表示花括号中用“|”分隔的选项或参数多选其一。上述符号和表示法常常会混合在一起使用,以表示多重含义。1Transact-SQL创建数据库命令Transact-SQL中创建数据库命令包含的选项很多,核心内容的语法如下。语法 CREATE DATABASE database_name ON PRIMARY ,.n , ,.n LOG ON ,.n COLLATE collation_name := ( NAME = logical_file_name , FILENAME = os_file_name , SIZE = size KB | MB | GB | TB , MAXSIZE = max_size KB | MB | GB | TB | UNLIMITED , FILEGROWTH = growth_increment KB | MB | GB | TB | % ) ,.n := FILEGROUP filegroup_name DEFAULT ,.n 其中,database_name 为数据库名。数据库名必须符合标识符规则并在SQL Server实例中唯一。若为日志文件定义了逻辑名,数据库名长度最多可达128个字符;若未定义日志文件逻辑名,则SQL Server 将把数据库名加上后缀来为日志生成逻辑名和文件名,这样数据库名将限制在123个字符内,从而使生成的逻辑名不超过128个字符。如果未定义数据文件名称,则SQL Server自动使用数据库名作为数据文件的文件名和逻辑名。ON:显式定义数据文件。当后面是以逗号分隔的、用以定义主文件组的数据文件的 项列表时,需要使用 ON。主文件组的文件列表后可以继续写出以逗号分隔的、用来定义用户文件组及其文件的 项列表(可选)。PRIMARY:用来指定主文件组的项中指定的第一个文件将成为主文件。如果省略 PRIMARY,那么 CREATE DATABASE 语句中列出的第一个文件将成为主文件。LOG ON:显式定义日志文件。LOG ON后跟以逗号分隔的用以定义日志文件的 项列表。如果没有指定 LOG ON,将自动创建一个日志文件,其大小为该数据库的所有数据文件大小总和的 25% 或 512 KB,取两者之中的较大者。COLLATE:指定数据库默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。若没有指定排序规则,则将 SQL Server 实例的默认排序规则分配为数据库的排序规则。 是关于数据文件或日志文件的具体文件属性的定义说明。NAME logical_file_name:指定文件的逻辑名称。指定 FILENAME 时,需要使用 NAME。在 SQL Server 中引用文件时使用逻辑名。逻辑名在数据库中必须唯一,必须符合标识符规则。名称可以是字符或 Unicode 常量,也可以是常规标识符或分隔标识符。FILENAME os_file_name :指定物理文件名称。包括文件路径和文件名。执行 CREATE DATABASE 语句前,指定路径必须存在。SIZE size:指定文件的初始大小。必须是整数值,可以使用KB、MB、GB或TB后缀。默认值为 MB。如果没有为主文件定义初始大小,则数据库引擎将使用 model 数据库中的主文件大小。如果定义辅助数据文件或日志文件,但未指定其大小,则数据库引擎将以1MB作为该文件的大小。主文件的大小至少应与 model 数据库的主文件大小相同。MAXSIZE max_size:指定文件可增大到的最大值。使用整数定义。可以使用KB、MB、GB 和TB 为单位,默认值为 MB。如果不指定最大大小,则文件将不断增长直至磁盘被占满。UNLIMITED指定文件将增长到磁盘充满。在 SQL Server 中,指定为不限制增长的日志文件的最大大小为 2 TB,而数据文件的最大大小为 16 TB。FILEGROWTH growth_increment:定义文件的自动增量。增量值不能超过MAXSIZE设置。该值可以 MB、KB、GB、TB 或百分比 (%) 为单位指定,默认值为 MB。如果指定 %,则增量大小为发生增长时文件大小的指定百分比,并舍入为最接近的 64 KB 的倍数。值设为 0 时表明自动增长被设置为关闭,不允许增加空间。如果未指定FILEGROWTH,则数据文件的默认增长值为1MB,日志文件的默认增长比例为 10%,并且最小值为 64 KB。 用来定义用户文件组及其属性。FILEGROUP filegroup_name:定义用户文件组的逻辑名称。名称必须在数据库中唯一,不能是系统提供的名称 PRIMARY 和 PRIMARY_LOG。名称可以是字符或 Unicode 常量,也可以是常规标识符或分隔标识符。名称必须符合标识符规则。DEFAULT:指定命名文件组为数据库中的默认文件组。2创建数据库在SSMS的查询编辑器窗口处理Transact-SQL命令。单击工具栏【新建查询】按钮,将以当前登录账户的身份启动查询编辑器窗口,或者选择【文件】|【新建】|【数据库引擎查询】菜单单击并输入登录账户信息,可以新的登录启动查询编辑器窗口。在查询编辑器窗口输入Transact-SQL命令,然后选择要执行的命令,单击工具栏【执行】按钮,或者单击【查询】|【执行】项,或者使用快捷键F5来使命令执行。【例4-1】 以最简单格式创建数据库。输入命令:CREATE DATABASE TestDB1省略所有选项,这时,将以model数据库为模板,全部采用系统默认值建立数据库TestDB1,数据文件和日志文件存储在默认文件路径下。【例4-2】创建“家电进销管理”数据库。先创建文件夹E:JXGL和D:JXGLLOG,然后输入以下命令。 CREATE DATABASE 家电进销管理 ON PRIMARY ( NAME=JXGL_DAT, FILENAME=E:JXGLJXGL_DAT.MDF, SIZE=5, MAXSIZE=30, FILEGROWTH=2 ) LOG ON ( NAME=JXGL_LOG, FILENAME=D:JXGLLOGJXGL_LOG.LDF, SIZE=3, MAXSIZE=10, FILEGROWTH=10% )GO执行命令,创建“家电进销管理”数据库,包括一个数据文件、一个日志文件(要事先建立相应文件路径)。在【对象资源管理器】中选择数据库节点右键单击,在弹出菜单中选择【刷新】项单击,则可看见所创建的数据库。GO为批结束标志(参见第6章)。【例4-3】分析创建“TestDB2”数据库的命令。创建文件夹E:data、F:data和D:log,输入命令。 CREATE DATABASE TestDB2 ON PRIMARY ( NAME=file1, FILENAME=E:datafile1.MDF,SIZE=3,MAXSIZE=20,FILEGROWTH=2) , ( NAME=file2, FILENAME=E:datafile2.NDF,SIZE=3,MAXSIZE=10,FILEGROWTH=1) , FILEGROUP fgroup ( NAME=file3, FILENAME=F:datafile3.NDF,SIZE=3,MAXSIZE=UNLIMITED,FILEGROWTH=15% ) LOG ON ( NAME=log1, FILENAME=D:loglog1.LDF,SIZE=3, FILEGROWTH=512KB )GO创建的数据库包含三个数据文件file1、file2、file3和一个日志文件log1。而file1、file2位于主文件组,file3位于用户定义的fgroup文件组。可以在编辑器窗口进行命令的语法分析。选择命令行,单击工具栏(分析)按钮,进行语法检查,如果通过,则在消息窗口中显示“命令已成功完成”提示消息。4.3 数据库管理创建数据库为所有数据库对象建立了一个容器。随着操作不断进行,数据库会不断变化,因此需要经常对数据库进行管理维护。4.3.1 维护数据库使用交互操作方式修改数据库,在SSMS的【对象资源管理器】窗格数据库节点下选择要修改的数据库,单击右键,在弹出菜单中单击【属性】,弹出“数据库属性”对话窗口,如图4.9所示。图4.9 数据库属性对话窗口分别单击选择页上的“常规”、“文件”、“文件组”、“选项”、“权限”等选项,将进入相应的窗口页面,在这些窗口内可以重新交互设置数据库属性。对于命令方式,Transact-SQL通过ALTER DATABASE命令实现多种数据库修改功能。该命令格式很复杂,因此,需要根据不同的功能来分析其语法。几种常用功能如下。1修改数据库名ALTER DATABASE命令修改数据库名语法如下。语法 ALTER DATABASE database_name MODIFY NAME = new_database_name使用指定的名称 new_database_name 重命名数据库database_name。2修改与数据库关联的文件和文件组修改与数据库关联的文件和文件组的命令基本语法框架如下。语法 ALTER DATABASE database_name | 其中表示添加或修改文件,可以执行的子命令如下。:= ADD FILE ,.n TO FILEGROUP filegroup_name | ADD LOG FILE ,.n | REMOVE FILE logical_file_name | MODIFY FILE 表示添加或修改文件组,可以执行的子命令如下。:= ADD | REMOVE| MODIFY FILEGROUP filegroup_name 即主要是添加(ADD)、移去(REMOVE)和更改(MODIFY)文件或文件组。详细语法参见联机丛书有关说明。【例4-4】对“TestDB2”数据库进行有关修改。ALTER DATABASE TestDB2ADD FILEGROUP Fgroup1 -添加文件组Fgroup1ALTER DATABASE TestDB1ADD FILE (NAME=file4,FILENAME=e:datafile4.ndf,SIZE=5MB)TO FILEGROUP Fgroup1 -添加文件file4到文件组Fgroup13扩大数据库大小扩大数据库存储大小有三种方法。一是自动增长方式;二是增加次数据文件或日志文件;三是手动修改现有文件大小。自动增长方式会消耗数据库资源,对于数据库性能有一定影响。如果不设置为自动增长,可以用手动方式扩大现有文件大小。使用交互操作方式,启动数据库的“属性”对话窗口(见图4.9),选择“文件”页面,输入增大的新值即可。对于Transact-SQL命令,使用ALTER DATABASE的更改(MODIFY)子命令即可。4缩小数据库大小缩小数据库的大小,不能采用与扩大数据库相似的方式。有以下几种方式进行收缩。l 使用交互方式。l 使用自动收缩方式。l 使用DBCC SHRINKDATABASE命令。l DBCC SHRIKNFILE命令。(1) 交互方式使用SSMS交互操作既可以收缩整个数据库大小,也可以收缩指定数据文件的大小。在【对象资源管理器】中,右键单击所选数据库,在弹出菜单中选择【任务】|【收缩】|【数据库】或【文件】项,弹出收缩对话窗口。如图4.10是收缩文件窗口。根据图中提示进行相应设置即可。图4.10 收缩文件对话窗口(2) 使用自动收缩方式SQL Server数据库引擎会定期检查每一个数据库存储空间的使用情况。如果数据库AUTO SHRINK选项设置为ON,则数据库引擎将根据情况自动收缩数据库中的文件大小。如果该选项设置为OFF,则不自动收缩数据库大小。该选项默认值是OFF。用ALTER DATABASE命令可设置AUTO SHRINK选项。命令语法形式如下。语法 ALTER DATABASE database_name SET AUTO SHRINK ON | OFF 数据库引擎检查数据库空间使用情况,当文件中超过25%的部分都是未使用空间时,开始执行收缩文件操作。当文件收缩使数据库达到未使用空间占该文件25%大小或者收缩至文件初始创建时的大小两者中较大者时停止收缩。数据库大小不能低于其创建时大小。数据库的数据文件和日志文件都可以自动收缩,但不能收缩只读数据库。另外只有在数据库设置为SIMPLE恢复模式或事务日志已经备份时,才可以减小日志文件大小。(3) 使用DBCC SHRINKDATABASE命令收缩数据库DBCC SHRINKDATABASE命令比自动收缩方式更灵活,可以对整个数据库进行收缩。其基本语法形式如下。语法DBCC SHRINKDATABASE(database_name ,target_percent , NOTRUNCATEADD | NOTRUNCATEONLYRE )target_percent参数指定文件中可用空间的比例。例如,如果要将TestDB2数据库压缩至未使用空间占数据库大小的10%时,使用下面的命令。DBCC SHRINKDATABASE(TestDB2 , 10)若TestDB2是当前数据库,则可以用0代表数据库名。收缩数据库时,用户可以在数据库中继续执行操作。在收缩数据库时,可以使用NOTRUNCATE或NOTRUNCATEONLY关键字。这两个关键字不能同时使用,并且只对数据文件起作用。NOTRUNCATE关键字表示将文件中的数据栘动到前面的数据页,但是并不将未使用的空间释放给操作系统,文件的物理大小并不变化,好像没有收缩一样。NOTRUNCATEONLY关键字将文件末尾的未分配空间全部释放给操作系统,但是文件内部并不移动数据。当使用该关键字时,target_percent参数数据将被系统忽略。同自动收缩数据库一样,使用DBCC SHRINKDATABASE命令不能将数据库的大小收缩至低于其初始创建时的大小。(4) 使用DBCC SHRINKFILE命令收缩数据库DBCC SHRINKFILE命令可以收缩指定的数据库文件,并且可以将文件收缩至小于其初始创建的大小,重新设置当前的大小为其初始创建的大小。在执行收缩数据库操作时,DBCC SHRINKFILE命令的功能最强大。命令的基本语法形式如下。语法DBCC SHRINKFILE(file_name, target_size | EMPTYFILE )file name参数指定将要收缩的文件逻辑名称,target_size参数指定该文件将要收缩到的大小,使用MB为单位。注意使用该命令应使收缩的数据库成为当前数据库。收缩数据库文件只能收缩未使用的空间,不能收缩数据正在使用的空间。例如,若数据库已经占用10MB空间,则不会收缩到比10MB更小的空间。由于不能删除包含数据的数据文件,因此可以利用该收缩命令帮助删除数据库中某个指定的包含有数据的数据文件。例如,在TestDB2数据厍中包含3个数据文件,file1、file2、file3。现在要删除file3数据文件,但其中有数据存储。可以使用下面的脚本命令:USE TestDB2 -指定TestDB2为当前数据库GODBCC SHRINKFIIE (file3, EMPTYFILE)ALTER DATABASE TestDB2 REMOVE FILE file2命令中EMPTYFILE关键字表示将指定文件上的数据移到其他文件上,使其成为空文件,这样就可以删除该文件。4.3.2 设置或修改数据库选项在SQL Server中,共有大约30多个数据库选项,用来设定数据库不同方面的状态和参数。任何时刻,这些选项都有一个确定的值。数据库选项对数据库的运行有很大影响,因此,用户应仔细了解各选项的含义,根据需要进行修改设置。主要数据库选项的名称和功能描述参见附录C。在交互创建数据库时,单击选择页的【选项】,可以对多数数据库选项进行设置,参见图4.7所示。对于已创建的数据库,用户可以在【对象资源管理器】中选择数据库单击右键,在弹出菜单上单击【属性】项,弹出“数据库属性”对话窗口,如图4.9所示。在窗口内单击选择页的【选项】进入选项对话窗口,可以查看或修改数据库选项值。设置数据库选项的Transact-SQL命令基本语法如下。语法 ALTER DATABASE database_nameSET ,.n 数据库选项众多,主要的设置方式有两种:设置ON/OFF;或者从几种并列的选项值中选择一个。在用户不设置的情况下,SQL Server会自动设置为默认值。【例4-5】设置“TestDB2”数据库的有关选项。ALTER DATABASE TestDB2SET RECOVERY FULL, PAGE_VERIFY CHECKSUM, ANSI_NULL ON关于数据库选项的深入分析参见联机丛书或有关资料。4.3.3 查看数据库状态和信息用户可以根据需要查看数据库有关信息。例如存储过程SP_HELPDB 可以查看所有数据库及指定数据库的基本信息。如执行EXEC SP_HELPDB命令,可以查看所有数据库的基本信息。执行EXEC SP_HELPDB TestDB命令,可以查看数据库TestDB及其文件的信息。用户还可以利用以下目录视图,查看数据库信息。l 使用sys.database_files查看有关数据库文件的信息。l 使用sys.filegroups查看有关数据库文件组的信息。l 使用sys.maste_files查看数据库文件的基本信息和状态信息。任何时刻,数据库都处于某种状态下,例如,ONLINE状态表示数据库处于正常的在线状态,可以对数据库执行正常的操作。要理解数据库的运行特征,就需要了解数据库的状态和选项。数据库的状态选项和功能描述如表4.1所示。与数据库相同,数据库文件也有状态,并且该文件始终处于一个特定的、独立于数据库的状态。与数据库相比,文件没有RECOVERING和EMERGENCY状态,而新增了一个DEFUNCT状态,用来表示当文件不处于在线时被删除。查看数据库的一些状态值, 可以通过“数据库属性”对话窗口(见图4.9)。另外可以选择sysDatabases目录视图中的state_desc列或使用DATABASEPROPERTYEX()函数中的Status属性。DATABASEPROPERTYEX函数一次只能返回一个选项的设置。例如,要查看“家电进销管理”数据库的状态,使用Status属性的语句如下。USE 家电进销管理GOSELECT DATABASEPROPERTYEX(家电进销管理,Status) AS 当前数据库状态关于DATABASEPROPERTYEX函数的其他功能查阅相关资料。表4.1 数据库的各种状态描述状态功能描述ONLINE在线状态或联机状态,可以执行对数据库的访间OFFLINE离线状态或脱机状态,数据库不能正常使用。可以人工设置。用户可以执行处于这种状态的数据库文件的移动等处理RESTORING还原状态,正在还原主文件组的一个或多个文件,这时数据库不能使用RECOVERING恢复状态,正在恢复数据库。这是一个临时性状态,如果恢复成功,则数据库自动处于在线状态,如果恢复失败,则数据库处于不能正常使用的可疑状态RECOVERYPENDING恢复未完成状态,恢复过程中缺少资源造成的问题状态,数据库不可使用,必须抚行其他操作来解决这种问题SUSPECT可疑状态,主文件可疑或可能被破坏,数据库不能使用,须执行其他操作来解决该问题EMERGENCY紧急状态,可以人工设置数据库为该状态,这时数据库处于单用户模式和只读状态,只能由sysadmin固定服务器角色成员访问,主要用于对数据库的故障排除4.3.4 数据库的分离和附加如果需要将数据库转移到其他服务器实例,可以采取的方法之一就是使用数据库的分离和附加功能。1. 分离数据库分离数据库是指将数据库从SQL Server实例上删除,但是该数据库的数据文件和事务日志文件仍然保持不变,这时可以将该数据库附加到其他任何SQL Server 2008实例上。如果要分离的数据库出现下列任何情况之一,都将不能分离:l 已复制并发布数据库。如果进行复制,则数据库必须是未发布的。如果要分离数据库,必须先通过执行sp_replicationdboption存储过程禁用发布后再分离。l 数据库中存在数据库快照。此时,必须首先删除所有数据库快照,然后再分离。l 数据库处于未知状态。在SQL Server中无法分离可疑和未知状态的数据库,必须将数据库设置为紧急模式,才能对其进行分离操作。交互方式分离数据库,按照如下步骤进行。 连接SSMS,在【对象资源管理器】窗格服务器下的【数据库】节点选择要分离的数据库单击右键,在弹出菜单中选择【任务】|【分离】单击。弹出“分离数据库”对话窗口。如图4.12所示。 在对话窗口中查看要分离的数据库。默认情况下,分离操作将在分离数据库时保留过期的优化统计信息,若要更新现有的优化信息,启用“更新统计信息”复选框。 在“状态”列中如果是“未就绪”,则“消息”列将显示有关数据库的连接信息。当数据库涉及复制时,“消息”列将显示“Database replicated”。当数据库有一个或多个活动连接时,“消息”列将显示“活动连接”。在可以分离数据库之前,必须启用“删除连接”复选框来断开所有活动连接。 分离数据库准备就绪后,单击【确定】按钮开始分离。图4.12 分离数据库对话窗口使用命令方式分离数据库,执行存储过程sp_detach_db。例如,要分离TestDB2数据库,可以使用如下命令。EXEC sp_detach_db TestDB2sp_detach_db是一个系统存储过程。存储过程的内容参见第8章。完成分离的数据库文件以普通的操作系统文件放置在原来的位置,用户可以对其进行拷贝和移动。2. 附加数据库附加数掘厍时,所有数据文件(mdf和ndf文件)都必须可用。如果任何数据文件的路径与创建数据库或上次附加数据库时的路径不同,则必须指定文件的当前路径。在附加数据库的过程中,如果没有日志文件可附加,系统将创建一个新日志文件。交互方式附加数据库基本步骤如下。 在SSMS的【对象资源管理器】窗格服务器下右键单击【数据库】节点,在弹出菜单中选择【任务】|【分离】单击选择要分离的数据库单击右键,弹出菜单中单击【附加】,弹出“附加数据库”对话窗口。 在对话窗口中单击【添加】按钮,弹出“定位数据库文件”对话窗口。在该对话窗口中寻找到要附加的主数据文件,单击【确定】按钮。 SQL Server将该主数据文件及相关文件列出。单击【确定】按钮完成附加操作。附加也是创建数据库的一种方式。Transact-SQL附加命令基本语法如下。语法 CREATE DATABASE database_nameON ,.n FOR ATTACH例如,附加TestDB2数据库,执行以下命令: CREATE DATABASE TestDB2 ON ( NAME=file1,FILENAME=E:DATAfile1.mdf) FOR ATTACH4.3.5 删除数据库如果数据库不再需要,可以删除数据库。交互操作删除数据库。在【对象资源管理器】窗格数据库节点下右键单击所选数据库,在弹出菜单中选择【删除】单击,可删除数据库。使用Transact-SQL的DROP DATABASE命令删除数据库。语法如下。语法 DROP DATABASE database_name例如,如果要删除TestDB2数据库,执行命令:DROP DATABASE TestDB2。要注意,不能删除当前数据库或者当前有用户连接访问的数据库。4.4 数据库快照概述数据库快照提供了源数据库在创建快照时刻的只读、静态视图,这与照相师保留事物瞬间的静止图像相似。数据库快照可以有效地支持报表数据汇总和数据分析等只读操作。数据库快照在数据页上进行。当创建某个源数据库的数据库快照时,数据库快照使用一种稀疏文件维护源数据页。如果源数据库中数据页上的数据没有更改,那么对数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论