如何收缩sqlserver数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何收缩sqlserver数据库相关的知识,希望对你有一定的参考价值。

请看清除,我问的不是收缩日志,是收缩数据库文件也就是mdf文件。我现在有一个数据库11G,我删除了180多万条记录,但是数据库大小不变,仍然是11G。可是可用空间已经变为了6G,也就是说现在11G的空间里有6G是空余的,请问哪位大虾能给个解决办法。
注:使用所有任务-收缩数据库不管用。

你用数据库管理器选中数据库,先分离,然后再附加,然后再点收缩,收缩的时候先收缩日志文件,一般能收缩很多,记得要填写数字啊,比如上面提示能收缩为0,你就填个5兆,这样预留一点空间,而且很快,收缩完日志文件之后再收缩数据库 同理比最小能收缩量大几兆就可以了,但是收缩数据库比较慢 需要很多时间 参考技术A 本主题介绍如何使用 SQL Server Management Studio
中的对象资源管理器收缩数据库。收缩后的数据库不能小于数据库的最小大小。最小大小是在数据库最初创建时指定的大小,或是上一次使用文件大小更改操作(如
DBCC SHRINKFILE)设置的显式大小。例如,如果数据库最初创建时的大小为 10 MB,后来增长到 100
MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。

收缩数据库

在对象资源管理器中,连接到 SQL Server 数据库引擎实例,然后展开该实例。

展开“数据库”,再右键单击要收缩的数据库。

指向“任务”,指向“收缩”,然后单击“数据库”。

根据需要,可以选中“在释放未使用的空间前重新组织文件”复选框。如果选中该复选框,必须为“收缩后文件中的最大可用空间”指定值。

选中该选项的作用与执行 DBCC SHRINKDATABASE 时指定 target_percent 值相同。清除该选项的作用与使用 TRUNCATEONLY 选项执行 DBCC SHRINKDATABASE 相同。TRUNCATEONLY 将文件收缩到最后分配的区。这将减小文件的大小,但不移动任何数据。默认情况下,该选项为清除状态。

输入收缩数据库后数据库文件中剩下的最大可用空间百分比。允许的值介于 0 和 99 之间。该选项仅在选中“在释放未使用的空间前重新组织文件”时可用。

单击“确定”。

收缩数据库

数据库中的数据库文件过于庞大或者存在未使用页时,可以使用收缩数据库方法来实现对数据库的收缩,同样,事务日志文件也可以收缩。数据库文件可以作为组或
单独地进行手工收缩,也可设置为按指定的时间间隔自动收缩。收缩数据库的活动是在后台进行,并不影响数据库内的用户活动。
操作步骤如下:
(1)打开SQL Server企业管理器。双击打开“数据库”节点,在要收缩的数据库名称上,单击鼠标右键,在弹出的快捷菜单中选择“所有任务”→“收缩数据库”命令,弹出“收缩数据库”对话框,如图1所示。

收缩数据库
(2)指定数据库的收缩量,可以从以下选项中选择。
在“收缩后文件中的最大可用空间”文本框中输入收缩后数据库中剩余的可用空间量。以“数据库大小,可用空间”值作为依据。如最大可用空间是“25%”,则在该选项中设置小于该数值的百分比,如“12%”。
选择“在收缩前将页移到文件起始位置”复选框,使释放的文件空间保留在数据库文件中,并使包含数据的页移到数据库文件的起始位置。
(3)在“调度”选项框中,选择是否自动定期执行数据库压缩操作。选中“根据本调度来收缩数据库”复选框,单击“更改”按钮,创建或更改自动收缩数据库的频率和时间。
(4)最后单击“确定”按钮完成操作。
参考技术B 利用向导,
选择你要收缩的数据库,右键->所有任务->收缩数据库-〉在里面设置收缩比
执行一下就行,

如果,操作日志文件的话,我觉的没有必要,因为日志不会太大了,
如果太大的话,直接删除就行,
没必要收缩了,

如何清除SQLserver 日志

如何清除数据库日志

1
打开查询分析器,输入命令DUMP TRANSACTION 数据库名 WITH NO_LOG
2
再打开企业管理器–右键你要压缩的数据库–所有任务–收缩数据库–收缩文件–选择日志文件–在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。
END
清除Log有两种方法

自动清除法:
开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log。此方法的优点是无须人工干预,由SQL Server自动执行,并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。
手动清除法
执行命令“dump transaction”来清除Log。以下两条命令都可以清除日志:
dump transaction with truncate_onlydump transaction with no_log
通常删除事务日志中不活跃的部分可使用“dump transaction with trancate_only”命令,这条命令写进事务日志时,还要做必要的并发性检查。SYBASE提供“dump transaction with no_log”来处理某些非常紧迫的情况,使用这条命令有很大的危险性,SQL Server会弹出一条警告信息。为了尽量确保数据库的一致性,你应将它 作为“最后一招”
参考技术A 分离数据库,转移日志文件,附加数据库重新生成日志文件 参考技术B 收缩数据库就可以了

以上是关于如何收缩sqlserver数据库的主要内容,如果未能解决你的问题,请参考以下文章

Sqlserver数据库日志太大如何快速删除

如何清理sql server 2008日志

如何收缩sqlserver数据库

SQL SERVER如何收缩数据库

如何收缩 SQL Server 中的 Tempdb 数据库

SQLServer数据库如何收缩日志空间?