SQL Server 数据自动化运维 说到当前的数据库类型,当前主要流行Mysql、Sql Server、Oracle等三种,区别相信大家都已经非常熟悉了,所以在此就不多介绍了,今天我们主要介绍一下我近期工作中遇到的问题,我们的门禁数据库数据存放的数据量过大,导致从页面上操作及查询非常缓慢影响日常操作效率,由于领导要求数据需要保留,方便日后查询, 所以我们一般通过日期判断指定日期以外的数据删除这个不可以实现了,当然换个思路想将指定的日期以外的数据插入到备份数据库中,然后再根据指定日期外的数据删除,其实这样的思路也是对的,但是这样的话,我需要执行两条语句,如果第一条失败了,第二条肯定无法执行了,所以我们按照这个思路将两条命令整合成一条,接下来我们模拟一下。 我们表中有300多万条数据,有点多,查询肯定慢 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/8f7a4bc8d037038959c37c86712eb807.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 我们为了保证数据在操作过程中安全性,我们需要对表进行备份; 我们将cardinfo表复制一份,然后再操作; `select * into cardinfo_temp from cardinfo` ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/91e4ea7b5f6f2b36dd4f082f3af72a0c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 我们查看 `select * into cardinfo_temp from DB.dbo.cardinfo` ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/1e54be826199ac14d66bdda1d44089bb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 接下来我们就准备开始了操作前准备了 我们需要创建一张表做为数据备份的表,当然既然是备份,表的结构都必须是一样的,所以我们还是按照以上方法,复制一张备份表,然后清空数据, `select * into cardinfo_bak from DB.dbo.cardinfo` ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/2b90ac5a8520a45d2f1b7aadaa39a0ae.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 然后清空备份表中的数据 `delete cardinfo_bak` ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/a1eb6a6504bdd75eba930787aeb34046.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 我们确认数据 `select count(*) from cardinfo_bak` ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/1ccfc9f6931f9ead91ba5c682e67425d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 我们要把3个月以外的数据全部移动到备份的表中 ``` delete from cardinfo output deleted.* into cardinfo_bak where card_date_ts < dateadd(mm,-3,getdate()) ``` ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/07fcb50d4ed59154e0f117d549f87077.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 我们开始执行,执行有报错 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/ee7f76d4e05a3f0a6f582cdcefb47b5a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 我们根据报错有两种解决方法,但是我们用第二种; 2.删除并重建表DB_Bak.dbo.acc_monitor_log,重建时将表中原来的标识列上的标识(identity)属性去除,所以我们来修改,右击表---设计---ID---表示属性---将是更改为否 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/1f73fe3372238e78605eec861a1d9123.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 然后保存后,我们再次执行,执行成功; ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/44e8e531d73f3f267399665f0abc47b3.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 接下来我们统计数据 ``` select count(*) from cardinfo select count(*) from cardinfo_bak ``` ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/07/ad365742630f5cd67f287d789901cb48.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 如果我们想操作三个月以内的数据的话, ``` delete from cardinfo output deleted.* into cardinfo_bak where card_date_tls between dateadd(mm,-3,getdate()) and getdate(); ``` 我们然后需要将该执行命令通过配置作业来定时执行 我们需要开启SQL Agent服务才可以哦 我们新建作业 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/08/e1317081ebb0998cd1f6338469ba98c6.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 定义作业名称 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/08/712f7b0f4722a7f64e8aabef574edd78.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 在步骤页面---新建 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/08/492c89e8256c502c139220a8ab60091f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 定义步骤名称、命令、及数据库信息等 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/08/57d54e840d4b55fc45eada73a729e913.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 保存确认 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/08/4c43d3b5e0e506cbedfecdbe57397cf8.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 新家计划---执行时间 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/08/903ae9281a2fded8fe98c2dab7cc2995.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 最终完成整个配置 ![SQL数据自动化运维](https://s4.51cto.com/images/blog/201802/08/d9aef834c740499b15e4c0f940bfb43c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 再次我们的环境就介绍到这了,有问题可以给我留言,谢谢