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个月之外的数据所有移动到备份的表中sql
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 Agent服务才能够哦
咱们新建做业
定义做业名称
在步骤页面---新建
定义步骤名称、命令、及数据库信息等
保存确认
新家计划---执行时间
最终完成整个配置运维
再次咱们的环境就介绍到这了,有问题能够给我留言,谢谢ide