SQL Server学习(三)

管理数据库
数据文件和日志文件的增长
当对多个文件使用文件自动增长方式时,SQL Server会对文件组内的所有文件使用按比例填充策略,而不是先写满一个文件,再写下一个.

修改数据库命令
举例:
ALTER DATABASE Sample
 MODIFY FILE ( NAME = 'SampleLog',
 FILENAME = 'D:/Data/Sample.ndf',
 size = 16MB)
GO
//重命名文件

ALTER DATABASE Sample
ADD FILE
 (NAME = SampleData2,
 FILENAME = 'D:/Data/Sample2.ndf',
 SIZE = 15MB,
 MAXSIZE = 20MB)
GO
//增加文件
改完后可以使用“exec sp_helpfile”察看修改效果

优化性能的措施
(1)为数据文件和日志文件分配足够的初始大小,避免频繁地进行自动增长处理;
(2) 如果有多个数据库的话,可以设置数据文件大小的最大值;
(3)将数据文件和日志文件的增长增量设置为足够大的值,避免频繁地进行自动增长处理。

重点:
监测日志的三种手段:企业管理器、DBCC SQLPERF ( LOGSPACE ) 语句、Windows 2000 系统监测器;
产生大量日志的情况;
扩展日志的两种方法:企业管理器、ALTER DATABASE 语句;

注意:
如果事务日志耗尽空间,SQL?Server 将无法记录事务以及不允许更改数据库;
Windows 系统监视器通过“开始”->“管理工具”->“性能”->“系统监视器”访问。

提供有关所有数据库中的事务日志空间使用情况的统计信息。
use master
dbcc sqlperf(logspace)

收缩数据库或文件
收缩整个数据库:
1.企业管理器
2.DBCC SHRINKDATABASE 语句
DBCC SHRINKDATABASE (数据库名 [, 目标百分比]
[, {NOTRUNCATE | TRUNCATEONLY}])
举例:如果已经用了100MB数据库文件中的60MB,可以指定收缩百分比为25%,然后SQL Server把文件收缩至80M(即60/(1-25%))。也就是:80MB的数据库文件拥有它25%的剩余空间。
如果已经用了80MB的数据库文件,SQL Server将不能收缩此文件。
如执行:dbcc shrinkdatabase(reference, 25)
得到:7 2 768 384 768 384

  收缩语句中的选项
  因为 DBCC SHRINKDATABASE 逐个文件地收缩数据库,所以实际收缩所使用的机理与 DBCC SHRINKFILE 的相同
NOTRUNCATE 选项导致在数据库文件中保留所释放的文件空间。 SQL Server 只通过将数据移动到文件的前面压缩数据。默认情况是所有释放的文件空间返回给操作系统
TRUNCATEONLY 选项导致文件中的所有未使用的空间释放给操作系统。不尝试将其重新分配到未分配页。当使用TRUNCATEONLY 时,参数 target_size 和 target_percent 被忽略
EMPTYFILE 选项,只适用于 DBCC SHRINKFILE,将清空数据文件的内容并将数据移动到同一文件组中的其他文件


收缩数据库中的一个数据文件:
1.企业管理器
2.DBCC SHRINKFILE 语句
DBCC SHRINKFILE ({文件名 | 文件id} [, 目标大小]
[, { EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}])
如执行:DBCC SHRINKFILE ( SampleData )
得到:7 1 1280 1280 168 168

自动收缩数据库:
设置数据库选项 autoshrink 为 true

注意:
(1)是否能够收缩数据库与数据库的使用空间相关。如果数据库文件的使用空间超过收缩数据库后的数据库文件大小,则无法收缩数据库文件,此时文件的大小不会改变。

(2)SQL Server不会把文件收缩到比数据所占空间更小,也不会把文件大小收缩到超过Create database语句中size参数指定的大小。

分离和附加数据库
SQL Server 2000 允许分离数据库的数据和事务日志文件,然后将其重新附加到另一台服务器,甚至同一台服务器上
分离数据库
分离数据库将从 SQL Server 删除数据库,但是保持组成该数据库的数据和事务日志文件中的数据库完好无损
分离数据库语法:EXEC sp_detach_db 数据库名
分离数据库要求没有用户正在使用数据库,数据库中没有未完成的事务,并且在内存中没有这个数据库的脏页
一旦数据库被分离,其条目就从 master 数据库的 sysdatabases 表中被移除。从 SQL Server 的角度看,数据库似乎被删除了但是其物理文件仍然保存在磁盘上

举例:
use master //关闭当前对Sample的操作
exec sp_detach_db 'Sample'
go
//分离Sample

exec sp_helpdb
go
//察看Sample已分离

exec sp_attach_db 'Sample',
@filename1 = 'D:/Data/Sample.mdf',
@filename2 = 'D:/Data/Sample.txt',
@filename3 = 'D:/Data/Sample2.ndf',
@filename4 = 'D:/Data/orderYear.ndf'
go
//附加数据库

exec sp_helpdb
go
//察看Sample已附加上

删除数据库的方法
企业管理器
DROP DATABASE 语句
 DROP DATABASE 数据库名 [,…n]
 可以一次删除多个数据库
如“DROP DATABASE Sample”
删除数据库的限制:
1)不能删除:
2)正在被还原的数据库
3)任何用户因为读或写而打开的数据库
4)正在发布它的任何一张表作为 SQL?Server 复制组成部分的数据库
5)系统数据库


分离数据库和删除数据库的区别
(1)分离的数据库文件仍然存在,操作系统认为它们是已经关闭的文件,所以可以复制、移动和删除这些文件。
(2)使用drop database命令删除数据库同时,也删除了操作系统中的数据文件。在删除之前,只做是否有人连接到数据库的判断,不做脏页、是否打开事务的检查。

数据结构介绍:
书本47页

推荐操作 重点:
创建或修改数据库后,请立即备份 master 数据库;
这很重要,因为 master 数据库含有 system 目录,而 system 目录含有使用 SQL Server 的重要信息;
当使用自动文件增长时,请指定最大大小;
这将防止任何一个文件将整个磁盘填满;
指定大的自动增长增量以避免频繁的文件增长;
这将减少SQL?Server 管理活动并帮助防止文件在硬盘上形成碎片;
更改默认文件组;
若数据库含有多个文件组,请将默认文件组指定为用户定义文件组的一个。这将防止任何未可预知的表的增长负面影响主文件组中的系统表。

设置数据库恢复模型:
ALTER DATABASE Sample SET RECOVERY SIMPLE//设置数据库Sample恢复模型为简单。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值