每小时备份一部分特定表格的最有效和最简单的方法

时间:2018-02-08 21:04:10

标签: sql-server database database-backups redgate database-scripts

我需要从SQL Server数据库创建一些特定表的每小时.SQB备份文件,每个表都使用WHERE子句进行过滤。例如,我需要这些数据:

SELECT * FROM table1 WHERE pk_id IN (2,5,7)
SELECT * FROM table2 WHERE pk_id IN (2,5,7)
SELECT * FROM table3 WHERE pk_id IN (2,5,7)
SELECT * FROM table4 WHERE pk_id IN (2,5,7)

源数据库上的表的结构可能会随时间而变化,例如:可以添加或删除列,添加索引等

一种选择是在同一个SQL Server实例上的某个登台数据库中执行某种导出,脚本生成等。除了效率之外,每次在目标数据库上删除或截断表都没有问题。简而言之,我希望将表的模式和数据都复制到目标数据库。这完全可以接受。

另一种方法是从源数据库创建.SQB备份。因为.SQB文件就是我真正需要的东西(它将被发送给SFTP) - 那也没关系。

这种情况下的推荐方法是什么?

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的要求,您需要将数据库中某些表的数据定期发送到其他地方。

  1. SQL服务器中无法实现的功能是从数据库中备份表的子集。所以,这不是一个选择。

  2. 由于您已经提到过您将使用SFTP发送数据,因此使用BCP命令提取数据是一种选择,但BCP命令可能会或可能不会很好地执行,并且它肯定不能很好地扩展。

  3. 我更喜欢使用BCP,而不是SSIS包,您可以在SSIS包中完成所有操作(提取文件,添加where子句,在SFTP上删除文件,调整查询,记录,监视等)。
  4. 最后,SQL Server Replication可用于创建订阅者,仅发布您感兴趣的文章(表格),还可以在您的出版物中添加where子句。
  5. 同样,复制订户数据库有一些选项。

    • 无需访问您的数据客户端到您的订阅者数据库 提取物。
    • 在订阅者数据库上使用BCP来提取数据, 无需在生产服务器上加载。
    • 使用SSIS包 从订户数据库中提取数据。
    • 最后创建一个备份 此订户数据库并将整个备份(.bak)文件发送到 SFPT。

    我认为有一种方法可以给猫皮肤,现在你必须决定哪种方法最适合你。