SQL Server 2017事务复制禁用后保留复制表数据的方法咨询
在SQL Server 2017中禁用事务复制并保留订阅端数据的操作建议
前置准备
- 确认复制同步状态正常,无未完成事务。可在发布服务器执行以下命令检查:
EXEC sp_replmonitorhelppublication @publisher = '你的发布服务器名', @publication = '目标发布名'; - 备份订阅端
Database2,确保数据安全(虽然操作不会删除用户数据,但备份是稳妥的前置步骤)。 - 禁用SQL Server代理中与该复制相关的同步作业,避免操作过程中触发同步。
订阅端(Database2)操作:解除复制关联但保留用户对象
在Database2所在服务器执行脚本,清除复制相关系统对象,保留用户表、数据、键等:
USE Database2; EXEC sp_subscription_cleanup @publisher = '发布服务器名', @publisher_db = 'Database1', @publication = '目标发布名';
发布端与分发端清理
删除对应发布
在发布服务器执行:
USE Database1; EXEC sp_droppublication @publication = '目标发布名';
清理分发端(可选)
如果该分发服务器仅服务于本次复制,可执行以下命令删除分发数据库和分发配置:
USE master; -- 删除分发数据库 EXEC sp_dropdistributiondb @database = '你的分发数据库名'; -- 删除分发服务器配置 EXEC sp_dropdistributor @no_checks = 1;
若分发服务器还有其他复制任务,跳过此步骤即可。
后续验证
- 检查
Database2中的用户表、数据、主键、外键等对象是否完整。 - 确认订阅端系统表(如
MSreplication_subscriptions)已被清除,复制相关后台进程不再运行。
关键注意事项
- 禁止使用SSMS图形界面的“删除订阅并删除订阅数据库中的对象”选项,该操作会直接删除订阅端的用户表和数据。
- 操作全程确保无其他进程修改
Database2中的复制表,避免数据不一致。
内容的提问来源于stack exchange,提问作者user2608654
相关产品推荐
相关产品推荐

