Always On 可用性组,始终将用户重定向到只读实例

Ste*_*Bov 9 sql-server configuration sql-server-2012 listener availability-groups

我们有一个 Always On 可用性组,其中包含一个主要和一个已启用读取的次要。我们有一个实施团队的用户,他使用数据库来检查他们打算放入数据库的数据的正确性。

用户只有从数据库读取的权限,但是当他们通过 AG 侦听器连接(通过 SSMS)时,他们总是连接到活动节点。

我试图让他们直接访问只读实例,但他们坚持自己的方式,一两天后他们又回到了活动节点上。

SQL Server 有没有办法说这个用户总是打算只读并将他们重定向到那里?

注意:我已经尝试在附加连接参数中设置“ApplicationIntent = ReadOnly”,但这似乎没有重定向到辅助节点,并且不是理想的解决方案,因为他们不可避免地会忘记为新的初学者设置它。

SQL Server 2012 Enterprise,可用性组 1 主要,1 可读次要同步提交。

我不打算让用户连接到链接服务器,或通过任何其他服务器。用户通过 SSMS(没有其他应用程序)直接连接到数据库,我希望 AG 侦听器(或那里的其他东西)能够将该用户引导到一个可用的辅助节点(因为它只有读取访问权限)访问主节点是没有意义的)而用户无需做任何事情,因为他们在机器周围移动并且会忘记添加应用程序意图。此外,我发现将其添加到其他连接参数并不总是将您定向到辅助节点。

Cod*_*ior 5

我没有回答你的整个问题(虽然我今天回答了一个类似的问题https://dba.stackexchange.com/a/137844/36812)但你提到使用 ApplicationIntent=ReadOnly 不起作用适当地。

您是否设置了只读路由 URL?因为它不是开箱即用的,如果您不这样做,那么这些设置和该标志将不起作用。我认为,如果你能做到这一点,那么你就可以开始重新评估你的要求了。

MSDN 上的说明https://msdn.microsoft.com/en-us/library/hh710054.aspx,最容易在 PowerShell 中完成。

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"

Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica
Run Code Online (Sandbox Code Playgroud)