維百tb_o_sg_card修改字段屬性
濰坊中百的項(xiàng)目從2013年3月1日上線以后,有幾個(gè)需求和BUG修改完畢,需要升級(jí)程序,最新版本程序里面需要tb_o_sg_card屬性,此表的數(shù)據(jù)量有2.25億,占用118G空間,維百的服務(wù)器數(shù)據(jù)庫(kù)所在的磁盤(pán)只有98G的空間(上半年計(jì)劃用云存儲(chǔ)),直接執(zhí)行后臺(tái)庫(kù)的腳本提示PRIMARY文件組沒(méi)有空間,tb_o_sg_card在修改屬性時(shí)候日志文件太大,通過(guò)本次對(duì)tb_o_sg_card修改的經(jīng)驗(yàn)提供空間不夠情況修改大表屬性的處理方法:
1、 查詢數(shù)據(jù)庫(kù)中所有表占用的空間大小
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以前處理數(shù)據(jù)備份的表,刪除過(guò)期數(shù)據(jù)的表(tb_o_sg_card_forsum此表只保留本月數(shù)據(jù))
3、 日結(jié)以后收縮數(shù)據(jù)庫(kù)
4、 備份tb_o_sg_card數(shù)據(jù)
5、 Truncate table tb_o_sg_card表
6、 當(dāng)日數(shù)據(jù)上傳完畢以后修改tb_o_sg_card的表的屬性,備份表的觸發(fā)器和索引
7、 用批處理修改門(mén)店前置機(jī)服務(wù)器上tb_o_sg_card表的屬性,如果門(mén)店比較多,可以分多個(gè)批處理進(jìn)行操作
8、 查看tb_o_sg_card表里面的數(shù)據(jù),把備份的數(shù)據(jù)恢復(fù)
9、 創(chuàng)建表的觸發(fā)器和索引
10、 核對(duì)tb_o_sg_card的數(shù)據(jù)是否完整,如果完整,刪除備份的表
修改大表屬性的時(shí)候,會(huì)比較慢,并且產(chǎn)生大量的日志,可以利用備份數(shù)據(jù)----truncate表數(shù)據(jù)-----修改表屬性-----刪除索引和觸發(fā)器----恢復(fù)表數(shù)據(jù)---恢復(fù)索引和觸發(fā)器的屬性會(huì)比較快,成功率高。
在刪除tb_o_sg_card_forsum一個(gè)月的數(shù)據(jù)時(shí)用了三個(gè)小時(shí),并且產(chǎn)生了80G的日志,如果希望操作過(guò)程中產(chǎn)生較少了的日志,可以做如下操作:
--設(shè)置最小日志記錄模式
alter database set recovery simple
delect from tb_o_sg_card_forsum where c_datetime < ‘20140101’
--恢復(fù)日志記錄模式
alter database set recovery full