记录:SQLServer将近⼀亿⾏数据的清理过程
昨天下午,⽼客户到我,说考勤系统⾮常卡,数据库11个G的容量,光每天备份都很头疼。
⼏年前,考勤系统跟OA对接的项⽬是我做的,⼤致有⼀定了解,所以听到这个消息,我第⼀感觉是考勤机故障:同⼀条打卡记录,重复写⼊数据库。这个也是很多⽼式考勤系统的通病。
于是,祭出远程连接神器,查询分析器⾥⼀看:9465万⾏数据。
于是,想当然的使⽤ Delete 去删除过期的考勤数据。此处省略不表。
接下来关闭远程连接神器,估摸⼏个⼩时之后再连接进去查看结果。
时钟滴答滴答,⼏个⼩时之后,查看结果,发现报错:“数据库的事务⽇志已满。若要查明⽆法重⽤⽇志中的空间的原因,请参阅
sys.databases中的log_reuse_wait_desc列"。
想起来了,delete 是全表扫描,full log,这样肯定会爆掉。
truncate的数据如何恢复
于是,只能单独分表,操作如下:
1、有⽤的数据单独插⼊⼀个新表,select into new_table where date>=''  ,由于使⽤了索引,,⼏百万⾏的数据也就花了⼏秒时间。
2、truncate table,不记录⽇志,这样才可以操作,将近⼀亿⾏的数据,秒删。
3、再⽤单独的新表还原回去。
The End

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。