我的一个客户有一个与服务代理一起工作的数据库,上周我们试图将数据库移动到一个始终在线的环境中,但不知道应用程序使用了服务代理。在有人抱怨它不起作用(预定的会议没有添加到日历中并且在旧会议完成后没有关闭(它是一个诊所应用程序))之后,我们发现 Microsoft 引用了始终开启的服务代理并尝试使用它: https ://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/service-broker-with-always-on-availability-groups-sql-server?view=sql-server -2017
但它仍然没有工作。起初我们尝试过
alter database [databasename] set enable_broker with rollback immediate
alter database [databasename] set new_broker with rollback immediate
消息 1468,级别 16,状态 1,第 2 行 无法对数据库“dbname”执行操作,因为它涉及数据库镜像会话或可用性组。不允许对参与数据库镜像会话或可用性组的数据库执行某些操作。消息 5069,级别 16,状态 1
我们还尝试了这些命令:
CREATE ENDPOINT [SSBEndpoint]
STATE = STARTED
AS TCP (LISTENER_PORT = 4022, LISTENER_IP = ALL )
FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS)
GRANT CONNECT ON ENDPOINT::[SSBEndpoint] TO [PUBLIC]
ALTER ROUTE AutoCreatedLocal
WITH ADDRESS = 'TCP://[server]:4022' ;
最后我们别无选择,我们将它从永远在线组中取出,在执行此命令后它起作用了:
ALTER ROUTE AutoCreatedLocal
WITH ADDRESS = 'LOCAL' ;
有没有人建议我们在配置上缺少什么?谢谢。
我确定这已排序,但您必须在创建可用性组之前启用服务代理。此消息表明您创建了 AG,然后尝试配置服务代理。
你可以
从 AO 中删除数据库
跑
仅将 DB 添加到 AO
核实: