《《数据库管理》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据库管理》PPT课件.ppt(71页珍藏版)》请在三一办公上搜索。
1、第四章 数据库管理,4.1 数据库的存储结构4.2 创建、修改和删除数据库,数据库的存储结构,数据库的存储结构分为逻辑存储结构和物理存储结构两种。数据库的逻辑存储结构指的是数据库是由哪些性质的信息所组成。实际上,SQL Server的数据库是由诸如表、视图、索引等各种不同的数据库对象所组成。数据库的物理存储结构是讨论数据库文件是如何在磁盘上存储的,数据库在磁盘上是以文件为单位存储的,由数据库文件和事务日志文件组成,一个数据库至少应该包含一个数据库文件和一个事务日志文件。,数据库文件,当建立一个SQL Server数据库时,数据库的实际存储被映射成几个操作系统文件。三种类型的SQL Server
2、数据库文件:主数据库文件(.mdf)辅数据库文件(.ndf)日志文件(.ldf)每个文件有两个互相联系的名字 逻辑名物理名,数据库文件(续),逻辑存储结构和物理存储结构一、数据库的逻辑存储结构指的是数据库是由哪些性质的信息所组成,SQL Server的数据库不仅仅只是数据的存储,所有与数据处理操作相关的信息都存储在数据库中。二、数据库的物理存储结构则是讨论数据库文件是如何在磁盘上存储的,数据库在磁盘上是以文件为单位存储的,由数据库文件和事务日志文件组成,一个数据库至少应该包含一个数据库文件和一个事务日志文件。,数据库的存储结构-物理存储结构,数据库文件 1主数据库文件(Primary Data
3、base File)一个数据库可以有一个或多个数据库文件,一个数据库文件只能属于一个数据库。当有多个数据库文件时,有一个文件被定义为主数据库文件(简称为主文件),其扩展名为mdf。,3.1 数据库的存储结构,主数据库文件用来存储数据库的启动信息以及部分或者全部数据,是所有数据库文件的起点,包含指向其它数据库文件的指针。一个数据库只能有一个主数据库文件。,数据库的存储结构,2辅助数据库文件(Secondary Database File)用于存储主数据库文件中未存储的剩余数据和数据库对象,一个数据库可以没有辅助数据库文件,但也可以同时拥有多个辅助数据库文件。辅助数据库文件的扩展名为ndf(简称为
4、辅助文件)。,数据库的存储结构,3事务日志文件 存储数据库的更新情况等事务日志信息,当数据库损坏时,管理员使用事务日志恢复数据库。每一个数据库至少必须拥有一个事务日志文件,而且允许拥有多个日志文件。事务日志文件的扩展名为ldf,日志文件的大小至少是512KB。SQL Server事务日志采用提前写入的方式。,SQL Server使用数据库的事务日志来防止没有完成的事务破坏数据。,数据库的存储结构,注意:SQL Server 2000中的数据和事务日志文件不能存放在压缩文件系统或象共享网络目录等远程的网络驱动器上。SQL Server 2000的文件拥有两个名称,即逻辑文件名和物理文件名。当使用
5、Transact-SQL命令语句访问某一个文件时,必须使用该文件的逻辑名。物理文件名是文件实际存储在磁盘上的文件名,而且可包含完整的磁盘目录路径。,数据库文件组,文件组的主要目的是为了方便管理和空间分配。在建立文件组时,有三条规则:数据库文件不能与一个以上的文件组关联。日志文件不能加到文件组里。只有文件组中任何一个文件都没有空间了,文件组的文件才会自动增长。三种不同类型的文件组主类型(PRIMARY)用户定义型缺省型,数据库的存储结构,数据库文件组 利用文件组可以使服务器的性能得到提高。主文件组中包含了所有的系统表,当建立数据库时,主文件组包括主数据库文件和未指定组的其他文件。用户定义文件组中
6、可以指定一个缺省文件组,那么在创建数据库对象时如果没有指定将其放在哪一个文件组中,就会将它放在缺省文件组中。如果没有指定缺省文件组,则主文件组为缺省文件组。,数据库的存储结构,一个文件只能存在于一个文件组中,一个文件组也只能被一个数据库使用;日志文件是独立的,它不能作为任何文件组的成员。,4.1.1 页面逻辑存储结构,1、什么是页面?SQL Server中的所有信息都存储在页面(page)上,页面是数据库中使用的最小数据单元。每一个页面存储8KB(8192字节)的信息。所有的页面都包括一个132字节的页面头,用来唯一地标识存储在页面中的数据,留下8060 字节存储数据。每页可以包含至少一行,但
7、一行不能超出一页的长度。每页只能存储一个表中的数据。,页面(续),2、SQL Server使用页面的类型 分配页面:用于控制数据库中给表和索引分配的页面。数据和日志页面:用于存储数据库数据和事务日志数据。数据存储在每个页面的数据行中。每一行大小的最大值为8060个字节。SQL Server不允许记录跨页面存储。索引页面:用于存储数据库的索引数据。分发页面:用于存储数据库中有关索引的信息。文本/图像页面:用于存储大量的文本或二进制大对象(BLOB)。,4.1.2 盘区,1、什么是盘区?盘区是SQL Server每次申请空间时能分配的最小单位。一个盘区(extent)是由8个连续的页面(88KB=
8、64KB)组成的数据结构。当创建一个数据库对象(如一个表)时,SQL Server会自动地以盘区为单位给它分配空间。每一个盘区只能包含一个数据库对象。盘区是表和索引分配空间的单位。假设我们在一个新建的数据库中,创建了一个表和两个索引,并且表中只插入了一条记录,那么,总共占用364KB=192KB空间。,盘区(续),2、SQL Server使用的盘区的种类混合型一个混合型区域有64KB,其中的页可以组成8个不同的对象。统一型一个统一型区域有64KB,其中所有的页必须属于同一个对象。当你第一次建立一个数据库对象时,SQL Server在一个混合型区域中为它分配空间。如果这个对象增长到包含8个页或更
9、多时,SQL Server便会将现有数据移到一个统一型区域中。,4.2 创建、修改和删除数据库,4.2.1 创建数据库 4.2.2 设置数据库选项4.2.3 修改数据库 4.2.4 删除数据库,4.2.1 创建数据库,每个数据库都由以下几个部分的数据库对象所组成:关系图、表、视图、存储过程、用户、角色、规则、默认、用户自定义数据类型和用户自定义函数。,估算数据库的空间需求,数据库管理员的主要任务之一是创建数据库,并且需要为每个文件指定容量。准确地估算应有的容量以免浪费不必占用的资源或者用尽数据库的空间是数据库管理员的责任。,考虑因素,每行记录的大小。每行记录都由一列或者多列数据组成。这些列决定
10、了每一行的大小,必须从数据库开发人员那里或者通过自行检查数据库中的每个表得到每一行的大小。记录的数量。表中的记录数有可能基本不变,也有可能变化相当大。数据库开发人员可以告诉你数据库中的每个表预计存储多少条数据。表的数量。一些数据库只有少量的表,另一些却有可能有成百上千的表。你可以使用企业管理器自行查看表的数量。索引的数量。每个表都有一个或者多个索引,这些索引可能是聚簇式索引或者是非簇式索引。每个非簇式索引将在数据库中占用额外的空间。每个索引的大小。索引的大小取决于使用该索引的列的大小、索引中包含的记录数量和索引的填充因子。填充因子越大,索引对象占用的空间就越多。数据库对象的数量和大小。数据库包
11、含很多对象,例如触发器、视图、存储过程等等。,考虑因素,事务日志的大小。事务日志大小的差别很大。这取决于很多因素,其中包括数据库中的数据的修改频率。大多数事务日志以数据库容量的1 0%到2 5%为起点,在数据库被用于实际工作环境后再通过监控来调整。经验显示,经常被修改的数据库和很少被修改的数据库相比需要更大的事务日志。越是经常备份,事务日志就越是可以小一些,这是因为在每次备份过程中都会截断事务日志。数据库的计划成长量。有一些数据库的容量从不增长,也有一些每周都大幅度地增长。为了确定总体的计划成长量,你必须估算数据库中每个表的成长量。,估算公式,其中,行的长度,就是指一行的字节数。,创建新数据库
12、的注意事项,缺省情况下只有系统管理员可以创建新数据库给数据库指定名字必须遵循SQL Server命名规范 所有的新数据库都是model数据库的拷贝 单个数据库可以存储在单个文件上,也可以跨越多个文件存储 数据库的大小可以被扩展或者收缩 当新的数据库创建时,SQL Server自动地更新“master”数据库的“sysdatabases”系统表,在SQL Server中创建数据库时,在创建新数据库之前,首先创建两个文件:一个用于数据库,另外一个用于事务日志。考虑在数据库使用的文件的逻辑名上加入“data”这个词,在事务日志使用的文件的逻辑名上加入“log”这个词(例如“marketing_dat
13、a”和“marketing_log”)。,创建新数据库的注意事项,1)缺省情况下,只有系统管理员可以创建新数据库。2)给数据库指定的名字必须遵循SQL Server命名规范:字符的长度可以从1到3 0。名称的第一个字符必须是一个字母或者是下列字符中的某一个:下划线(_),a t符号(),或者是英镑符号(#)。在首字母后的字符可以是字母、数字或者前面规则中提到的符号。名称当中不能有任何空格,除非将名字用引号引起来。,创建新数据库的注意事项,3)所有的新数据库都是model数据库的拷贝。这意味着新数据库不可能比model数据库当前的容量更小。4)单个数据库可以存储在单个文件上,也可以跨越多个文件存
14、储。5)数据库的大小可以被扩展或者收缩。6)当新的数据库创建时,SQL Server自动地更新“master”数据库的“sysdatabases”系统表。,创建数据库的方法,使用向导创建数据库使用企业管理器(Enterprise Manager)创建数据库使用Transact-SQL语言创建数据库。,使用企业管理器创建数据库,该使用企业管理器来创建和管理数据库。这个图形化用户界面比Transact-SQL语句或者系统存储过程更容易使用。,步骤-创建名为M Y D B的数据库,1)在企业管理器的主界面中选择一个SQL Server,单击这个服务器旁边的加号打开这个文件夹,出现各个SQL Serv
15、er文件夹。2)单击Databases旁的加号,打开这个文件夹,出现这个SQL Server上当前所有数据库的列表(见图5-3),3)右击D a t a b a s e s文件夹,从菜单中选择New Database,出现Database Properties对话框(见图5-4)。4)在Name一栏中输入新建数据库的名字,如:MYDB。确保遵循了SQL Server的命名规范标准。,5)在File name一栏中可以输入数据文件的逻辑名。缺省情况下,系统自动产生“数据库名_ Data”的数据文件,你可以修改这个名字。而且,你可以输入多个文件。6)在Location中可以指定数据文件所在的位置。
16、缺省情况下,是安装SQL Server的目录的Data子目录下。你可以修改它。7)在Initial size一栏中以兆为单位输入数据文件的初始容量。值得注意的是,数据文件必须以1 M的整倍数来创建,所以在这里你必须输入一个整数。,8)在该页的下面,你可以选择Automatically grow file,指明:如果数据库的数据容量超过了数据文件的大小,数据文件可以自动增加。你可以指定按照百分比增加(选择By percent后输入百分数),或者指定按照大小增加(选择In megabytes后输入大小)。你还可以指定:增加是否有上限。如果想指定上限,可以选择Restrict filegrowth并
17、输入上限的大小;如果不想指定上限,可以选择Unrestricted filegrowth。9)在Transaction Log页中,输入日志文件的名称和大小。10)单击“确定”按钮立即创建数据库。如果你选择“确定”,这个数据库就会立即创建。SQL Server不会返回任何有关创建的状态的信息。你可以通过在企业管理器的主界面中查看Databases文件夹下是否包含新建的数据库来验证创建工作成功与否。,(一)使用向导创建数据库,以下图4-1 到图4-8是使用向导创建数据库,用户根据提示操作,即可创建数据库。,图4-1 选择向导对话框,图4-2 欢迎使用创建数据库向导对话框,图4-3 输入数据库名称
18、和文件位置对话框,图4-4 定义数据库文件逻辑名称及初始大小对话话框,图4-5 定义数据库增长信息对话框,图4-6 定义事务日志文件名称及初始大小对话框,图4-7 定义事务日志文件增长信息对话框,图4-8 确认创建数据库对话框,(3)使用Transact-SQL语言创建数据库,语法如下:,CREATE DATABASE database_nameON PRIMARY,n,n LOG ON,n FOR RESTORE:=(NAME=logical_file_name,FILENAME=os_file_name,SIZE=size,MAXSIZE=max_size|UNLIMITED,FILEGR
19、OWTH=growth_increment),n:=FILEGROUP filegroup_name,n,database_name:数据库的名称,最长为128个字符。PRIMARY:该选项是一个关键字,指定主文件组中的文件。LOG ON:指明事务日志文件的明确定义。NAME:指定数据库的逻辑名称,这是在SQL Server系统中使用的名称,是数据库在SQL Server中的标识符。,各参数说明如下:,FILENAME:指定数据库所在文件的操作系统文件名称和路径,该操作系统文件名和NAME的逻辑名称一一对应。SIZE:指定数据库的初始容量大小。MAXSIZE:指定操作系统文件可以增长到的最大尺
20、寸。FILEGROWTH:指定文件每次增加容量的大小,当指定数据为0时,表示文件不增长。,例子4-1:创建了一个Company数据库,创建了一个Company数据库,该数据库的主数据文件逻辑名称为Company_data,物理文件名为Company.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为Company_log,物理文件名为Company.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。程序清单:,create database companyon primary(name=company_data,filename=d:mssq
21、l7datacompany.mdf,size=10,maxsize=unlimited,filegrowth=10%)log on(name=company_log,filename=d:mssql7datacompany.ldf,size=1,maxsize=5,filegrowth=1)输出为:The CREATE DATABASE process is allocating 10.00 MB on disk company_data.The CREATE DATABASE process is allocating 1.00 MB on disk company_log.,例子4-2:创
22、建一个指定多个数据文件和日志文件的数据库,该数据库名称为employees,有1个10MB和1个20MB的数据文件和2个10MB的事务日志文件。数据文件逻辑名称为employee1和employee2,物理文件名为employee1.mdf和employee2.mdf。主文件是employee1,由primary指定,两个数据文件的最大尺寸分别为无限大和100MB,增长速度分别为10%和1MB。事务日志文件的逻辑名为employeelog1和employeelog2,物理文件名为employeelog1.ldf和employeelog2.ldf,最大尺寸均为50MB,文件增长速度为1MB。其源
23、程序为:,create database employeeson primary(name=employee1,filename=d:mssql7data employee1.mdf,size=10,maxsize=unlimited,filegrowth=10%),(name=employee2,filename=d:mssql7data employee2.mdf,size=20,maxsize=100,filegrowth=1)log on(name=employeelog1,filename=d:mssql7data employeelog1.ldf,size=10,maxsize=5
24、0,filegrowth=1),(name=employeelog2,filename=d:mssql7data employeelog2.ldf,size=10,maxsize=50,filegrowth=1)输出结果为:The CREATE DATABASE process is allocating 10.00 MB on disk employee1.The CREATE DATABASE process is allocating 20.00 MB on disk employee2.The CREATE DATABASE process is allocating 10.00 MB
25、 on disk employeelog1.The CREATE DATABASE process is allocating 10.00 MB on disk employeelog2.,4.2.2 设置数据库选项,数据库选项:用来控制一个数据库的默认行为,这些设置将从模型数据库中继承过来,选项影响着这个数据库的工作方式。使用SQL Enterprise Manager设置数据库选项 通过“sp_dboption”系统存储过程来修改数据库选项每个数据库的选项都是与其他数据库分离设置的。,部分数据库选项,每一个选项在缺省的情况下都是被关闭的。ANSI Null Default:这个选项决定了表
26、中的列在缺省的情况下被设置为“NULL”(允许为空)还是“NOT NULL”(不允许为空)。打开这个选项会使Microsoft SQL Server的数据库与ANSI标准兼容。DBO Use Only:如果打开这个选项,将只允许数据库属主(DBO)访问这个数据库。如果在用户访问这个数据库的期间打开了这个选项,这个用户仍旧可以继续访问这个数据库,但是新的用户不能登录访问这个数据库。Read Only:如果这个选项被打开,这个数据库就处于只读状态。这样用户就不能修改数据库中的任何记录。Select Into/Bulk Copy:在数据库中执行不记日志的操作之前必须设置这个选项。一个不记日志的操作会
27、忽略事务日志而直接修改数据库中的内容。,部分数据库选项,Single User:这个选项被设置时,每一时刻只有一个用户可以访问这个数据库。但是这个用户并不限于sa或者dbo,因此任何首先访问该数据库的用户就是这个唯一允许访问数据库的用户。打开这个选项将取消数据库中的所有锁,这是因为数据库中只有一个用户,所以没有必要加任何锁。Truncate Log on Checkpoint:这个选项打开以后,在每一次检查点发生时都会将非活动事务从事务日志中清除。事务日志通常只有在手工截断日志或者备份事务日志时才会被截断。,存储过程sp_dboption的语法,sp_dboption,例子USE master
28、EXEC sp_dboption library,trunc.log on chkpt.,trueGO3)执行这个语句。在“Resul s”窗口中将显示以下消息:Checkpointing database that was changed.DBCC execution completed.If DBCC printed error messages,contact your system administrator.这个数据库的属性已经被修改了。,4.2.3 修改数据库,数据库的容量可以增大或者减小。1.利用企业管理器修改数据库 2.使用ALTER DATABASE语句修改数据库,1.利用企
29、业管理器修改数据库,设置中的各选项说明如下:ANSI NULL默认设置:允许在数据库表的列中输入空(NULL)值。递归触发器nested triggers:允许触发器递归调用。SQL Server设定的触发器递归调用的层数最多为32层。自动更新统计信息auto update statistic:允许使用SELECT INTO或BCP、WRITETEXT、UPDATETEXT命令向表中大量插入数据。残缺页检测torn page detection:允许自动检测有损坏的页。自动关闭autoclose:当数据库中无用户时,自动关闭该数据库,并将所占用的资源交还给操作系统。,自动收缩autoshrin
30、k:允许定期对数据库进行检查,当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25%。自动创建统计信息auto create statistics:在优化查询(Query Optimizer)时,根据需要自动创建统计信息。使用被引用的标识符quoted identifier:标识符必须用双引号括起来,且可以不遵循Transact-SQL命名标准。,1.使用企业管理器修改,1)在S Q L企业管理器的服务器管理器窗口中选择一个SQL Server,单击这个服务器旁边的加号打开这个文件夹,出现多个SQL Server文件夹。2)单击“D a t a b a
31、 s e s”旁的加号,打开这个文件夹,出现这个SQL Server上当前所有数据库的列表。3)右击你打算修改大小的数据库,选择Properties,出现Database Properties对话框(见图5-6)。,4)确保目前正在General选项卡中。5)在Space Allocated(MB)下,选择你打算将数据文件将要扩展的容量。6)如果需要,你还可以在“Transaction Log”选项卡中输入事务日志将要扩展的容量。7)在输入了所有这些信息后,单击“确定”按钮,这个数据库(和/或事务日志)将会以指定的容量扩展。如果要收缩数据库,就不能在Edit Database对话框中直接修改数
32、据文件大小。不能改小数据文件的大小。必须使用Transact-SQL语句或者选择数据库属性中Auto Shrink。如果选择Auto Shrink并单击“OK”,该数据库会自动收缩到合适大小。,2.使用Transact-SQL语句修改,ALTER DATABASE databaseADD FILE,.n TO FILEGROUP filegroup_name|ADD LOG FILE,.n|REMOVE FILE logical_file_name|ADD FILEGROUP filegroup_name|REMOVE FILEGROUP filegroup_name|MODIFY FILE|
33、MODIFY FILEGROUP filegroup_name filegroup_property:=(NAME=logical_file_name,FILENAME=os_file_name,SIZE=size,MAXSIZE=max_size|UNLIMITED,FILEGROWTH=growth_increment),database_name:被扩展的数据库的名字。ADD FILE:指定添加到数据库中的数据文件。TO FILEGROUP filegroup_name:指定文件添加到文件组名为file group_name的文件组。ADD LOG FILE:指定添加到数据库中的日志文件
34、。REMOVE FILE:从数据库系统表中删除该文件,并物理删除该文件。ADD FILEGROUP:指定添加到数据库的文件组。filegroup_name:文件组名。REMOVE FILEGROUP:从数据库中删除该文件组,并删除在这个文件组中的文件。MODIFY FILE:指定要修改的文件。包含该文件的名称、大小、增长量和最大容量。一次只可以修改其中的一个选项。,MODIFY FILEGROUP 指定修改文件组的一些选项。Filegroup_property:READONLY指定该文件组“只读”。READWRITE指定该文件组“可读写”。DEFAULT指定该文件组为数据库缺省文件组。在创建数
35、据库时,primary文件组是缺省文件组。如果在创建表或索引时,未指定文件组,那么,系统自动将这些表或索引创建在缺省文件组上。NAME:用来描述在FILESPEC中定义的文件的逻辑名称。当FOR ATTACH时,名字参数是不必要的。logical_file_name:文件的逻辑名。在数据库中每个逻辑文件名必须唯一且遵守命名规则。FILENAME=os_file_name:用来指明在FILESPEC中被定义的操作系统文件名。,SIZE:指定文件的初始大小。可以使用K B和M B单位。如果没有指定,缺省为1 MB。MAXSIZE:指定文件的最大容量。可以使用K B和M B单位。如果没有指定,会将整
36、个磁盘占满。UNLIMITED:指定不限制文件的增长,直到占满整个磁盘。FILEGROWTH:指定文件的增长百分数。growth_increment:增长百分数。0代表不变。这个值可以是M B、K B或%。如果没有指定,缺省是1 0%。,1)启动Query Analyzer查询工具(或者一个类似的工具)。2)从“DB”下拉式菜单中选择“master”数据库。3)输入相应的Transact-SQL语句。ALTER DATABASE library MODIFY FILE(NAME=library_log,MAXSIZE=25MB)ALTER DATABASE library MODIFY FIL
37、E(NAME=library_log,SIZE=20MB)4)执行这个语句。在“Results”窗口中将显示以下消息:The command(s)completed successfully.,例子4-3,例子4-3:添加一个包含两个数据文件的文件组和一个事务日志文件到employees数据库中。程序清单:,Alter database employeesAdd filegroup data1Alter database employeesAdd file(name=employee3,filename=d:mssql7dataemployee3.ndf,size=1,maxsize=50,f
38、ilegrowth=1),(name=employee4,filename=d:mssql7dataemployee4.ndf,size=2,maxsize=50,filegrowth=10%)to filegroup data1Alter database employeesadd log file(name=employeelog3,filename=d:mssql7dataemployeelog3.ldf,size=1,maxsize=50,filegrowth=1)输出结果为:Extending database by 1.00 MB on disk employee3.Extendi
39、ng database by 2.00 MB on disk employee4.Extending database by 1.00 MB on disk employeelog3.,收缩数据库,“DBCC SHRINKDB”Transact-SQL语句的语法:DBCC SHRINKDATABASE(database_name,target_percent,NOTRUNCATE|TRUNCATEONLY 上述语法中包含以下占位符:database_name:被收缩的数据库的名字。target_percent:被收缩后数据文件的空闲空间的百分数。NOTRUNCATE:保留数据文件中的空闲空间。
40、TRUNCATEONLY:将数据文件中的空闲空间返回给操作系统。,例子:收缩northwind数据库为原来的2 0%,按照以下步骤使用Transact-SQL语句来修改1)启动SQL查询工具,确保选中了Query选项卡。2)从DB下拉式菜单中选择master数据库。3)输入Transact-SQL语句。DBCC SHRINKDB(northwind,20)4)执行该语句。,2.更改数据库名称,通过“sp_renamedb”系统存储过程来更改数据库名称 语法如下:sp_renamedbold_name,new_name,4.2.4 删除数据库,1.利用企业管理器删除数据库2.利用Drop语句删除数据库 Drop语句可以从SQL Server中一次删除一个或多个数据库。其语法如下:Drop database database_name,n,例子4-4:删除创建的数据库company。,程序清单:drop database company输出结果为:Deleting database file d:mssql7datacompany.ldf.Deleting database file d:mssql7datacompany.mdf.,