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