我有一个非常大的表格,每个季度都会填充大约一亿条记录。
我使用this script手动将数据从现有表格移动到另一个数据库,以最小化备份大小,并在执行查询时卸载生产数据库。
是否有更好的方法,例如,一些定期脚本可以有效地将数据从生产数据库移动到其他数据库,然后每天或每周从源数据库中删除记录?
请注意,由于向此表格插入的数量很高,我的日志文件正在迅速增长,而且当我将数据移动到归档数据库时,DELETEs也将被记录。
谢谢
我有一个非常大的表格,每个季度都会填充大约一亿条记录。
我使用this script手动将数据从现有表格移动到另一个数据库,以最小化备份大小,并在执行查询时卸载生产数据库。
是否有更好的方法,例如,一些定期脚本可以有效地将数据从生产数据库移动到其他数据库,然后每天或每周从源数据库中删除记录?
请注意,由于向此表格插入的数量很高,我的日志文件正在迅速增长,而且当我将数据移动到归档数据库时,DELETEs也将被记录。
谢谢
让我总结一下需求:
为了减小备份文件大小,您需要将数据移动到另一个数据库中。
关于日志记录,您需要查看最少日志规则并确保您正在遵循它们。确保您插入的数据库的恢复模型是简单或批量日志记录恢复模型。
对于插入存档数据,您需要禁用非聚集索引(并在插入完成后重建它们),如果有聚集索引,则利用跟踪标志610,并在目标表上放置表锁定。还有许多链接中的规则需要检查,但这些是基础知识。
删除没有最小日志记录,但可以使用top子句分块删除以尽量减少日志文件增长。基本思路是(在删除期间切换到简单恢复模型以限制文件增长):
SELECT NULL;
WHILE @@ROWCOUNT > 0
DELETE TOP (50000) FROM TABLE WHERE Condition = TRUE;
您有没有考虑使用SSIS来完成此任务。我使用SSIS按顺序进行归档和备份。您也可以在tsql任务中使用相同的脚本,并使用代理程序进行调度。或者您可以仅使用代理程序,并将脚本粘贴到其中。
http://technet.microsoft.com/en-us/library/dd578580(v=sql.100).aspx
http://msdn.microsoft.com/en-us/library/ms345146(v=sql.90).aspx
定期移动数据,您可以使用SQL Server作业调度功能来运行SSIS软件包。也可以使用数据转换服务(DTS)。