Spring Boot调用master.sys.geo_replication_links报错,寻求无需新建连接的解决方案
解决方案
方法1:移除master库前缀,直接查询当前数据库的系统视图
你的报错根源是不必要地指定了[master]库——sys.geo_replication_links在当前应用连接的用户数据库中即可查询(该视图用于展示当前数据库的异地复制关联信息)。修改查询语句如下:
@Query(nativeQuery = true, value = "SELECT partner_server FROM sys.geo_replication_links") public String getServerName();
若需要直接判断当前库是主库还是辅助库,可以扩展查询sys.dm_hadr_database_replica_states视图:
SELECT is_primary_replica FROM sys.dm_hadr_database_replica_states WHERE database_id = DB_ID()
返回1表示当前是主库,返回0表示是辅助副本库。
方法2:通过数据库属性快速判断主从
无需查询复制视图,直接通过数据库的可更新属性判断,兼容性更好且无需跨库操作:
@Query(nativeQuery = true, value = "SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability') AS Updateability") public String getDatabaseUpdateability();
- 返回
READ_WRITE:当前连接的是主数据库 - 返回
READ_ONLY:当前连接的是辅助副本数据库
补充说明
如果你的SQL Server环境(比如Azure SQL DB基础层)限制了部分系统视图的访问权限,方法2的数据库属性查询通常更稳定,且不需要额外权限支持。
内容的提问来源于stack exchange,提问作者Sajit Gangadharan
相关产品推荐
相关产品推荐

