今天接到一个任务,给一台SQLSERVER数据库瘦身,数据库装在F盘,F盘总容量170G,SQLSERVER,占了156G。还剩14个G左右。主要问题是有个数据库例如叫DataBase1吧,有一个表的很多备份文件,按月备份的。例如dbo.表1_bak_200801,dbo.表1_bak_200802等,每个备份表里的数据大概都在1500W-到2500W之间。经理要求是:把这些数据弄下来,刻成盘,数据瘦身!
自己写了个程序,测试到以下数据:
1每个表中记录数为1500W-2500W之间
2每个表中主要有varchar,int,datetime
3每150W条数据约占600MB空间
最初方案:将每个表倒成TXT,然后将TXT拿下来,收缩数据库。但是这种方案很快就被否决了,原因是表中有个字段是Content,里面包括汉字,各种标点符号。如果倒成TXT的话,假设Content里包含回车符或者换行符就很麻烦!所以轻易不要倒成TXT!
最终方案:在数据库上新建一个库,库名就是那些备份表的名字,然后通过数据库间的数据导出,将备份表导入到另一库中,然后用以下代码清空日志,因为,导入数据也相当于INSERT操作,会产生大容量的日志文件:
---Sql Server 2008 使用 DBCC SHRINKFILE (日志文件名,10) 来清空日志
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE RT_SMS -- 要操作的数据库名
SELEC