使用SQL SERVER存储过程实现历史数据迁移

今天讲下软件开发中最常见的历史数据迁移方式。在讲迁移之前,先简单介绍下几个基本概念。

1、什么是历史数据迁移?

简单直白地说:就是将一些创建时间比较久而且不常用的历史数据,存储到另一个地方(可以是另一个数据,也可以是另一个表),一般历史数据迁移的数据,都是不会更改了的数据,后续只可能需要查询统计而已。

2、历史数据迁移的目的

减少在用数据库的数量,因为数据量越大,数据库操作数据(包括:查询、排序等等)的时间也就越长,当一个表的数据达到上千万级以上,再来个多条件多表查询的时候,是会有响应速度慢的可能。(因为不同开发人员写的逻辑,不可能保障每个SQL都是高效率执行的SQL)

所以及时迁移走一些历史数据,是对整个系统性能的提升是有一定好处的。

3、什么时候需要做历史数据迁移?

最简单的情况,就是你感觉程序有变慢的趋势,那就可以开始考虑历史数据迁移了。

原则上,小企业服务器不多,硬件配置也不是很高的情况下,单表500万以上的数据,最好就开始慢慢迁移,别动不动就等到几千万的数据才开始迁移。

根据产生数据量的大小判断,一般保持1年左右的业务数据即可,一年前的历史数据都迁入历史上数据库。如果每天产生的数据量实在太大的话,一般就需要考虑自动分表存储,当然如果没做这个的话,可以在不影响日常业务的情况下,实时在用业务数据库只保留最近3-6个月的数据。

4、数据迁移的基本思路

1)、第一次迁移创建一个一模一样的表结构(只要第一次迁移前创建即可)

2)、按照数据的创建时间排序,把最早的数据N条数据查出,同时插入到历史数据表中。

 insert into ...  select  from

3)、检测插入数据的准确性,一定要保证是N条没错。之后删除在用的业务数据库。

4)、当迁移数据中途有误时,终止程序,但不能删除在用数据库,需要开发人员核对数据。

5)、根据迁移的对性能的影响,N不能太多,最多一次5W到10W条吧(根据服务器的性能配置,推荐一次迁移1W至5W条数据影响较小)。如果要迁移大量数据,可以考虑分批执行。

5、数据迁移存储过程代码示例

代码如下:(无需过多解释,很简单的代码,一看就懂)

USE [Tyingsoft.GLPS]  
GO
/****** Object:  StoredProcedure [dbo].[TY_SP_ApiRequestToHis]    Script Date: 2021-09-16 15:35:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:	       <feitianxinhong>
-- Create date:    <2021-08-18>
-- Last Edit date: <2021-09-06>
-- Description:	   <接口请求记录表GLPS_APIREQUEST数据迁移>
-- =============================================
ALTER PROCEDURE [dbo].[TY_SP_ApiRequestToHis]
	-- Add the parameters for the stored procedure here
	@PreCountN int = 2000     --每次执行的条数N
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	declare @tableDataCount int;          --迁移前的数据条数
	declare @tableDataCountHis int;       --迁移前历史数据库的数据条数
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在SQL Server中,进行月结转的存储过程可以根据具体的业务需求进行设计和实现。一种常见的做法是创建一个存储过程,该存储过程包含了月结转的逻辑。具体的步骤可以包括以下几个方面: 1. 创建一个新的表或者视图来存储月结转后的数据。这个表或者视图可以根据业务需求来设计,用于存储月结转后的结果数据。 2. 在存储过程中,使用适当的SQL语句来计算和更新需要进行月结转的数据。这可能涉及到对多个表进行查询和更新操作,以及一些计算和聚合操作。 3. 在存储过程中,使用事务来确保月结转的操作是原子性的,即要么全部成功,要么全部失败。这可以通过在存储过程的开始和结束处使用BEGIN TRANSACTION和COMMIT或者ROLLBACK语句来实现。 4. 可以考虑在存储过程中添加一些错误处理的逻辑,以便在出现错误时能够进行适当的处理和回滚。 需要注意的是,具体的月结转逻辑和实现方式会根据业务需求和数据结构的不同而有所差异。因此,在设计和实现月结转的存储过程时,需要根据具体情况进行调整和优化。同时,建议在进行任何数据库操作之前,先备份数据以防止意外情况的发生。 #### 引用[.reference_title] - *1* *2* [使用SQL SERVER存储过程实现历史数据迁移](https://blog.csdn.net/feitianxinhong/article/details/120378016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SqlServer存储过程详解](https://blog.csdn.net/weixin_55909413/article/details/114767079)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值