【问题标题】:Database is read-only error in Secondary Replica of Alwayson GroupsAlwayson 组的辅助副本中的数据库是只读错误
【发布时间】:2017-08-09 09:01:57
【问题描述】:

我尝试了很多方法并分析了很多文档,但我还没有找到解决方案。

我在 VmWare 中有三个虚拟机,称为 (DC,SQLServer01,SQLServer02)。所有 SQL Server 都是域的成员。(DC)我为 SQLServer01 和 SQLServer02 安装了故障转移集群。我在 SQLServer01 中做了必要的配置。然后我为两台服务器安装了 SQL Server 2014。现在,我创建了一个 alwaysOn 组。 SQLServer01 是主要的,其他是次要的。当我切断 SQLServer01 的连接时,一切都很好(次要变为主要)。其他情况可以接受。

但是,当所有服务器都在线时,我无法执行任何操作(插入、更新、删除、更改等),除了在我的辅助副本中的读取操作。我总是看到“数据库是只读的”错误。在 Alwayson 组的属性中,主副本和辅助副本都具有所有连接,并且辅助可读为“YES”。

即使所有服务器都在线,我也想进行 CRUD 操作。 (我的意思是,也为二级副本做所有事情。)

那么,您有什么建议或想法吗?

感谢您的时间和考虑。

【问题讨论】:

  • 如果你想要“可修改”的副本,你应该使用复制,而不是镜像/始终开启

标签: sql-server alwayson


【解决方案1】:

发生错误是因为无法在 sql server 中写入辅助副本。只有主副本可以托管读写数据库,一个可用性组只能有一个主副本。 Secondary replicas can host read-only databases only。当两个副本都可用时,两个副本中只有一个可以是主副本,因此支持读写。当只有一个副本可用时,该副本将成为主副本,因为没有其他副本,并且可以对该副本进行读写操作。

您需要配置的是复制。

在 SQL Server 中,merge replication 允许您在多个节点上写入,并通过定期同步来解决冲突并将更改推送到所有副本。

点对点复制是另一种解决方案。应用层不能允许冲突(在多个节点更新同一行),但要快得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    相关资源
    最近更新 更多