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

标签 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. 在 SQL Server 中不可能的事情是从数据库中备份表的子集。所以,这不是一个选择。

  2. 既然您已经提到您将使用 SFTP 发送数据,那么使用 BCP 命令提取数据是一种选择,但 BCP 命令的性能可能会或可能不会很好,而且肯定不会很好地横向扩展.

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

复制订阅者数据库也有一些选项。

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

简而言之,给猫剥皮的方法不止一种,现在您必须决定哪一种最适合您的要求。

关于sql-server - 每小时备份一部分特定表的最有效和最简单的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48694757/

相关文章:

Azure 长期每日备份

使用临时表的 SQL Server 连接上下文不能在使用 SqlDataAdapter.Fill 调用的存储过程中使用

c# - 避免没有参数的SQL注入(inject)

mysql - 使用 MysqlBackup.dll 导入 mySql 数据库后,所有数据库都是乱码

php - 错误值默认 ENUM Mysql 类型

java - 如何使用 hashmap 通过数据库检索不同 editText 的值

mysql - 如何将现有数据库导入到我的 db.py 模型中?

sql - LEFT JOIN 导致重复结果

c# - 将 ASP.NET 网站连接到 SQL 数据库

node.js - nextjs做一个API请求正常吗?