我需要从 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 发送)- 这也很好。
在这种情况下推荐的方法是什么?
最佳答案
好吧,如果我正确理解您的要求,您希望定期将数据库中某些表中的数据传送到其他地方。
在 SQL Server 中不可能的事情是从数据库中备份表的子集。所以,这不是一个选择。
既然您已经提到您将使用 SFTP 发送数据,那么使用 BCP 命令提取数据是一种选择,但 BCP 命令的性能可能会或可能不会很好,而且肯定不会很好地横向扩展.
- 我更喜欢 SSIS 包,而不是使用 BCP,您将能够在 SSIS 包中执行所有操作(提取文件、添加 where 子句、将文件拖放到 SFTP 上、调整查询、日志记录、监控等)。
- 最后,SQL Server Replication可以用来创建一个订阅者,只发布你感兴趣的文章(表),你也可以在你的发布中添加where子句。
复制订阅者数据库也有一些选项。
- 将对数据客户端的访问权限授予订阅者数据库,无需 用于提取物。
- 在订户数据库上使用 BCP 提取数据, 无需对您的生产服务器施加负载。
- 使用 SSIS 包 从订阅者数据库中提取数据。
- 最后创建一个备份 此订户数据库并将整个备份 (.bak) 文件发送到 SFPT。
简而言之,给猫剥皮的方法不止一种,现在您必须决定哪一种最适合您的要求。
关于sql-server - 每小时备份一部分特定表的最有效和最简单的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48694757/