码迷,mamicode.com
首页 > 数据库 > 详细

SQL Server 数据自动化运维

时间:2018-02-07 19:48:02      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:alt   src   int   重建   重建表   ext   遇到   日期   数据库   

SQL Server 数据自动化运维
说到当前的数据库类型,当前主要流行Mysql、Sql Server、Oracle等三种,区别相信大家都已经非常熟悉了,所以在此就不多介绍了,今天我们主要介绍一下我近期工作中遇到的问题,我们的门禁数据库数据存放的数据量过大,导致从页面上操作及查询非常缓慢影响日常操作效率,由于领导要求数据需要保留,方便日后查询,
所以我们一般通过日期判断指定日期以外的数据删除这个不可以实现了,当然换个思路想将指定的日期以外的数据插入到备份数据库中,然后再根据指定日期外的数据删除,其实这样的思路也是对的,但是这样的话,我需要执行两条语句,如果第一条失败了,第二条肯定无法执行了,所以我们按照这个思路将两条命令整合成一条,接下来我们模拟一下。
我们表中有300多万条数据,有点多,查询肯定慢
技术分享图片
我们为了保证数据在操作过程中安全性,我们需要对表进行备份;
我们将cardinfo表复制一份,然后再操作;
select * into cardinfo_temp from cardinfo
技术分享图片
我们查看
select * into cardinfo_temp from DB.dbo.cardinfo
技术分享图片
接下来我们就准备开始了操作前准备了
我们需要创建一张表做为数据备份的表,当然既然是备份,表的结构都必须是一样的,所以我们还是按照以上方法,复制一张备份表,然后清空数据,
select * into cardinfo_bak from DB.dbo.cardinfo
技术分享图片
然后清空备份表中的数据
delete cardinfo_bak
技术分享图片
我们确认数据
select count(*) from cardinfo_bak
技术分享图片
我们要把3个月以外的数据全部移动到备份的表中

delete from cardinfo
output deleted.* into cardinfo_bak
where card_date_ts < dateadd(mm,-3,getdate())

技术分享图片
我们开始执行,执行有报错
技术分享图片
我们根据报错有两种解决方法,但是我们用第二种;
2.删除并重建表DB_Bak.dbo.acc_monitor_log,重建时将表中原来的标识列上的标识(identity)属性去除,所以我们来修改,右击表---设计---ID---表示属性---将是更改为否
技术分享图片
然后保存后,我们再次执行,执行成功;
技术分享图片
接下来我们统计数据

select count(*) from cardinfo 
select count(*) from cardinfo_bak

技术分享图片
如果我们想操作三个月以内的数据的话,

delete from cardinfo
output deleted.* into cardinfo_bak
where card_date_tls between dateadd(mm,-3,getdate()) and getdate();

再次我们的环境就介绍到这了,有问题可以给我留言,谢谢

SQL Server 数据自动化运维

标签:alt   src   int   重建   重建表   ext   遇到   日期   数据库   

原文地址:http://blog.51cto.com/gaowenlong/2069939

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!