【问题标题】:Sql server replication with constraints?带有约束的 Sql server 复制?
【发布时间】:2011-11-09 15:19:15
【问题描述】:

我基本上有一个数据库和一个应用程序,我想做的是创建第二个数据库和第二个几乎独立运行的应用程序。设置起来很容易,但我现在想要的是两者之间的连接,以便配置工具能够同时配置两个设置。举一个简单的例子,我们可以假设整个配置只在数据库中的一个表中完成。所以我基本上看到了两种方法:

修改配置工具,使其同时写入而不是只写入一个服务器,或者使用复制将配置表从一个数据库获取到另一个。

因为我必须深入研究很多不是我自己编写的旧代码,所以到目前为止我更喜欢通过复制来完成这项工作。 由于使用了 SQL Server 2008R2,因此我可以使用快照、事务和合并复制。快照有点糟糕,因为我希望整个事情都是“实时的”,而这不是快照的工作方式。

事务和合并听起来都很不错,我认为两者都是可能的,但我遇到了一些问题。事务复制杀死了订阅者的约束,这是不可接受的。合并复制不会这样做,但是当我运行第二个数据库时,我无法应用合并复制,因为它想删除由于现有约束而无法删除的表。

我试图在没有初始化的情况下设置这两个复制,但这根本不起作用。我想我必须为此设置一些不同的东西,但我不知道是什么。

有没有办法让它像我想要的那样运行,或者有没有我完全错过的另一种可能的方式?

【问题讨论】:

  • 您想在站点之间进行双向复制吗?或者您想在其他网站上报告?整个数据库?一侧可以只读吗?
  • 单向就好,只有几张桌子
  • 还有我的其他问题?
  • 是的,它是只读的,不是用来报告的

标签: sql-server sql-server-2008 replication sql-server-2008-r2


【解决方案1】:

我们使用大规模的事务复制来或多或少地完成您在此处描述的操作,将配置从中心点分发到许多订阅者数据库。

虽然您可能对事务复制提供的默认选项不满意,但您可以对其行为方式进行大量控制。

架构选项位掩码在将文章添加到发布时设置,允许您控制复制到订阅者的 DDL 的几乎所有方面 - 有关完整详细信息,请参阅sp_addarticle 上的文档。复制 GUI 使您可以访问这些设置中的大部分,但您可能需要使用 T-SQL 脚本来获得您想要的内容。我目前无权访问数据库来检查检查、默认和外键约束是否都出现在 GUI 中。

如果确实可以接受单向复制,那么即使默认事务复制也适用于这种情况,因为不需要维护对只读数据库的约束,因为没有插入数据。

【讨论】:

  • 单向确实可以,但仍然不能忽略约束,因为某些要复制的表可能会从订阅服务器上未复制的其他表中引用。 0x200 似乎是我想要的,但在它读取的描述中,它只有在引用的表也被复制时才有效,但事实并非如此。无论如何,感谢您指出配置的可能性。
  • @Flo - 唯一会被复制的约束是在引用其他表的复制表上创建的约束。不会复制引用复制表的其他(非复制)表的约束。
  • @Flo - 如果您需要将非复制表的约束添加到订阅服务器上的复制表,您可能需要稍微不同的事务复制模型,其中订阅服务器上的复制表是独立于复制创建的,并且没有从发布者复制 DDL(使用 0x0 的 schema_option 和 'truncate' 的 pre_create_cmd
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2011-04-19
  • 1970-01-01
相关资源
最近更新 更多