日期:2014-05-17  浏览次数:20441 次

sql数据库收缩问题
数据库不超过10张表,有三张在两万条数据左右,其他都没什么数据,出来后要160M.
无奈现在的虚拟主机都是送个100-200M的数据库,所以呀,哪位指点一下,让我把这160M收缩一下(sql自带的截断日志,收缩我知道的)。估计要从字段类型方面入手?或者其他方面,总之能减到100M下最好。

------解决方案--------------------
DBCC SHRINKFILE

收缩数据库文件和日志文件,能释放一些空间出来

但是突破200 是很容易的,如果你的数据量增量太大,那只好付费了。


------解决方案--------------------
1、检查字段数据类型,比如datatime,如果业务允许,换成smalldatetime,可以减少一半存储空间。即换成小类型。
2、如果不是重要的业务,把日志收缩截断后,设为简单模式。
------解决方案--------------------
USE Luxim_Test_DB;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE DB_NAME
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 10 MB.
DBCC SHRINKFILE ([DB_NAME_log], 10);
GO
-- Reset the database recovery model.
ALTER DATABASE DB_NAME
SET RECOVERY FULL;
GO
------解决方案--------------------
数据是要增长的,不可能一直收缩后保持在200M内,暂时的还行,长期就不太靠谱了!
------解决方案--------------------
探讨
感谢各位:
找到一个函数,实现查询表使用的空间。通过它发现了问题所在。ntext(nvarchar(MAX))类型的数据过大。
现在应该需要一个类似压缩/解压函数 就能解决问题。但是sql里边没找到。有知道的指点一些。

查询表空间函数:exec sp_spaceused 表名

------解决方案--------------------
一共十多张表,其中三张表,两万条数据,就超过160M了?
那还是从数据下手吧,看看是否有字段的值太大太长了,或者使用了text、image等类型了。
------解决方案--------------------
2005没有压缩功能,08才有,但是对lob类型效果有限,你花太多时间在压缩空间上可能成效不高。如果你的系统以后是作为正式系统的话,不可避免会增长,而且合理的增长证明你的系统多人用。更有价值。