📄 200604040934365.html
字号:
<P>三、创建与使用段</P>
<P>段(Segment)是数据库设备上磁盘空间的逻辑组合,它可以看作是指向一个或多个数据库设备的标签。利用段可以控制数据库对象的存放位置,可以将数据库对象分类存放到不同的段上。</P>
<P>设备与段之间的关系:多对多关系。一个设备上可以创建多个段,一个段也可以覆盖多个设备。</P>
<P>1.使用段的优点</P>
<P>a. 控制空间的使用:放在一个段上的数据库对象不会在段外增长;</P>
<P>b. 提高性能:处于不同磁盘设备上的段可以并行地读写;</P>
<P>d.处理大表:利用段,可以将一个大表分段放在独立的物理设备上,如将一个表的文本或图象数据存储另外的一个段上。</P>
<P>2.创建段</P>
<P>sp_addsegment 段名,数据库名,设备名</P>
<P>说明:在指定设备上为某个数据库创建一个段。</P>
<P>●扩展段的范围</P>
<P>sp_exetendsegment 段名,数据库名,设备名</P>
<P>说明:设备在数据库中必须可用,否则需要扩展数据库到新的设备上;指定的段、数据库、设备必须存在。</P>
<P>●缩小段的范围:</P>
<P>sp_dropsegment 段名,数据库名,设备名</P>
<P>说明:带第三个参数时,该命令并不删除段,只是段的范围缩小了。若某个段包含了别的段要独占的设备,就需要缩小该段的范围。</P>
<P>3.使用段</P>
<P>●两个数据库放在同一设备的不同段上,它们不会相互影响;</P>
<P>●当数据库增加空间时,增加的空间会自动分配到它的每一个段上;</P>
<P>例如:alter database my_db</P>
<P>on data_dev=50</P>
<P>在data_dev设备上为my_db增加50M空间,这50M空间被自动分配到数据库的每一个段中。注意:如果data_dev对于数据库是新的,system和default段会自动扩展到该设备上。</P>
<P>可以使用alter database命令的log on选项分配附加的日志空间。</P>
<P>(1)在段中创建新对象</P>
<P>create table 表名(列名 数据类型)[on 段名]</P>
<P>create [clusterd|non clusterd]index 索引名 on 表名(列名)[on 段名]</P>
<P>注意:按照定义,聚集索引总是与表放在同一段上。</P>
<P>(2)在段上放置现有对象</P>
<P>sp_placeobject 段名,对象名</P>
<P>注意:该命令并不把对象从一个数据库设备移动到另一设备上,它只影响未来的空间分配。</P>
<P>可以将某个大表的text字段或image字段放置到一个单独的设备段上。</P>
<P>Sp_placeobject 段名,“表名.字段名”</P>
<P>(3)在段上创建聚集索引</P>
<P>按照定义,聚集索引总是与表放在同一段上。如果在一个段上创建表,而在另一个段上创建聚集索引,则其表与其索引一起移动,整个表将离开创建表的段而迁移到创建聚集索引的段中。通过这种方法,可以快速而方便地把指定表移动到指定的设备上。</P>
<P>(4)系统预定义段</P>
<P>当用户创建一个数据库时,Sybase自动创建三个预定义的段:</P>
<P>system段:存放系统表(包括所有用户对象的定义)</P>
<P>default段:存放用户创建的各种对象,除非它们明显地指定到不同的段上。</P>
<P>Logsegment段:存放数据库的事务日志。</P>
<P>(5)删除段</P>
<P>删除段是缩小段范围的一个特例:</P>
<P>sp_dropsegment 段名,数据库名</P>
<P>4.使用阈值管理</P>
<P>阈值(Threshold)管理是一种自动监控数据库自由空间的机制,Sybase的阈值管理允许用户为数据库的某个段上的自由空间设置阈值并定义相应的存储过程。当该段上的自由空间低于所置头阈值时,Sybase自动运行相应的存储过程。</P>
<P>在一个实际运行的数据库中,日志的增长速度一般要高于数据的增长,一旦日志段的自由空间用尽,SQL Server在默认情况下会挂起所有数据操纵事务,客户端应用程序停止执行。</P>
<P>在每个分离的段上存储其事务日志的数据库均自动设置有最后机会阈值(Last Chance Threshold),其阈值是备份事务日志所需的自由空间的估计值。当该段上的自由空间低于所置阈值时,Sybase自动运行名为sp_thresholdaction的存储过程。该过程的名称及参数由系统预定义,内容由用户编写。下面是一个简单示例。</P>
<P>CREATE PROCEDURE dbo.sp_thresholdaction</P>
<P>/*本过程参数通过位置传递,名称可以改变,但其定义及顺序不能变*/</P>
<P>@db_name varchar(30),/*数据库名*/</P>
<P>@seg_name varchar(30),/*段名*/</P>
<P>@space_lefe int,/*剩余自由空间*/</P>
<P>@status int/*最后机会阈值,其值为1,其它阈值,其值为0*/</P>
<P><a href="200604232104015.html" tppabs="http://www.itisedu.com/phrase/200604232104015.html" target="_new">AS</a></P>
<P>BEGIN</P>
<P>/*用户编写过程内容*/</P>
<P>dump transaction @db_name</P>
<P>with truncate_only</P>
<P>END</P>
<P> </P>
<P>第三讲 数据库与事务日志</P>
<P>一、创建用户数据库</P>
<P>Create Database 数据库名</P>
<P>On 设备_1=Size_1,//单位:M</P>
<P>设备_2=Size_2,</P>
<P>……</P>
<P>log on 日志设备=Log_Size</P>
<P>[With Override]//在同一设备上创建数据库和事务日志时使用该选项</P>
<P>[For Load] //禁止用户访问直到数据库的装入或恢复操作完成为止</P>
<P>举例:</P>
<P>Create Database test_db</P>
<P>On data_dev=100,//单位:M</P>
<P>Index_dev=50</P>
<P>Log on log_dev=30</P>
<P>说明:</P>
<P>(1)将日志放在单独的设备上,有利于数据库性能的提高;</P>
<P>(2)图示:</P>
<P>Data_dev Index_dev log_dev</P>
<P>(3)如果将数据库和日志放在同一设备上,就不能实现增量备份;</P>
<P>(4)通常将System和Default段缩减范围到一个设备上,如删除设备Index_dev上的System段和Default段,创建新的段,用来存放专门的数据库对象。</P>
<P>二、更改数据库</P>
<P>1.改变数据库属主</P>
<P>通常用户数据库有系统管理员创建,它的默认属主是dbo。系统过程sp_changeddbowner可改变数据库的属主关系,它必须由<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200604241134185.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200604241134185.html'" tppabs="http://www.itisedu.com/phrase/200604241134185.html" target="_new">数据库管理员</a>在要改变属主关系的数据库中执行。语法如下:</P>
<P>sp_changeddbowner login_name[,True]</P>
<P>其中参数True用于将权限一半传递给新属主。</P>
<P>2.扩展数据库</P>
<P>(1)扩展数据库空间</P>
<P>alter database 数据库名</P>
<P>on 设备名=扩展空间 //单位:M</P>
<P>如果扩展的设备对于数据库是新的,System和Default段会自动扩展到该设备上。</P>
<P>(2)扩展事务日志到新的设备上</P>
<P>sp_logdevice 数据库名,设备名</P>
<P>举例:将数据库另外扩充5M,用于存储日志</P>
<P>alter database my_db</P>
<P>on my_dev=5</P>
<P>go</P>
<P>sp_logdevice my_db,my_dev</P>
<P>go</P>
<P>3.删除数据库</P>
<P>drop database 数据库名</P>
<P>删除设备前必须删除其上的所有数据库,删除设备的命令是:sp_dropdevice</P>
<P>三、事务日志</P>
<P>日志文件是用来记录数据库每一次修改活动的文件。SQL Server中的每一个数据库都有自己的日志文件,即系统表syslogs,也称为事务日志。事务日志是撤消事务和出现故障时恢复事务的依据。</P>
<P>在某些情况下,事务日志比数据本身更为重要。</P>
<P>什么是事务?</P>
<P>数据库的修改是以事务为单位进行的。一个事务就是一个操作序列,这些操作要么全做,要么全不做,它是一个不可分割的工作单位。任何一个事务具备如下特征。</P>
<P>(1)执行的原子性(Atomic);</P>
<P>(2)保持数据的一致性(Consistency);</P>
<P>(3)彼此的隔离性(Isolation);</P>
<P>(4)作用的持久性(Durability)。</P>
<P>上述事务的四个特征被称为事务的ACID准则。</P>
<P>事务在运行过程中,SQL Server把事务开始、事务结束以及对数据库的插入、删除和更新等每一个操作作为一个日志记录存放到事务日志中。事务中的更新操作首先在数据库缓冲区(内存)中进行,缓冲区分别有用来记录操作活动的数据页(data page)和日志页(log page)。当运行到commit tran时,日志页首先从缓冲区写到磁盘上,而后数据页从缓冲区写到磁盘上,即遵循“先与日志(write_ahead log)”的原则,这样保证出现故障的情况下,通过日志能够得到最大限度的恢复。恢复必须撤消发生故障时还未提交的事务,已完成的事务若仍有未从缓冲区写到数据库设备中,还要重新运行该事务。</P>
<P>附:创建与装载数据库实例</P>
<P>use master</P>
<P>decl are @vedvno int</P>
<P>select @vdevno=max(convert(tinyint,substring(convert(binary(4),d.low),v.low,1)))+1</P>
<P>from master.dbo.sysdevices d,master.dbo.spt_values v</P>
<P>where v.<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200604231258125.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200604231258125.html'" tppabs="http://www.itisedu.com/phrase/200604231258125.html" target="_new">type</a>=’E’and v.number=3</P>
<P>declare @v_str char(2)</P>
<P>select @v_str=convert(char(2),@vdevno)</P>
<P>print @v_<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200604231411575.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200604231411575.html'" tppabs="http://www.itisedu.com/phrase/200604231411575.html" target="_new">st</a>r</P>
<P>disk init</P>
<P>name=”YDDATA”,</P>
<P>physname=”D:\Syb_Data\YDDATA.dat”,</P>
<P>vdevno=@vdevno+1,</P>
<P>size=153600</P>
<P>disk init</P>
<P>name=”YDINDEX”,</P>
<P>physname=”D:\Syb_Data\YDINDEX.dat”,</P>
<P>vdevno=@vdevno+2,</P>
<P>size=102400</P>
<P>disk init</P>
<P>name=”YDLOG”,</P>
<P>physname=”D:\Syb_Data\YDLOG.dat”,</P>
<P>vdevno=@vdevno+3,</P>
<P>size=76800</P>
<P>create database YDMISDB</P>
<P>on YDDATA=300,YDINDEX=200</P>
<P>log on YDLOG=150</P>
<P>use YDMISDB</P>
<P>execute sp_addsegment indexdev,YTMISDB,YTINDEX</P>
<P>execute sp_dropsegment “default”,YTMISDB,YTINDEX</P>
<P>execute sp_dropsegment system,YTMISDB,YTINDEX</P>
<P>use master</P>
<P>load database YDMISDB from ‘d:\yd_dump\ydmis_backup.dmp’</P>
<P>online database YDMISDB</P>
<P> </P>
<P>第四讲 数据库安全性与用户管理</P>
<P>一、安全管理概述</P>
<P>数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。SQL Server的安全管理是一种基于角色(role)的管理方法,位于不同权限层次(或角色)的用户具有不同的用户权限。</P>
<P>规定用户权限有三个因素:用户、数据对象和操作,即什么用户在哪些数据对象上可以执行什么操作。</P>
<P>访问SQL Server中数据的四道屏障:</P>
<P>(1)操作系统——操作系统登录</P>
<P>(2)Sybase服务器——服务器登录</P>
<P>(3)Sybase数据库——数据库用户登录</P>
<P>(4)数据库对象——对象授权</P>
<P>二、理解数据库角色</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -