我有一个AOAG实例,其中客户可以访问B节点(只读)以拉取报告。每隔一段时间,我们必须将A节点上的数据库置于受限模式以应用更新或修补程序,这反过来又会将B节点上的数据库设置为受限模式,从而导致客户报告失败。是否可以仅将A节点数据库设置为受限模式,而将B节点留给客户只读用户访问?
发布于 2019-01-09 05:18:41
我们必须时不时地将A节点上的数据库置于受限模式以应用更新或修补程序,这反过来又会将B节点上的数据库设置为受限模式,从而导致客户报告失败
这听起来像是一种数据库设计,您可以设置一个标志来将用户锁定在数据库之外。此DML事务将自然地复制到辅助数据库。对于像SQL Agent作业这样的作业,你可以通过sys.fn_hadr_is_paimary_replica有条件地执行作业,如果它是或不是主副本,但这不能有条件地执行像UPDATE语句这样的东西。
是否可以仅将A节点数据库设置为受限模式,而将B节点留给客户只读用户访问?
是。理想情况下,您只需运行以下代码:
ALTER DATABASE [your_database]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;但是这样你就会得到如下的错误:
无法对数据库"your_database“执行该操作,因为它涉及数据库镜像会话或可用性组。不允许对正在参与数据库镜像会话或可用性组的数据库执行某些操作。
因此,一些选项包括:
https://stackoverflow.com/questions/54094190
复制相似问题