不截断或删除订户数据库表的事务复制设置
Transactional Replication setup without truncating or dropping the subscriber database tables
假设在 SQL 服务器中,我有一个发布者数据库 DatabaseA,我创建了它的副本并将其恢复到另一个名为 DatabaseB 的 SQL 服务器中。现在,如果我想在 DatabaseA 和 DatabaseB 之间设置事务复制,那么我是否可以在不删除或截断订阅方端的表的情况下执行此操作。如果这个技巧可行,请提出建议。
我已经使用初始化数据库备份的方法解决了这个场景。此外,我发现如果发布者和订阅者数据库是在同一个 SQL 服务器实例中创建的,那么它允许在订阅者数据库上进行 DDL 操作。然而,如果我们在任何其他 SQL 服务器实例中设置订阅者数据库,则它不允许任何 DDL 操作并给出以下错误:
Msg 4929, Level 16, State 1, Line 5
Cannot alter the table 'AR_ACCESSRIGHT' because it is being published for
replication.
Msg 3727, Level 16, State 0, Line 5
Could not drop constraint. See previous errors.
Msg 1779, Level 16, State 0, Line 12
Table 'AR_ACCESSRIGHT' already has a primary key defined on it.
Msg 1750, Level 16, State 0, Line 12
Could not create constraint or index. See previous errors.
我使用 SQL Server 2019 来完成此操作。
假设在 SQL 服务器中,我有一个发布者数据库 DatabaseA,我创建了它的副本并将其恢复到另一个名为 DatabaseB 的 SQL 服务器中。现在,如果我想在 DatabaseA 和 DatabaseB 之间设置事务复制,那么我是否可以在不删除或截断订阅方端的表的情况下执行此操作。如果这个技巧可行,请提出建议。
我已经使用初始化数据库备份的方法解决了这个场景。此外,我发现如果发布者和订阅者数据库是在同一个 SQL 服务器实例中创建的,那么它允许在订阅者数据库上进行 DDL 操作。然而,如果我们在任何其他 SQL 服务器实例中设置订阅者数据库,则它不允许任何 DDL 操作并给出以下错误:
Msg 4929, Level 16, State 1, Line 5
Cannot alter the table 'AR_ACCESSRIGHT' because it is being published for
replication.
Msg 3727, Level 16, State 0, Line 5
Could not drop constraint. See previous errors.
Msg 1779, Level 16, State 0, Line 12
Table 'AR_ACCESSRIGHT' already has a primary key defined on it.
Msg 1750, Level 16, State 0, Line 12
Could not create constraint or index. See previous errors.
我使用 SQL Server 2019 来完成此操作。