数据库
首页 > 数据库> > SQLServer数据库收缩相关知识笔记

SQLServer数据库收缩相关知识笔记

作者:互联网

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

1、为什么要进行数据库收缩?

SQL Server 数据库采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了300MB,而实际上只占用了20MB空间,这样就会造成磁盘存储空间的浪费。可以通过数据库收缩技术对数据库中的每个文件进行收缩,删除已经分配但没有使用的页。从而节省服务器的存储的成本。

2、数据库收缩的原理

官方解释:收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间。在文件末尾创建足够的可用空间后,可以取消对文件末尾的数据页的分配并将它们返回给文件系统。

3、数据库收缩的限制和局限

收缩后的数据库不能小于数据库最初创建时指定的大小。 或是上一次使用文件大小更改操作(如 DBCC SHRINKFILE)设置的显式大小。

比如:如果数据库最初创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。

不能在备份数据库时收缩数据库。 反之,也不能在数据库执行收缩操作时备份数据库。

4、数据库收缩的方式

4.1 收缩数据库 DBCC SHRINKDATABASE

介绍:收缩指定数据库中的数据文件大小。

语法格式:

DBCC SHRINKDATABASE
    ( database_name [ , target_percent ]
        [ , { NOTRUNCATE | TRUNCATEONLY } ] 
)

参数说明:

4.2 收缩数据库文件 DBCC SHRINKFILE

介绍:收缩当前数据库的指定数据或日志文件的大小,或通过将数据从指定的文件移动到相同文件组中的其他文件来清空文件,以允许从数据库中删除该文件。文件大小可以收缩到比创建该文件时所指定的大小更小。这样会将最小文件大小重置为新值。

语法格式:

DBCC SHRINKFILE 
(
    { file_name | file_id } 
    { [ , EMPTYFILE ] 
    | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
    }
)
[ WITH NO_INFOMSGS ]

参数说明:

例如,如果创建一个10MB 的文件,然后在文件仍然为空的时候将文件收缩为2 MB,默认文件大小将设置为2 MB。这只适用于永远不会包含数据的空文件。

5、示例
-- 将TestDB数据库中的TestDB文件的大小收缩到20MB。
USE TestDB ;
GO
DBCC SHRINKFILE (TestDB, 20) ;
-- 将减小 UserDB 用户数据库中数据文件和日志文件的大小,
-- 以便在数据库中留出 10% 的可用空间
DBCC SHRINKDATABASE (TestDB, 30); 
-- 清理数据库日志文件为2M
USE master
ALTER DATABASE TestDB SET RECOVERY SIMPLE WITH NO_WAIT
ALTER DATABASE TestDB SET RECOVERY SIMPLE --简单模式
USE TestDB
DBCC SHRINKFILE (N'TestDB_log' , 2, TRUNCATEONLY)
 --设置压缩后的日志大小为2M,可以自行指定
USE master
ALTER DATABASE TestDB SET RECOVERY FULL WITH NO_WAIT
ALTER DATABASE TestDB SET RECOVERY FULL --还原为完全模式

IT技术分享社区

个人博客网站:https://programmerblog.xyz

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

标签:文件,数据文件,收缩,数据库,SQLServer,笔记,TestDB,DBCC
来源: https://blog.51cto.com/u_11205641/2827130