维百tb_o_sg_card修改字段属性
潍坊中百的项目从2013年3月1日上线以后,有几个需求和BUG修改完毕,需要升级程序,最新版本程序里面需要tb_o_sg_card属性,此表的数据量有2.25亿,占用118G空间,维百的服务器数据库所在的磁盘只有98G的空间(上半年计划用云存储),直接执行后台库的脚本提示PRIMARY文件组没有空间,tb_o_sg_card在修改属性时候日志文件太大,通过本次对tb_o_sg_card修改的经验提供空间不够情况修改大表属性的处理方法:
1、 查询数据库中所有表占用的空间大小
select OBJECT_NAME(ID) ,SIZE = sum(reserved) * CONVERT(FLOAT, (SELECT LOW FROM MASTER.DBO.SPT_VALUES WHERE NUMBER = 1 AND TYPE = 'E')) /1024.00/1024.00
from sysindexes
where indid in (0,1,255)
GROUP BY ID
ORDER BY SIZE DESC
2、 TRUNCATE TABLE日志表(tb_log_module、tb_log_err等),drop以前处理数据备份的表,删除过期数据的表(tb_o_sg_card_forsum此表只保留本月数据)
3、 日结以后收缩数据库
4、 备份tb_o_sg_card数据
5、 Truncate table tb_o_sg_card表
6、 当日数据上传完毕以后修改tb_o_sg_card的表的属性,备份表的触发器和索引
7、 用批处理修改门店前置机服务器上tb_o_sg_card表的属性,如果门店比较多,可以分多个批处理进行操作
8、 查看tb_o_sg_card表里面的数据,把备份的数据恢复
9、 创建表的触发器和索引
10、 核对tb_o_sg_card的数据是否完整,如果完整,删除备份的表
修改大表属性的时候,会比较慢,并且产生大量的日志,可以利用备份数据----truncate表数据-----修改表属性-----删除索引和触发器----恢复表数据---恢复索引和触发器的属性会比较快,成功率高。
在删除tb_o_sg_card_forsum一个月的数据时用了三个小时,并且产生了80G的日志,如果希望操作过程中产生较少了的日志,可以做如下操作:
--设置最小日志记录模式
alter database set recovery simple
delect from tb_o_sg_card_forsum where c_datetime < ‘20140101’
--恢复日志记录模式
alter database set recovery full