SQL Server 2012:每月将旧数据从“生产”复制到“存档”-db

Posted

技术标签:

【中文标题】SQL Server 2012:每月将旧数据从“生产”复制到“存档”-db【英文标题】:SQL Server 2012: Copy old data from "Production" to "Archive"-db each month 【发布时间】:2014-07-14 09:04:52 【问题描述】:

将数据从生产表数据移动到表相似的存档表数据的最佳方法是什么

我有一个 SQL Server 2012 数据库,其中包含一些每秒/分钟增长的“大数据”表。因此,为了防止我的数据库表在将来变得越来越大,请求速度变慢。我想从以下位置移动旧数据:

“生产”数据库表 -> 到另一个“归档”数据库表

我一直在研究可以更新“状态”字段以具有 [A] Production-db 或 [B] Archive-db 的视图。这样,当我不想让 A 数据更长时,我可以轻松地使用 "Status" = B 更新旧数据。

    但是这种方法是最好的方法吗?因为它似乎只有在同一个数据库中才能工作。

    如果我有 2 个数据库该怎么办?

    我应该用SELECT INSERT DELETED写一个脚本吗?

    SQL Server 是否有一些内置脚本/计划不会删除数据,而仅传输部分数据而不是全部?

传输数据的速度并不重要,因为它可能每月发生一次。

谢谢

【问题讨论】:

【参考方案1】:

最简单的方法是创建一个 SQL Server 代理作业(根据需要安排它,例如每月一次),然后将数据从生产数据库移动到存档数据库(使用在 SQL 中执行的存储过程服务器代理作业,首先插入存档数据库并从源数据库中删除)。

如果您需要模式高级 ETL 处理(如行级错误控制等),您还可以创建 SSIS(SQL Server 集成服务)包并通过 SQL Server 代理运行该包。但这在您的情况下可能有点矫枉过正。

【讨论】:

【参考方案2】:

通过使用“插入到”语句,您可以在其中选择所需的旧数据进行归档,您可以轻松实现这一点。这是手动方式,您可以根据归档条件将其转换为存储过程。

insert into *destinationArchiveDB*
    select * 
    from *sourceProductionDB*
    where *your archive condition*

例如:

insert into TRC_ARC.dbo.Table1
    select * 
    from TRC.dbo.Table1
    where ProductionDate = 'yyyy-mm-dd'

请记住,源和目标的表结构应该相同,否则不同的 SQL 会报错。

【讨论】:

以上是关于SQL Server 2012:每月将旧数据从“生产”复制到“存档”-db的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中调整每月温度?

从 Paradox 到 Borland C++ 5 中的 SQL Server

SQL Server 2017 触发器将旧值作为更新后的新值

SQL Server:每月循环一次值到整个月

自动将数据从 Access 插入 Sql server

将数据库从 SQL Server 2012 转移到 SQL Server 2008 [关闭]