unallocated space无法释放问题[紧急]

ChengKing 2012-10-19 09:38:48
sql server 2008 r2


使用sp_spaceused命令发现:
unallocated space

非常大,50G中有35G是 unallocated space 这个应当怎么释放掉?


用一般的数据库和文件收缩无法释放。

谢谢!
...全文
1160 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
已经解决了此问题。 原因是数据文件 中有一个page坏掉了,通过pageid查询不到这个页的所属(table/index etc),这个页是一个死页。

把数据全部导到新库(根据pageid得不到是哪个对象的数据,所以只能全导了),不受那个坏页的限制了,这样解决就好。

shrinkfile执行过程中出错是因为这个操作试图移动extent时报错,而extend中包含那个坏页。导数据的方式是……
[/Quote]
GX。。。

所以一般都要定期DBCC CHECKDB()进行检查。如果有出错。可进行适当修复。
ChengKing 2012-10-22
  • 打赏
  • 举报
回复
已经解决了此问题。 原因是数据文件 中有一个page坏掉了,通过pageid查询不到这个页的所属(table/index etc),这个页是一个死页。

把数据全部导到新库(根据pageid得不到是哪个对象的数据,所以只能全导了),不受那个坏页的限制了,这样解决就好。

shrinkfile执行过程中出错是因为这个操作试图移动extent时报错,而extend中包含那个坏页。导数据的方式是复制,而不是移动所以不会出错。

lyhabc桦仔 2012-10-20
  • 打赏
  • 举报
回复
如果数据库有完整备份,使用备份来恢复数据库
如果没有备份使用DBCC CHECKDB
使用dbcc checkdb 的repair_rebuild参数:不丢失数据
不行的话使用repair_allow_data_loss :有可能丢失数据
lyhabc桦仔 2012-10-20
  • 打赏
  • 举报
回复
运行DBCC CHECKDB检查一下数据库
ChengKing 2012-10-20
  • 打赏
  • 举报
回复
在使用中 unesed空间一般比 unallocated 空间难 回收,要涉及到对表进行聚焦索引整理。 但这里问题比较奇怪,在SHRINKFILE执行过程中又出现一个下面错误:

---------------------------------------------------------------------------

DBCC SHRINKFILE: 无法移动页1:5362183,因为该页所属的分区已删除。

(1 行受影响)

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。


(1 行受影响)

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

---------------------------------------------------------------


运行了几秒钟就提示如上错误。根据 我现在的分析怀疑很可能是 文件损坏导致错误了。 这个页所在分区找不到,致后面的所有 分区称动都没有执行。 导致这个移动事务失败。














汤姆克鲁斯 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

Reserved下面的unused可以通过重建聚焦索引解决,但对unallocated space没有用。这些方法都试过了。


现在想释放掉:unallocated space,还有没有好的办法?
[/Quote]
整理完索引碎片了吗
写个循环多次运行DBCC SHRINKFILE

declare @i int=1
while @i<500
begin
DBCC SHRINKFILE(1,100)
DBCC SHRINKFILE(2,0)
set @i=@i+1
waitfor delay '00:00:10'
end
發糞塗牆 2012-10-19
  • 打赏
  • 举报
回复
重建了索引,能把数据重组。这样有可能空出某些区,由于收缩是基于区一级的操作。所以收缩起来才有意义,如果本来可以集中在一个区的数据零散分布于多个区,收缩是没有效果的。
KevinLiu 2012-10-19
  • 打赏
  • 举报
回复
你指定收缩的TARGET了吗?
ChengKing 2012-10-19
  • 打赏
  • 举报
回复
Reserved下面的unused可以通过重建聚焦索引解决,但对unallocated space没有用。这些方法都试过了。


现在想释放掉:unallocated space,还有没有好的办法?
KevinLiu 2012-10-19
  • 打赏
  • 举报
回复
不重建索引的话可能根本收缩不了的,SQL Server管理数据库文件的级别是区,重建索引可以腾出很多空区,这样就可以收缩掉了。

如果是HEAP表的话建议重新创建表然后将数据导入到新表然后改名,否则可能无法收缩。

汤姆克鲁斯 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

重建一下聚集索引再收缩咯
[/Quote]
应该是先收缩,在重建索引吧,收缩之后会产生索引碎片的
百年树人 2012-10-19
  • 打赏
  • 举报
回复
在频繁进行增删的表上重建索引试试

dbcc dbreindex('表名','',90)
發糞塗牆 2012-10-19
  • 打赏
  • 举报
回复
重建一下聚集索引再收缩咯
汤姆克鲁斯 2012-10-19
  • 打赏
  • 举报
回复
EXEC sp_spaceused @updateusage='true'
汤姆克鲁斯 2012-10-19
  • 打赏
  • 举报
回复
dbcc shrinkfile
对数据库文件和日志文件分别收缩

另外使用sp_spaceused的时候
exec sp_spaceused true 这样会更新一下统计信息
不加true你看到的可能不是最新的
ChengKing 2012-10-19
  • 打赏
  • 举报
回复
sql server 2008 r2


使用sp_spaceused命令发现:
unallocated space

非常大,50G中有35G是 unallocated space 这个应当怎么释放掉?

[分配的保留空间只占25%左右,但未分配空间太大了,怎么释放掉]


用一般的数据库和文件收缩无法释放。

比较急,各位有没有好的办法



--------------------------------------------------------------------------------
xuam 2012-10-19
  • 打赏
  • 举报
回复
DBCC SHRINKFILE (DB_log, n)
极品老土豆 2012-10-19
  • 打赏
  • 举报
回复
....那是未分配的空间。。。

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