遇到一个小问题关于收缩数据库

tyqhang 2014-10-22 11:10:43
老服务器,硬盘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') 


...全文
180 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-10-23
  • 打赏
  • 举报
回复
一直在使用中的数据库有可能会无法压缩。
不要告诉我“不能停服务”这么重要的服务器没有故障处理方案。
断线,挂移到硬盘做数据库备份,删除数据库,重新恢复数据库,上线。
断线期间的业务按故障处理方案对应一下。
卖水果的net 2014-10-23
  • 打赏
  • 举报
回复
业务不忙的时候,在数据库上右键,直接收缩。
Tiger_Zhao 2014-10-23
  • 打赏
  • 举报
回复
才跑3年不到就硬盘满了,明显估计不足。这样重要的服务器升级硬件是完全必要的。
现在有计划地停一下是小麻烦,真到完全故障了就是大麻烦。
其实你不应该删数据,用当时的情况更容易说服客户进行硬件升级的。
Mr_Nice 2014-10-23
  • 打赏
  • 举报
回复
如果可能的话 ,lz 可以考虑加一块磁盘上去,新建一个文件在新磁盘上,将一些新建立的表都放到新磁盘上。 当然能暂停一下服务,直接换一块磁盘当然是最好不过了。 建议 :磁盘太老了,还是换一个磁盘来的干净。 5年以上的磁盘,如果有条件,一般是建议更换的。要是真的坏了,会比较麻烦。
發糞塗牆 2014-10-23
  • 打赏
  • 举报
回复
你可以考虑用别的介质(比如移动硬盘、刻碟,甚至U盘或者磁带)把一些历史数据移到一个新库,把辛苦备份出来拷走,再把数据库和本地磁盘的一些七七八八的清掉。但是这也不是根本解决的方法,最好还是加存储吧。反正你这规模的也不多钱
tyqhang 2014-10-23
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
一直在使用中的数据库有可能会无法压缩。 不要告诉我“不能停服务”这么重要的服务器没有故障处理方案。 断线,挂移到硬盘做数据库备份,删除数据库,重新恢复数据库,上线。 断线期间的业务按故障处理方案对应一下。
有处理办法。通知客户太麻烦。所以轻易不想停服务。 唉,尽早看了下,经过17个小时的收缩,从60G收缩到17G。 有没有办法自动删表?类似我上面的这种。只保留90天的记录。(库是每天增加一个表以“abc日期”命名)
tyqhang 2014-10-22
  • 打赏
  • 举报
回复
补充:win2003, sql server 2000

22,301

社区成员

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

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