1、第二讲 数据库设备与存储空间管理一、概述1安装初始化初始安装 SQL Server时,安装程序和脚本初始化主设备,并建立master、model、tempdb 和 sybsystemprocs数据库。系统数据库、预定义设备和段按下列默认方式组织:a.master、model、tempdb 数据库安装在主设备 master上;b.sybsystemprocs数据库安装在安装时选择的设备上(sysprocsdev);c.为每个数据库创建三个预定义段:system、default 和 logsegment;d.所有用户创建数据库的默认设备是 master设备;e.如果选择安装了审计数据库 sybse
2、curity,它位于自己的设备上。2设备与存储管理考虑的主要问题(1)恢复物理磁盘崩溃时,磁盘镜像或在单独的物理设备上保存日志为数据库恢复提供了两种机制。(2)性能磁盘读写速度是 I/O操作的瓶颈,正确地把数据库对象放置到物理设备上有利于改进性能;把日志和数据库对象置于单独的设备上可以提高系统性能;把表放在一个硬盘上而把索引放在另一个硬盘上,由于把工作分置于两个硬盘驱动器上,所以可以确保物理读写速度加快;磁盘镜像会降低磁盘写的速度。二、设备(Device)Sybase将数据库中的所有数据存放在设备上。1设备的概念设备是 Sybase预先配置的专门存放数据库的一块连续的磁盘空间,并且它被映射到一
3、操作系统文件或一原始磁盘分区上。它有两个对应的名称:逻辑名和物理名。NT 仅支持设备映射到文件。设备与数据库之间的关系:多对多关系。一个数据库可以被创建或扩充到多个设备上,一个设备也可以被用来存放多个数据库。不同的设备操作系统可以对其并行地读写,因此我们可以人为地将一个数据库放置到多个数据库设备上。设备的分类:Database Device 和 Dump Device。数据库设备存放数据库和事务日志,转储设备用来存放数据库或日志的备份。2设备的创建命令语法:DISK INITName=device_name,Physname=physical_name,Vdevno=virtual_devic
4、e_numberSize=number_of_pages.举例说明:DISK INITName=My_Device,Physname=D:databaseMy_device.dat,Vdevno=3Size=5000注释:逻辑名、物理名、设备虚拟号、设备大小创建转储设备:sp_addumpdevicedisk|tapeLogical_Name,Physical_Name,TapeSize3默认设备在没有指定设备的情况下,用户创建的任何数据对象自动存放在默认设备上。初始安装后,系统的主设备 master被预指定为默认设备,因此要尽快创建自己的默认设备。确保以下设备不是默认设备:系统主设备、指定仅
5、被日志使用的设备。Sp_diskdefault 设备名,DefaultOn|DefaultOff4磁盘镜像磁盘镜像是出于数据库安全性的考虑,当介质失败时,磁盘镜像能提供不间断恢复。磁盘镜像是磁盘上的数据的绝对拷贝。如果某一硬盘事故发生,则该被损坏的拷贝就自动变成离线状态,因而所有的读写都被引向未被损坏的拷贝。Sybase的磁盘镜像是在设备级上进行的,因此磁盘镜像实质上是设备镜像。当对某一设备进行镜像操作时,Sybase 自动创建一个附加设备,由镜像处理程序将原设备上的所有数据拷贝到镜像设备上。如果要使某一数据库成为镜像,被分配给该数据库的每一设备都必须成镜像。Master设备在服务器中地位特殊
6、,如果它损坏了,SQL Server 将崩溃。因此,如果有可能总是要镜像 Master设备(在另一磁盘上)。镜像命令语法:Disk MirrorName=device_name,/被镜像的设备Mirror=physical_name,writes=serial|noserial5删除设备sp_dropdevice logical_name,delfile含有数据库的设备不允许删除。三、创建与使用段段(Segment)是数据库设备上磁盘空间的逻辑组合,它可以看作是指向一个或多个数据库设备的标签。利用段可以控制数据库对象的存放位置,可以将数据库对象分类存放到不同的段上。设备与段之间的关系:多对多关
7、系。一个设备上可以创建多个段,一个段也可以覆盖多个设备。1使用段的优点a. 控制空间的使用:放在一个段上的数据库对象不会在段外增长;b. 提高性能:处于不同磁盘设备上的段可以并行地读写;d.处理大表:利用段,可以将一个大表分段放在独立的物理设备上,如将一个表的文本或图象数据存储另外的一个段上。2创建段sp_addsegment 段名,数据库名,设备名说明:在指定设备上为某个数据库创建一个段。扩展段的范围sp_exetendsegment 段名,数据库名,设备名说明:设备在数据库中必须可用,否则需要扩展数据库到新的设备上;指定的段、数据库、设备必须存在。缩小段的范围:sp_dropsegment
8、 段名,数据库名,设备名说明:带第三个参数时,该命令并不删除段,只是段的范围缩小了。若某个段包含了别的段要独占的设备,就需要缩小该段的范围。3使用段两个数据库放在同一设备的不同段上,它们不会相互影响;当数据库增加空间时,增加的空间会自动分配到它的每一个段上;例如:alter database my_dbon data_dev=50在 data_dev设备上为 my_db增加 50M空间,这 50M空间被自动分配到数据库的每一个段中。注意:如果 data_dev对于数据库是新的,system 和 default段会自动扩展到该设备上。可以使用 alter database命令的 log on选项
9、分配附加的日志空间。(1)在段中创建新对象create table 表名(列名 数据类型)on 段名create clusterd|non clusterdindex 索引名 on 表名(列名)on 段名注意:按照定义,聚集索引总是与表放在同一段上。(2)在段上放置现有对象sp_placeobject 段名,对象名注意:该命令并不把对象从一个数据库设备移动到另一设备上,它只影响未来的空间分配。可以将某个大表的 text字段或 image字段放置到一个单独的设备段上。Sp_placeobject 段名,“表名字段名”(3)在段上创建聚集索引按照定义,聚集索引总是与表放在同一段上。如果在一个段上创
10、建表,而在另一个段上创建聚集索引,则其表与其索引一起移动,整个表将离开创建表的段而迁移到创建聚集索引的段中。通过这种方法,可以快速而方便地把指定表移动到指定的设备上。(4)系统预定义段当用户创建一个数据库时,Sybase 自动创建三个预定义的段:system段:存放系统表(包括所有用户对象的定义)default段:存放用户创建的各种对象,除非它们明显地指定到不同的段上。Logsegment段:存放数据库的事务日志。(5)删除段删除段是缩小段范围的一个特例:sp_dropsegment 段名,数据库名4使用阈值管理阈值(Threshold)管理是一种自动监控数据库自由空间的机制,Sybase 的
11、阈值管理允许用户为数据库的某个段上的自由空间设置阈值并定义相应的存储过程。当该段上的自由空间低于所置头阈值时,Sybase 自动运行相应的存储过程。在一个实际运行的数据库中,日志的增长速度一般要高于数据的增长,一旦日志段的自由空间用尽,SQL Server 在默认情况下会挂起所有数据操纵事务,客户端应用程序停止执行。在每个分离的段上存储其事务日志的数据库均自动设置有最后机会阈值(Last Chance Threshold),其阈值是备份事务日志所需的自由空间的估计值。当该段上的自由空间低于所置阈值时,Sybase 自动运行名为sp_thresholdaction的存储过程。该过程的名称及参数由系统预定义,内容由用户编写。下面是一个简单示例。CREATE PROCEDURE dbo.sp_thresholdaction/*本过程参数通过位置传递,名称可以改变,但其定义及顺序不能变*/db_name varchar(30),/*数据库名*/seg_name varchar(30),/*段名*/space_lefe int,/*剩余自由空间*/status int/*最后机会阈值,其值为 1,其它阈值,其值为 0*/ASBEGIN/*用户编写过程内容*/dump transaction db_namewith truncate_onlyEND