Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何处理此复制场景?_Sql Server_Database_Replication_Database Replication_Transactional Replication - Fatal编程技术网

Sql server 如何处理此复制场景?

Sql server 如何处理此复制场景?,sql-server,database,replication,database-replication,transactional-replication,Sql Server,Database,Replication,Database Replication,Transactional Replication,假设有一些数据库:p、S1、S2、S3等 p(publisher)有一些表需要在S1、S2和S3(订阅服务器)上复制(克隆和同步)。这些表的副本将是只读的。此外,副本将被S1、S2、S3等中的一些其他表引用(通过外键) 比如说, P有表P.O1和P.O2。S1将有S1.O1\u副本、S1.O2\u副本和S1.OTHER,其中S1.OTHER引用S1.O1\u副本 根据您的经验,在这种情况下使用(据我所知,这是一种基于日志的复制)是否合适?还是我应该更好地使用?尽管如此,我认为触发器可能需要在

假设有一些数据库:p、S1、S2、S3等

p(publisher)有一些表需要在S1、S2和S3(订阅服务器)上复制(克隆和同步)。这些表的副本将是只读的。此外,副本将被S1、S2、S3等中的一些其他表引用(通过外键)

比如说,

  • P有表P.O1P.O2。S1将有S1.O1\u副本、S1.O2\u副本和S1.OTHER,其中S1.OTHER引用S1.O1\u副本
根据您的经验,在这种情况下使用(据我所知,这是一种基于日志的复制)是否合适?还是我应该更好地使用?尽管如此,我认为触发器可能需要在每次添加新订户(数据库)时更新

p中需要复制的表很少更新,但更新操作需要是事务性的,以确保数据一致性(从副本读取的任何数据都应返回请求数据的最新快照)


谢谢:)

您可以为此使用事务复制。我将给出的警告都涉及初始化或重新初始化订阅者。添加文章时,默认行为是在订阅服务器上删除对象。如果有外键指向已复制表的表,则删除操作将失败。你当然可以解决这个问题,但这是需要注意的

还有一件事:我喜欢将订阅的数据库视为只读数据库,因为它减少了我的备份需求(即,如果数据库发生问题,我会创建一个新数据库并重新订阅,而不是恢复订阅的备份)。在订阅服务器上存储新数据时,您不会有这样的奢侈。

谢谢:)正如您所说,有一些方法可以避免在添加新文章后重新初始化快照:,等等。我希望您不介意,在接受答案之前,我想听听其他一些意见。