SQL Server AlwaysOn 可用性组副本只读设置

SQL Server AlwaysOn 可用性组副本是允许只读的,默认情况下不可读。

其中副本的可读性有几个选项:

NO : 不可连接到副本数据库,因此也不可读。默认设置。

Read-intent only:只有限定 “read-only” 时才能访问数据库,但只读。

Yes:所有连接都有可访问数据库,但只读。

SQL Server AlwaysOn 可用性组副本只读设置

如果设置为 “Read-intent only” ,客户端查询该数据库对象时提示以下错误:

Msg 976, Level 14, State 1, Line 1
The target database, 'TestDB', 
is participating in an availability group and is currently not accessible for queries. 
Either data movement is suspended or the availability replica is not enabled for read access. 
To allow read-only access to this and other databases in the availability group, 
enable read access to one or more secondary availability replicas in the group.  
For more information, see the ALTER AVAILABILITY GROUP statement in SQL Server Books Online.

若设置为 “Read-intent only”,又打算可读副本数据库数据,客户端连接设置如下:

连接时加上 ReadOnly 参数: ApplicationIntent=ReadOnly

SQL Server AlwaysOn 可用性组副本只读设置

其他程序连接设置如:ApplicationIntent=readonly

("Driver={SQL Server Native Client 11.0};server=AGListener;Database=dbname;trusted_connection=yes;ApplicationIntent=readonly”) 

("Driver={SQL Server Native Client 11.0};server=AGListener;Database=dbname;trusted_connection=yes;ApplicationIntent=readonly”)


使用 sqlcmd 工具连接需要设置参数 “-K”

sqlcmd -SAGListener -E -dDBName -Kreadonly 

sqlcmd -SAGListener -E -dDBName -Kreadonly

若都允许只读,选择 “Yes” 即可更改,或使用命令更改:

USE [master] 

GO 

ALTER AVAILABILITY GROUP [AGName] 

MODIFY REPLICA ON N'InstanceName' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)) 

GO 

USE [master] GO ALTER AVAILABILITY GROUP [AGName] MODIFY REPLICA ON N'InstanceName' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)) GO

参考:

将连接字符串关键字用于 SQL Server Native Client

onnect to SQL Server AlwaysOn replica with SSMS when Readable Secondary is set to Read-intent only

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/02904662421dca525b6f037e4c3692b4.html