求助高手,压缩数据库后,磁盘产生碎片,如何消除?

czyoooo 2011-03-06 02:03:25
declare @dbname varchar(50)

set @dbname='DB'
--1.清空日志
exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG')

--2.截断事务日志:
exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')

--3.收缩数据库文件(如果不压缩,数据库的文件不会减小
exec('DBCC SHRINKDATABASE(['+@dbname+'])')



压缩数据库后,磁盘产生碎片,即使停止服务,用磁盘管理的,磁盘碎片整理也不能够解决.
除了把数据文件COPY到别的盘符,然后删除,重新附加.
但我现在是每天的定时任务 01:00:00,操作上面的压缩数据库.
...全文
130 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
leihelin5201314 2011-03-08
把数据库备份出来,然后重装
回复
Hankuker 2011-03-07
xue xi
回复
dawugui 2011-03-06
压缩数据库后,磁盘产生碎片,即使停止服务,用磁盘管理的,磁盘碎片整理也不能够解决.

---

这和数据库有什么关系?

你想解决的话,把数据库备份了,把盘格了,然后重装操作系统.
回复
SQL77 2011-03-06
收缩后,最好给整理一下索引
回复
东那个升 2011-03-06
尽量不要收缩数据文件。。。你只是改变了物理结构,逻辑上是没有变化的。

只有在空间紧张的时候且数据文件空间大量未使用的时候才会去收缩。
回复
rucypli 2011-03-06
你在清空截断日志的时候备份了吗
如果不如要备份,那数据库改成简单恢复模式
回复
Mr_Nice 2011-03-06
磁盘上由于DBCC SHRINKDATABASE产生的碎片,只能由操作系统侧将碎片进行处理了。
另外,确实像 小F说的,DBCC SHRINKDATABASE 在NOTRUECATE 和TRUNCATEONLY的使用上,需要慎重考虑。
回复
czyoooo 2011-03-06
我现在是2CPU,先前是4G内存,新加了一个内存后发现只要有碎片,系统就会经常IDLE,10几秒种,IDLE过程中系统无反映,碎片整理后就好了,不清楚是碎片的问题,还是磁盘阵列的问题?
另外我查了下NOTRUECATE:是将数据库缩减后剩余的空间保留在数据库,中不返还给操作系统

是用这个选项?


先前4G内存,也没注意碎片的问题,都是好好的,发现加了新的内存后,只要有碎片就经常IDLE
回复
--小F-- 2011-03-06
合理使用DBCC SHRINKDATABASE 的NOTRUECATE 和TRUNCATEONLY 选项
回复
快溜 2011-03-06
磁盘碎片的问题,数据库能管到吗?学习,帮顶。。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2011-03-06 02:03
社区公告
暂无公告