如何从 SQL 服务器数据库保存存档
How do I save archive from SQL Server database
我在 SQL 服务器中有一个数据库。基本上,table 由许多 XML 文档组成,这些文档代表给定时间的相同 table 数据(如备份历史记录)。切断所有旧(3 个月)备份、从数据库中删除并将它们存档的最佳方法是什么?
SQL 服务器中没有开箱即用的导出。
假设
- 您的 table 可能很大,因为它看起来每分钟都像您和 table 的图像。
- 如果您想从 SQL 服务器内部完成所有操作。
然后我建议分块进行清理。
SQL 中按块删除的通常过程是结合使用 DELETE 和 OUTPUT 语句。
归档和删除的最简单方法是将 OUTPUT 输出到另一个数据库中的 table,仅用于此目的。
所以你的步骤是:
- 创建一个新数据库(ArchiveDatabase)
- 在 ArchiveDatabase (ArchiveTable) 中创建一个与要删除的 table 结构相同的存档 table。
- 在 while 循环中执行 DELETE/OUTPUT
- 备份 ArchiveDatabase
- 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
我在 SQL 服务器中有一个数据库。基本上,table 由许多 XML 文档组成,这些文档代表给定时间的相同 table 数据(如备份历史记录)。切断所有旧(3 个月)备份、从数据库中删除并将它们存档的最佳方法是什么?
SQL 服务器中没有开箱即用的导出。
假设
- 您的 table 可能很大,因为它看起来每分钟都像您和 table 的图像。
- 如果您想从 SQL 服务器内部完成所有操作。
然后我建议分块进行清理。 SQL 中按块删除的通常过程是结合使用 DELETE 和 OUTPUT 语句。 归档和删除的最简单方法是将 OUTPUT 输出到另一个数据库中的 table,仅用于此目的。
所以你的步骤是:
- 创建一个新数据库(ArchiveDatabase)
- 在 ArchiveDatabase (ArchiveTable) 中创建一个与要删除的 table 结构相同的存档 table。
- 在 while 循环中执行 DELETE/OUTPUT
- 备份 ArchiveDatabase
- 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