爱在莫斯科 发表于 2018-10-12 09:15:09

SQL Server 数据自动化运维

  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 Agent服务才可以哦
  我们新建作业

  定义作业名称

  在步骤页面---新建

  定义步骤名称、命令、及数据库信息等

  保存确认

  新家计划---执行时间

  最终完成整个配置

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


页: [1]
查看完整版本: SQL Server 数据自动化运维