SqlServer 在创建数据库时候指定的初始数据库大小是不能被收缩的
当你在SqlServer创建数据库的时候可以指定数据库文件的初始大小,比如下图中我们将新创建的数据库MyDB的大小设置成了1024MB

那么你建好的数据库的确也就会占用1024MB左右的磁盘空间

不过使用存储过程sp_spaceused可以看到其中有1021.85 MB的空间是MyDB占用着并未使用。

于是我们在想是不是可以用DBCC ShrinkDatabase或DBCC ShrinkFile语句收缩未使用的数据库空间
dbcc shrinkdatabase('MyDB',10)
但是执行Shrink语句后我们发现数据库大小没有丝毫变化。。。

并且在执行Shrink语句后得到提示

这说明Sqlserver认为MyDB没有空间可以收缩。。。但是实际上我们通过存储过程sp_spaceused可以看到MyDB的确是有1021.85 MB的空间是没使用的。不能收缩数据库的原因其实是新建SqlServer数据库的时候指定的初始大小是不能被收缩掉的,要使用Alter Database语句或者在SMSS中重新指定MyDB的初始大小才能够收缩未使用的空间。
现在我们在SMSS中将MyDB的初始大小更改为800MB

可以看到现在MyDB的大小的确是在800MB左右了

然后现在再把MyDB的初始大小改回1024MB


然后此时再执行dbcc shrinkdatabase('MyDB',10),可以看到数据库大小变为了800MB左右,所以实际上shrinkdatabase语句只能把数据库收缩为 自数据库创建之初以来指定过的最小的初始文件大小,如果你的数据库第一次创建的时候初始大小就是1024MB,并且之后都没有人为调动过初始大小那么抱歉你的数据最小也就只能收缩到1024MB,尽管可能其中有1023MB都没有被实际用到。。。

数据库文件组中的NDF文件可能需要用Sql语句来指定文件初始大小
有时候在SqlServerManagementStudio中使用UI界面来指定NDF文件大小可能会不起作用,比如下图中我们可以看到tempdb数据库除了主数据库文件tempdb.mdf外,还有7个ndf文件。在下面的UI窗口中指定tempdb.mdf的文件初始大小是没有问题的,但是在指定tempdb_6.ndf的初始大小的时候没有效果。

这时我们使用下面的Sql语句来更改tempdb_6.ndf文件的初始大小就行了。该语句实际上可以更改数据库文件组下任何文件的初始大小。
ALTER DATABASE tempdb
MODIFY FILE (NAME='tempdb_6'/*这里写ndf文件的逻辑名称,在上图中tempdb_6.ndf文件的逻辑名称就是tempdb_6*/,SIZE=200MB/*指定ndf文件的初始大小*/,MAXSIZE=UNLIMITED,FILEGROWTH=100MB);
执行上面语句后再查看tempdb_6.ndf文件的初始大小就变成200MB了。

SqlServer 在创建数据库时候指定的初始数据库大小是不能被收缩的的更多相关文章
- 在SQLSERVER中创建DBLINK,操作远程服务器数据库
--配置SQLSERVER数据库的DBLINK exec sp_addlinkedserver @server='WAS_SMS',@srvproduct='',@provider='SQLOLEDB ...
- Sql语句在SqlServer中创建数据库、表格并添加约束
通过Sql语句来创建数据库与架构 创建数据库 数据库的创建首先是要引用主数据库的,需要在master数据库的环境下进行创建.大致的语法如下: -- 使用master数据库 use master -- ...
- PDO创建mysql数据库并指定utf8编码
<?php //PDO创建mysql数据库并指定utf8编码 header('Content-type:text/html; charset=utf-8'); $servername = &qu ...
- 创建和关联内容数据库到指定Web应用程序和站点集
创建和关联内容数据库到指定Web应用程序和站点集 一个Web应用程序不限于使用单个内容数据库.SharePoint同意你关联多个内容数据库到Web应用程序.原因之中的一个是基于内容数据 ...
- SQLServer之创建数据库架构
创建数据库架构注意事项 包含 CREATE SCHEMA AUTHORIZATION 但未指定名称的语句仅允许用于向后兼容性. 该语句未引起错误,但未创建一个架构. CREATE SCHEMA 可以在 ...
- SQLServer之创建用户定义的数据库角色
创建用户定义的数据库角色注意事项 角色是数据库级别的安全对象. 在创建角色后,可以使用 grant.deny 和revoke来配置角色的数据库级权限. 若要向数据库角色添加成员,请使用alter ro ...
- 【转载】Sqlserver在创建表的时候如何定义自增量Id
在Sqlserver创建表的过程中,有时候需要为表指定一个自增量Id,其实Sqlserver和Mysql等数据库都支持设置自增量Id字段,允许设置自增量Id的标识种子和标识自增量,标识种子代表初始自增 ...
- SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束
创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...
- 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.2 安装数据库软件)
当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.2 安装数据库软件 这部分简短讲 ...
随机推荐
- [LeetCode]题解(python):037-Sudoku Solver
题目来源 https://leetcode.com/problems/sudoku-solver/ Write a program to solve a Sudoku puzzle by fillin ...
- 将option添加到select框
var select=document.createElement("select"); select.setAttribute("class","f ...
- opencv的高斯混合模型
http://blog.jasonding.top/2015/04/05/Machine%20Learning/%E3%80%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%8 ...
- SqlServer基础:IsNull
SELECT @temp = ISNULL(point, 0) FROM dbo.User where Nid=6 如果User表中的point字段为null的话,则对@temp赋值0
- http和webservice接口区别
httpservice通过post和get得到你想要的东西webservice就是使用soap协议得到你想要的东西,相比httpservice能处理些更加复杂的数据类型 http协议传输的都是字符 ...
- Android PickerView滚动选择器的使用方法
手机里设置闹钟需要选择时间,那个选择时间的控件就是滚动选择器,前几天用手机刷了MIUI,发现自带的那个时间选择器效果挺好看的,于是就自己仿写了一个,权当练手.先来看效果: 效果还行吧?实现思路就是自定 ...
- proguard使用
Proguard用于混淆java代 码,使代码变为由难懂的,无规律的字符命名的各种方法和类,保护自己的劳动成果.个人认为proguard混淆纯java项目比较理想,比如j2me的 MIDLET,如 ...
- SQLdiag-初识
SQLdiag是一个命令行实用工具,默认情况下,在C:\Program Files\Microsoft SQL Server\100\Tools\Binn目录下可用.首先我们打开SQLdiag.exe ...
- RouterOS软路由常用命令
修改用户密码 [admin@MikroTik]>/user #进入操作路径 [admin@MikroTik]/user>prin ...
- cocos2dx 3.x(精灵的碰撞检测,点击移动与拖动精灵)
// // MainScene.hpp // helloworld // // Created by apple on 16/9/19. // // #ifndef MainScene_hpp #de ...