私はsysの管理者で、DBAの役割に放り込まれています。現在、AGには2つのSQL Serverボックス2016 Enterpriseがあります。 DBは問題なく同期しました。
サードパーティベンダーは、同じユーザーマッピングを使用して、両方のサーバーに同一のユーザーがいる必要があります。しかし、セカンダリでマッピングを調整しようとすると、DBが読み取り専用モードであることを示すエラーが表示されます。正しいマッピングでこのユーザーを作成するにはどうすればよいですか?
各インスタンス(ボックス)でloginsを作成する必要がありますが、ユーザーマッピングを設定できるのは、現在次のように機能しているもののみです。そのAG(読み取り専用ではないもの)の「プライマリ」。
[ユーザーマッピング]タブを含む[新規ログイン]ダイアログに必要な情報をすべて入力し、上部にある[スクリプト]ボタンをクリックすると、次のような結果になります。
USE [master]
GO
CREATE LOGIN [ACME\jdarnell] FROM WINDOWS
GO
USE [VersionStoreTestDB]
GO
CREATE USER [ACME\jdarnell] FOR LOGIN [ACME\jdarnell]
GO
USE [VersionStoreTestDB]
GO
ALTER ROLE [db_datareader] ADD MEMBER [ACME\jdarnell]
GO
このテストでは、「test-user」という名前の新しいログインを作成し、それを「db_datareader」ロールの「VersionStoreTestDB」データベースにマッピングするとしました。
両方のボックスで「CREATE LOGIN」の部分を実行してから、プライマリボックスのみで「CREATE USER」と「ALTER ROLE」の部分を実行する必要があります。マッピングは他のボックスに複製されます。
この例では、Windowsベースのログインを使用しています。 SQLログインを作成する場合は、両方のサーバーでSIDを確認して指定する必要があります。詳細については データベースミラーへのログインの転送 およびジョブを簡単にするためのスクリプトを参照してください。
この時点で、どのサーバーがプライマリであるかはすでにわかっています(セカンダリとして機能しているサーバーから、データベースが読み取り専用であるというエラーが発生したため)。 [Always On High Availability]フォルダーを展開し、次に[Availability Groups]フォルダーを展開すると、SSMSでプライマリまたはセカンダリのどちらを表示しているかを確認できます。リストされている可用性グループには、「(プライマリ)」または「(セカンダリ)」のサフィックスが付いています。