查看: 1379|回复: 0

[SQLServer] SQL Server 数据自动化运维

发表于 2018-3-10 08:00:01

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

  1. delete from cardinfo
  2. output deleted.* into cardinfo_bak
  3. where card_date_ts < dateadd(mm,-3,getdate())
复制代码

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

  1. select count(*) from cardinfo
  2. select count(*) from cardinfo_bak
复制代码

SQL数据自动化运维
如果我们想操作三个月以内的数据的话,

  1. delete from cardinfo
  2. output deleted.* into cardinfo_bak
  3. where card_date_tls between dateadd(mm,-3,getdate()) and getdate();
复制代码

我们然后需要将该执行命令通过配置作业来定时执行
我们需要开启SQL Agent服务才可以哦
我们新建作业
SQL数据自动化运维
定义作业名称
SQL数据自动化运维
在步骤页面---新建
SQL数据自动化运维
定义步骤名称、命令、及数据库信息等
SQL数据自动化运维
保存确认
SQL数据自动化运维
新家计划---执行时间
SQL数据自动化运维
最终完成整个配置
SQL数据自动化运维

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



回复

使用道具 举报