以文本方式查看主題 - 昂捷論壇 (http://www.26035.net/bbs/index.asp) -- □-通用類 (http://www.26035.net/bbs/list.asp?boardid=27) ---- 修改大數(shù)據(jù)量表屬性的方法 (http://www.26035.net/bbs/dispbbs.asp?boardid=27&id=9108) |
-- 作者:zhaowencheng -- 發(fā)布時(shí)間:2014/1/5 23:17:47 -- 修改大數(shù)據(jù)量表屬性的方法 維百tb_o_sg_card修改字段屬性
濰坊中百的項(xiàng)目從2013年3月1日上線以后,有幾個(gè)需求和BUG修改完畢,需要升級(jí)程序,最新版本程序里面需要tb_o_sg_card屬性,此表的數(shù)據(jù)量有2.25億,占用118G空間,維百的服務(wù)器數(shù)據(jù)庫所在的磁盤只有98G的空間(上半年計(jì)劃用云存儲(chǔ)),直接執(zhí)行后臺(tái)庫的腳本提示PRIMARY文件組沒有空間,tb_o_sg_card在修改屬性時(shí)候日志文件太大,通過本次對(duì)tb_o_sg_card修改的經(jīng)驗(yàn)提供空間不夠情況修改大表屬性的處理方法: 1、 查詢數(shù)據(jù)庫中所有表占用的空間大小 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ù)備份的表,刪除過期數(shù)據(jù)的表(tb_o_sg_card_forsum此表只保留本月數(shù)據(jù)) 3、 日結(jié)以后收縮數(shù)據(jù)庫 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、 用批處理修改門店前置機(jī)服務(wù)器上tb_o_sg_card表的屬性,如果門店比較多,可以分多個(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的日志,如果希望操作過程中產(chǎn)生較少了的日志,可以做如下操作: --設(shè)置最小日志記錄模式 --恢復(fù)日志記錄模式 |