以文本方式查看主题

-  昂捷论坛  (http://www.enjoyit.com.cn/bbs/index.asp)
--  □-通用类  (http://www.enjoyit.com.cn/bbs/list.asp?boardid=27)
----  修改大数据量表属性的方法  (http://www.enjoyit.com.cn/bbs/dispbbs.asp?boardid=27&id=9108)

--  作者:zhaowencheng
--  发布时间:2014/1/5 23:17:47
--  修改大数据量表属性的方法
 

维百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