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

求指点。
数据库空间已满导致数据无法入库;经过数据库清理,但是占用的空间就是不能释放(收缩数据库时提示进程死锁,百度了很多方法也没有成功)
服务器情况简介如下:IBM3850 、内存8GB、操作系统为Win 2003 Server 、数据库SQL Server 2000 + SP4 、整个磁盘阵列已经12块硬盘已经全部装满,短期内增加空间不现实。
求大牛指点迷津!
------解决方案--------------------
sql2000还真没用过

简单的办法就是先删除一部分现有的不用的数据(当然要备份出来)

腾出来一部分表空间
------解决方案--------------------
1、把数据库恢复模式切换成简单模式;
2、对大表,可以对前50个,做重建索引,然后收缩数据库文件。
3、导出历史数据到另外可用的服务器,然后清理一下。再考虑是否有必要倒回来。
------解决方案--------------------
首先解决你的block问题
然后再去收缩
如果效果不明显 可以写一个循环执行,因为有些资源正在被使用
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


还有就是用DBCC CHECKDB()检查数据库是否存在问题
使用dbcc checkdb 的repair_rebuild参数:不丢失数据
不行的话使用repair_allow_data_loss :有可能丢失数据
------解决方案--------------------
做一个完整备份,然后截断日志