从一台 sql 服务器自动推送到另一台服务器
Push from one sql server to another autonomously
我有一个应用程序,每次更新 DB#1 table 中的某个条目时,它要求我从 DB#1 中提取某些信息并将其推送到 DB#2。轮询速率不需要非常快,但它可能不应低于 1 秒。
我正计划使用 C++ 连接器库编写一个小型服务,但我担心会给 DB#1 带来太多负载。有没有更有效的方法来做到这一点?例如 SQL 脚本中的内置功能?
您可以在 DB1 中创建触发器,并在 DB1 和 DB2 之间创建数据库链接。因此,您可以在 DB1 中本地调用触发器并将数据直接传输到 DB2。
实现此目的的方法有很多,因此可能是您更喜欢的其他因素推动了该方法。
如果 SQL 服务器数据库在同一服务器实例上:
- 在推送到 DB2 表的 DB1 表上触发
- 存储过程(在 DB1 或 DB2 中)使用
MERGE
识别更改并将它们同步到 DB2,然后使用 SQL 作业按计划调用该过程
- 在数据库和所需表上启用更改跟踪,然后使用存储过程 + SQL 作业发送更改而不对源表进行任何查询
如果在不同的实例或服务器上(但如果在同一实例上也可以工作):
- 用于识别更改并推送到 DB2 的 SSIS 包(奖金可以与更改数据捕获一起使用)
- 合并复制以同步更改
- AlwaysOn 可用性组同步整个数据库
- 微软同步框架
我对您的偏好或舒适度一无所知,我可能会从合并复制开始 - 设置起来可能有点棘手和乏味,但性能非常好。
我有一个应用程序,每次更新 DB#1 table 中的某个条目时,它要求我从 DB#1 中提取某些信息并将其推送到 DB#2。轮询速率不需要非常快,但它可能不应低于 1 秒。 我正计划使用 C++ 连接器库编写一个小型服务,但我担心会给 DB#1 带来太多负载。有没有更有效的方法来做到这一点?例如 SQL 脚本中的内置功能?
您可以在 DB1 中创建触发器,并在 DB1 和 DB2 之间创建数据库链接。因此,您可以在 DB1 中本地调用触发器并将数据直接传输到 DB2。
实现此目的的方法有很多,因此可能是您更喜欢的其他因素推动了该方法。
如果 SQL 服务器数据库在同一服务器实例上:
- 在推送到 DB2 表的 DB1 表上触发
- 存储过程(在 DB1 或 DB2 中)使用
MERGE
识别更改并将它们同步到 DB2,然后使用 SQL 作业按计划调用该过程 - 在数据库和所需表上启用更改跟踪,然后使用存储过程 + SQL 作业发送更改而不对源表进行任何查询
如果在不同的实例或服务器上(但如果在同一实例上也可以工作):
- 用于识别更改并推送到 DB2 的 SSIS 包(奖金可以与更改数据捕获一起使用)
- 合并复制以同步更改
- AlwaysOn 可用性组同步整个数据库
- 微软同步框架
我对您的偏好或舒适度一无所知,我可能会从合并复制开始 - 设置起来可能有点棘手和乏味,但性能非常好。