当前位置: 代码迷 >> Sql Server >> 遇到一个小疑点关于收缩数据库
  详细解决方案

遇到一个小疑点关于收缩数据库

热度:83   发布时间:2016-04-24 09:50:25.0
遇到一个小问题关于收缩数据库
老服务器,硬盘72G。数据库里面是按日期生成表。每天生成一个。从12年到现在。MDF文件60G。数据库程序可能出了问题。自动收缩不能用了。于是手动drop了从12年的表。然后截止日至收缩数据库。
可从早上到现在,观察MDF文件大小没有变化。

早上磁盘空间剩余1.8G。现在1.67G。因为是服务系统,不能停服务。

是否跟不能停服务有关系?或者磁盘剩余空间太小了?

CREATE PROCEDURE dbo.deletetable
AS 
DECLARE @Name as NVARCHAR(128) 
DECLARE curObject CURSOR FOR 
select   name   from   sysobjects   where   type='U'  and name like 'abc2012%'
OPEN curObject 
FETCH NEXT FROM curObject INTO @Name 
WHILE(@@FETCH_STATUS=0) 
BEGIN 
print 'drop table '+@Name
exec('drop table '+@Name)
FETCH NEXT FROM curObject INTO @Name
END 
close curObject 
deallocate curObject
GO

exec deletetable 

然后
 
DUMP     TRANSACTION    **     WITH     NO_LOG   
         
 
BACKUP   LOG   **   WITH   NO_LOG    
   

收缩
 
DBCC SHRINKDATABASE('abc') 
   


------解决思路----------------------
业务不忙的时候,在数据库上右键,直接收缩。
------解决思路----------------------
一直在使用中的数据库有可能会无法压缩。
不要告诉我“不能停服务”这么重要的服务器没有故障处理方案。
断线,挂移到硬盘做数据库备份,删除数据库,重新恢复数据库,上线。
断线期间的业务按故障处理方案对应一下。

------解决思路----------------------
你可以考虑用别的介质(比如移动硬盘、刻碟,甚至U盘或者磁带)把一些历史数据移到一个新库,把辛苦备份出来拷走,再把数据库和本地磁盘的一些七七八八的清掉。但是这也不是根本解决的方法,最好还是加存储吧。反正你这规模的也不多钱
------解决思路----------------------
如果可能的话 ,lz 可以考虑加一块磁盘上去,新建一个文件在新磁盘上,将一些新建立的表都放到新磁盘上。
当然能暂停一下服务,直接换一块磁盘当然是最好不过了。 

建议 :磁盘太老了,还是换一个磁盘来的干净。 5年以上的磁盘,如果有条件,一般是建议更换的。要是真的坏了,会比较麻烦。 


------解决思路----------------------
才跑3年不到就硬盘满了,明显估计不足。这样重要的服务器升级硬件是完全必要的。
现在有计划地停一下是小麻烦,真到完全故障了就是大麻烦。
其实你不应该删数据,用当时的情况更容易说服客户进行硬件升级的。
  相关解决方案