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的主要内容,如果未能解决你的问题,请参考以下文章
从 Paradox 到 Borland C++ 5 中的 SQL Server