之前我们讨论了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 ...
随机推荐
-
技术那么多,你想看看JSON Schema的测试吗?
目录 1. 什么是JSON Schema? 2. 如何定义一个JSON Schema 3. 如何测试JSON Schema a) 使用JSON Schema validator GUI b) 在Jav ...
-
在Java中直接调用js代码
JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...
-
ActiveMQ之MessageListener
消息的消费者接收消息可以采用两种方式: 1.consumer.receive()或 consumer.receive(int timeout); 2.注册一个MessageListener. 采用第一 ...
-
hibernate自动建表采用UTF-8字符编码
hibernate自动建表采用UTF-8字符编码 hibernate建表默认为UTF-8编码 >>>>>>>>>>>>>& ...
-
nested query for ";pat2"; table
mysql> select t.appln_id, t.filing_date, t.appln_kind, t.people, GROUP_CONCAT(pu.publn_kind) from ...
-
01_ExtJS_HelloWorld
1, 什么是Ext? Ext是一个Ajax框架,用于在客户端创建丰富多彩的web应用程序界面,是在Yahoo! UI的基础上发展而来的.官方网址:http://www.extjs.com/ 现在改为: ...
-
pybind11 安装
Prerequisites: $ sudo apt-get install python-dev (or python3-dev) $ sudo apt-get install cmake $ su ...
-
Solve Docker for Windows error: docker detected, A firewall is blocking file Sharing between Windows and the containers
被这个“分享硬盘”问题烦了我好几个小时,终于在一个叫Marco Mansi外国人博客上找到解决方法了,真的很无奈 https://blog.olandese.nl/2017/05/03/solve-d ...
-
ABP框架
https://aspnetboilerplate.com/ https://aspnetboilerplate.com/Pages/Documents http://www.cnblogs.com/ ...
-
MT【24】一道五次方程的求根题
解答: 评:一般的五次及以上的多项式方程是无根式解的,只能用计算机去精确到某某位.但是特殊的比如$x^5=1$显然有根式解,本题就是一个不平凡的特殊的例子,这里的代换用于求解三次方程的求根过程是一样的 ...