应用系统数据删除解决方案

需求:

由于公司一些旧系统在开发上线时没有考虑到数据需要备份删除的问题, 导致系统使用了十年之后数据库过大, 需要进行紧急的实时备份删除数据

1. 备份数据到备份库

2. 删除数据

3. 收缩数据库数据文件

因为需要尽量减少对系统的影响, 一般会按一下步骤操作

1. 如为系统不需要实时查询的表(如系统日志表), 则创建新表代替, 把旧表改成TableName_Old然后再执行后续步骤

2. 如表有自增列ID, 曾以自增列ID为查找值进行删除

3. 每次删除固定行数, 以免引起长时间锁表(无论表级或行级, 一般为行级锁)

4. 记录删除时间并输出方便监控

代码如下

declare @st_num int = 1             --Start Position of the Deletion
declare @st_deletion int = 9999     --Row Numer of Every Deletion
declare @Sql1 varchar(5000)         --Backup Data SQL
declare @Sql2 varchar(5000)         --Delete Data SQL
declare @start_time datetime        --For Caculating delete time
declare @end_time datetime          --For Caculating delete time
declare @dur_time int               --For Caculating delete time

while(@st_num<=5000000)

begin
set @Sql1=‘
insert into LinkServer.LinkDB.dbo.LogOld
select *
  from Log where LogID between ‘+ convert(varchar(100),@st_num) + ‘ and ‘ + convert(varchar(100),@[email protected]_deletion)

set @Sql2=‘
delete
  from Log where LogID between ‘+ convert(varchar(100),@st_num) + ‘ and ‘ + convert(varchar(100),@[email protected]_deletion)

/*
Execution
*/
set @start_time=GETDATE()
print @Sql1
exec (@Sql1)
set @end_time=GETDATE()
set @dur_time=DATEDIFF(ss,@start_time,@end_time)
print(‘Finished in ‘ + convert(varchar,@dur_time) + ‘ seconds‘)

set @start_time=GETDATE()
print @Sql2
exec (@Sql2)
set @end_time=GETDATE()
set @dur_time=DATEDIFF(ss,@start_time,@end_time)
print(‘Finished in ‘ + convert(varchar,@dur_time) + ‘ seconds‘)

set @[email protected][email protected]_deletion+1

end

  

时间: 2024-10-11 05:13:17

应用系统数据删除解决方案的相关文章

oracle大批量数据删除解决方案

这段时间系统由于大量历史数据造成应用响应缓慢,需要对大量历史数据做数据迁移,原本计划将原表备份后Create table as 一个新表,量表换名重建索引等解决,但由于服务层的特殊结构,这些表无法做分区,而且这种方式直接会将服务整挂,所以想采用delete掉数据重新压缩表空间和索引方式解决. 预计删除数据量为12个大表,每个表总量为3000W-3亿数据,需要清除2/3的数据,采取步骤如下,以供日后整理 备份数据 备份数据量需要表空间空余500G,现workflow空余表空间只有90G,需要扩展至

关于高并发系统数据幂等的常用技术解决方案

前言介绍 在系统开发过程中,经常遇到数据重复插入.重复更新.消息重发发送等等问题,因为应用系统的复杂逻辑以及网络交互存在的不确定性,会导致这一重复现象,但是有些逻辑是需要有幂等特性的,否则造成的后果会比较严重,例如订单重复创建,这时候带来的问题可是非同一般啊. 什么是系统的幂等性 幂等是数据中得一个概念,表示N次变换和1次变换的结果相同. 高并发的系统如何保证幂等性 查询API 查询的API,可以说是天然的幂等性,因为你查询一次和查询两次,对于系统来讲,没有任何数据的变更,所以,查询一次和查询多

数据异构解决方案缓存一致性和跨服务器查询

