1

我需要从 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 发送)——这也很好。

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

4

1 回答 1

2

好吧,如果我正确理解您的要求,您希望数据库中某些表中的数据定期传送到其他地方。

  1. SQL Server 中不可能的事情是从数据库中备份表的子集。所以,这不是一个选择。

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

  3. 除了使用 BCP,我更喜欢 SSIS 包,您将能够在 SSIS 包中执行所有操作(提取文件、添加 where 子句、在 SFTP 上删除文件、调整查询、日志记录、监控等)。
  4. 最后,SQL Server Replication可以用来创建订阅者,只发布你感兴趣的文章(表),你也可以在你的发布中添加where子句。

同样,复制订户数据库也有一些选项。

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

我简短地说,给猫剥皮的方法不止一种,现在你必须决定哪一种最适合你的要求。

于 2018-02-08T22:17:47.400 回答