数据库是Alwayson组的辅助副本中的只读错误

时间:2017-08-09 09:01:58

标签: sql-server alwayson

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

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

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

即使所有服务器都在线,我也希望进行CRUD操作。 (我的意思是,也为次要副本做一切。)

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

感谢您的时间和考虑。

1 个答案:

答案 0 :(得分:3)

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

您需要配置的是复制。

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

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