当我把数据库加入到AlwaysOn可用性组后,Primary的登录和密码不能自动迁移到Secondary,如果使用sp_change_users_login直接在Secondary上排除孤立用户,则会报当前数据库只读,无法修改。下面将以服务器A(Primary)和B(Secondary)来说明MS官方的解决方案:
- 在A上执行如下Scripts,在“master”数据库中创建两个存储过程,分别为“sp_hexadecimal”和“sp_help_revlogin”:
USE master GO IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL DROP PROCEDURE sp_hexadecimal GO CREATE PROCEDURE sp_hexadecimal @binvalue varbinary(256), @hexvalue varchar (514) OUTPUT AS DECLARE @charvalue varchar (514) DECLARE @i int DECLARE @length int DECLARE @hexstring char(16) SELECT @charvalue = '0x' SELECT @i = 1 SELECT @length = DATALENGTH (@binvalue) SELECT @hexstring = '0123456789ABCDEF' WHILE (@i <= @length) BEGIN DECLARE @tempint int DECLARE @firstint int DECLARE @secondint int SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) SELECT @firstint = FLOOR(@tempint/16) SELECT @secondint = @tempint - (@firstint*16) SELECT @charvalue = @charvalue + SUBSTRING(@hexstring, @firstint+1, 1) + SUBSTRING(@hexstring, @secondint+1, 1) SE