user database的initial size和dbcc shrinkfile
之前我们讨论了dbcc shrinkfile改变tempdb initial size的情况。而用DBCC Shrinkfile去收缩一个user database,情况就比较简单了。让我们通过一些测试来说明SQL Server 收缩user database的行为。
首先创建了一个数据库,Sales_data的初始大小为3mb。 对于当前这个数据库文件来说,它的initial size为3mb。
CREATE
DATABASE
Sales
ON
(
NAME
=
Sales_dat,
FILENAME
=
'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008RTM\MSSQL\DATA\saledat.mdf',
SIZE
= 3,
FILEGROWTH
= 1 )
LOG
ON
(
NAME
=
Sales_log,
FILENAME
=
'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008RTM\MSSQL\DATA\salelog.ldf',
SIZE
= 5MB
)
;
现在我们插入一些10mb数据:
select
top 1280 REPLICATE('a',8000)as
x
into
a
from
sys.columns
c1 ,sys.columns
c2
Sales_data大小变成了13mb的左右,然后执行dbcc shrinkfile来收缩数据文件,注意这里我们没有指定要收缩到的target size:

我发现sales_data的大小变成了3mb。
结论:当数据库实际使用的空间小于Minimum size时,在不指定 target size的情况下,dbcc shrinkfile可以将文件收缩到Minimum Size。(实际上在这个测试中的MinimumSize就是我们数据库的initial size。)
那么我们来看看dbcc shrinkfile能否改变user database的Minimum size? 继续下一个实验。
执行下面的脚本,先将数据库从3M变为13MB,然后使用dbcc shrink并指定target size为10MB。

收缩之后sales_dat变成了11mb,但Minimum
size仍然是之前的3mb。 那么是否说明dbcc shrinkfile无法改变user database的Minimum size? ? ?
继续进行试验:现在我们给dbcc shrinkfile命令指定target size为1MB。
试验结果是,数据库的当前大小变为1.3mb, 而且MinimumSize也变成1.3mb。
我们再次插入数据扩张数据库大小,之后再次使用dbcc shrinkfile收缩(不指定target size)。

如我们所料,这次数据库就被收缩到了1.3mb。
结论:如果数据库收缩后的大小仍然大于minimum size,那么minimum size不会改变。 如果收缩后数据大小小于当前的minimum size,那么minimum size变更为当前大小。
虽然dbcc shrinkfile可以返回minimum
size,但是使用这种办法来查看minimum size显然不是个好主意。还有其他方法查看Minimum size吗?
答案是肯定的:
可以通过dbcc
fileheader得到文件的Minimum size, 请参考MinSize列。
Minimum size的值实际存储在数据文件的第0页中,所以我们通过dbcc page也能查看到

user database的initial size和dbcc shrinkfile的更多相关文章
- Tempdb initial size和dbcc shrinkfile
在使用sql server时您可能遇到过下面的情况,tempdb的数据文件初始大小为3mb, 随着对tempdb的使用,tempdb文件逐渐变得很大(例如30GB),导致了磁盘空间不足. 此时您需要立 ...
- 收缩数据库 DBCC SHRINKFILE
/* from: http://www.cnblogs.com/blackcore/archive/2010/12/27/1917911.html */ 数据库中的每个文件都可以通过删除未使用的页的方 ...
- DBCC SHRINKFILE收缩日志/收缩数据库/收缩文件
DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小. 语法 DBCC SHRINKFILE ( { file_name | file_id } { [ ,t ...
- SQL Server 2008收缩日志文件--dbcc shrinkfile参数说明
原文:SQL Server 2008收缩日志文件--dbcc shrinkfile参数说明 DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小. 语法 DBCC SHRINKF ...
- SQL Server dbcc shrinkfile 不起作用
方法 1.重建聚集索引. 方法 2.重建堆表. ---------------------------------------------------------------------------- ...
- 笔记9-徐 DBCC SHRINKFILE不起作用的原因
1 , , , , , , , , ,40) ,1 page_id pg_alloc ext_size obj_id index_id partition_number partition_id ia ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- SQLSERVER 2012 收缩日志
select log_reuse_wait_desc from sys.databases where name='tfs_CARDLANWEB' backup log tfs_CARDLANWEB ...
- SQLSERVER常用脚本整理
数据库存储空间查询(数据库的大小及数据库中各个表的数据量和每行记录大小) IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = Object_i ...
随机推荐
- ListView的addHeaderView()方法相关问题
使用listView.addHeaderView(view) 可以在 listView 上方添加一个view视图 ,使listView和这个view连接在一起 效果上看上去是一个整体 一般用于上拉刷新 ...
- [linux]CentOS无法使用epel源
[linux]CentOS无法使用epel源 问题的产生与解决 作者作为Android应用开发者,对linux的接触一直是ubuntu为主,但是有一个用于科学上网的vps,由于内存只有64M,所以使用 ...
- SSH整合简述一
1.web.xml中配置 struts2过滤器 <filter> <filter-name>struts2</filter-name> <filter-cla ...
- IOS 杂笔-18 (let 与 var)
var 是 variable的缩写形式,是变量的意思 ,是可改变的,并不是数据类型. let 是常量的意思,不可改变的.
- 用nginx-gridFS读取MongoDB的图片及文件(为什么你老是配不成功?)
最近在部署公司服务器的nginx + mongodb + gridfs环境: 搜索了N多文档,基本上都一样,期间遇到很多问题: 下面是整理的一份搭建文档: 摘要 nginx-gridfs是一个ngin ...
- JMeter源码集成到Eclipse
由于JMeter纯Java开发,界面也是基于Swing或AWT搞出来的,所以想更深层次的去了解这款工具或对于想了解JMeter插件开发或二次开发的童鞋们来说,读读JMeter的源码估计是必不可少的,所 ...
- Head First HTML CSS XHTML笔记
最近在看点前端的东西,看到了这本入门级的好书 <head></head>中的title和style <q></q> inline元素 在<p> ...
- nyoj 42 一笔画问题 欧拉路径
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42 欧拉回路,欧拉路径水题~ 代码: #include "stdio.h&quo ...
- git报错 error: cannot stat ‘'web/js': Permission denied
切换分支时报错: error: cannot stat ‘'web/js': Permission denied 解决方法:退出编辑器.浏览器.资源管理器等,然后再切换就可以了.
- OFFICE2013实现选中单元格所在行、列高亮显示
在你要实现此功能的工作表标签右击,在弹出的菜单中选择编辑代码,然后输入下面代码保存即可! 如没有出现效果,则可能是禁用了宏的关系.所以要在安全选项中启用宏选项. Private Sub Workshe ...