如何从 SQL 服务器数据库保存存档

How do I save archive from SQL Server database

我在 SQL 服务器中有一个数据库。基本上,table 由许多 XML 文档组成,这些文档代表给定时间的相同 table 数据(如备份历史记录)。切断所有旧(3 个月)备份、从数据库中删除并将它们存档的最佳方法是什么?

SQL 服务器中没有开箱即用的导出。

假设

  • 您的 table 可能很大,因为它看起来每分钟都像您和 table 的图像。
  • 如果您想从 SQL 服务器内部完成所有操作。

然后我建议分块进行清理。 SQL 中按块删除的通常过程是结合使用 DELETE 和 OUTPUT 语句。 归档和删除的最简单方法是将 OUTPUT 输出到另一个数据库中的 table,仅用于此目的。

所以你的步骤是:

  1. 创建一个新数据库(ArchiveDatabase
  2. ArchiveDatabase (ArchiveTable) 中创建一个与要删除的 table 结构相同的存档 table。
  3. 在 while 循环中执行 DELETE/OUTPUT
  4. 备份 ArchiveDatabase
  5. TRUNCATE ArchiveTable table 在 ArchiveDatabase

DELETE/OUTPUT 循环看起来像

declare @RowsToDelete int = 1000 
declare @DeletedRowsCNT int = 1000 

while @DeletedRowsCNT = @RowsToDelete 
begin 
    delete top (@RowsToDelete) 
    from MyDataTable
    output deleted.* into ArchiveDatabase.dbo.ArchiveTable
    where dt < dateadd(month, 3, getdate())
    set @DeletedRowsCNT = @@ROWCOUNT
end