缓存一致性和跨服务器查询的数据异构解决方案canal 当你的项目数据量上去了之后,通常会遇到两种情况,第一种情况应是最大可能的使用cache来对抗上层的高并发,第二种情况同样也是需要使用分库 分表对抗上层的高并发...逼逼逼起来容易,做起来并不那么乐观,由此引入的问题,不见得你有好的解决方案,下面就具体分享下. 一:尽可能的使用Cache 比如在我们的千人千面系统中,会针对商品,订单等维度为某一个商家店铺自动化建立大约400个数据模型,然后买家在淘宝下订单之后,淘宝会将订单推 送过来,订单会在4

统一数据同步解决方案

每天进步一点点! 前段时间一个项目需要做数据同步,考虑到数据同步功能在很多地方都会涉及到,所以将功能提炼出来,做成统一的组件,供公司所有的项目使用,在此将实现方案记录下来,希望对其他人有用. 背景: 背景是这样的,互联网公司,做社区O2O产品的,目前需要做一套停车收费系统以及道闸控制系统,我们的产品中心数据肯定放在云端,处理缴费充值等业务:但停车收费系统在部署到物业公司小区,这就涉及到需要将云端的数据同步到局域网的服务器,同时也会涉及到局域网产生的数据同步到云端:而且局域网有可能是联网的,也可能

Redis数据存储解决方案

1.背景1.1 Redis简介 官方网站:http://redis.io/,Redis是REmote DIctionary Server的缩写. Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.它跟 memcached 类似,不过数据可以持久化,而且支持的数据类型很丰富.它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点.从而

分区表的数据删除

问题:堆表按天做了分区,表中只保留最近7天的数据.最近发现此表的数据空间明显比之前大,之前2G:现在6G,持续关注几天表中记录数保持平衡,但数据空间却在进一步增长.对应表所在的文件组也不停在自增长.分析:使用sys.dm_db_index_physical_stats查看表的碎片情况,发现在已删除记录的分区中堆的区碎片(avg_fragmentation_in_percent).数据页总数(page_count)不为零.查看另一个库下此表的备份表(同为分区表,保留最近30天的数据),表的数据空间

大数据分页解决方案

1 编写目的 解决系统需要检索大数据列表时的性能问题,而提出的分页方案 2 术语.定义和缩略语 3 大数据量检索的性能问题分析 大数据量检索的性能存在问题,问题主要包括 3.1 客户端在IE或者cs端数据量过大会导致IE变慢,甚至死锁 现象: IE浏览器崩溃 浏览器白板,停止响应 3.2 客户端--web服务器之间的数据传输量大会导致客户端速度变慢,效率降低 现象: IE浏览器长期在等待时白板 IE 浏览器操作慢 3.3 中间层构造大数据列表会导致中间层性能降低 现象: 并发访问多时,应用服务器

集团性企业数据信息系统解决方案

集团性企业数据信息系统解决方案 总体需求分析 某商业集团是一家集精品百货.时尚百货.精品超市及大卖场.便利店为一体的大型现代化集团.此商业经过10年的发展,目前拥有2家大型百货商场,6家大型综合超市卖场,100多家超市便利店,是以现代企业制度为根基的民营实体商业和现代服务业,并拥有百货.商超.产业.地产四大事业部. 随着企业规模不断扩大,需要处理的业务不可避免的也越来越多,越来越细.那么为了规范管理和信息共享,企业不得不借助于各种业务系统,例如财务系统.OA系统.会员信息系统等等. 随着这些系统

Linux系统 rm 删除命令 “危险”!!!

Linux系统 rm 删除命令(危险) 简述:在linux系统运维工作中rm删除命令,十分危险,因为权限实在太大了,一个不小心就会把整个服务器的数据瞬间删除掉,所以我们要怎么样巧妙的使用rm命令删除文件,并且杜绝误删的情况发生呢? 方法一: 说明:我们可以通过find查找命令,将需要删除的文件查找到后在进行准确无误的删除. 命令行操作: [[email protected] oldboy]# find ./ -type f -name "oldboy" -execrm -f {} \;