私たちはAlwaysOnを使用したSQL Server 2014 POCテストに取り組んでおり、ユーザーの1人がSSMSの構成をReadOnlyIntent with Localに登録されたサーバーを使用して保存することについて質問しましたサーバーグループ。これにより、ReadOnlyレプリカにアクセスする必要があるたびにエイリアス名を入力する必要がなくなります。
残念ながら、登録されたサーバー内には、通常のオブジェクトエクスプローラーとは異なり、ApplicationIntentオプションを追加するオプションはありません。
RegSrvr.xmlの接続文字列を変更することについて、マイクロソフトからこの記事を見つけました。
私は彼らの提案を試してみましたが、登録済みサーバーのローカルサーバー経由で接続するときに、正しいレプリカノードに接続しませんでした。
ReadOnlyオプションは、接続ウィンドウ>追加の接続パラメーターのオプションを使用するときに、オブジェクトエクスプローラーから正常に機能します。ただし、接続に加えられた変更は保存されません。
SSMSでReadOnlyIntentプロパティを使用して構成を保存するための代替ソリューションを知っている人はいますか?よろしくお願いします。
これは、登録済みサーバーで使用する場合のSQL 2016 SSMSで修正されました。 ReadOnly Intent接続をローカルサーバーグループの一部として登録し、保存しておいた接続を将来の使用のために開くことができました。これで助けてくれてありがとう。
SQL Management Studio(2016より前のバージョン)
残念ながら、SQL Management Studioでアプリケーションインテントを使用すると、いくらか苦痛を伴ういくつかの警告があります。
ReadOnlyインテントで手動で接続するには、オブジェクトエクスプローラーからサーバーに接続ダイアログを開いた後、ユーザーは次のことを覚えておく必要があります。
適用される警告は次のとおりです。
Msg 979, Level 14, State 1, Line 1 The target database ('AlwaysOnDatabase') is in an availability group and currently does not allow read only connections. For more information about application intent, see SQL Server Books Online.
SQL Management Studio(バージョン2016以降)
SQL Server Management Studio 2016以降は、読み取り専用アプリケーションインテント(以前のバージョンと同じ6つの手順を使用)で接続でき、追加の接続パラメーターを格納します。まだいくつかの警告があります:
サードパーティ製品
LinqPad は、接続を保存するときにアプリケーションインテントとデータベースを含む接続文字列全体を保存するため、Always Onデータベースに対して読み取り専用クエリを実行するための実行可能なオプションになる場合があります。
コメントはできませんが、DBAUserの回答に追加しています。
登録済みサーバー領域内で接続を設定するときに、GUIにアプリケーションインテントを追加するオプションが表示されませんでした。
オブジェクトエクスプローラー(Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnly
を使用)を使用して接続し、接続したらサーバーを登録する必要がありました。
または、Initial Catalog=<Database>;ApplicationIntent=ReadOnly
を.regsrvrファイルの接続文字列に追加します。
あなたはパズルの重要な部分を見逃しているかもしれません、または少なくとも私はあなたの質問のどこにもそれを見ませんでした:
ApplicationIntent=readonly
は方程式の半分です。パラメータMultiSubnetFailover=True
も渡す必要があります。
たとえば、[追加の接続パラメータ]タブで、次のように入力します。
MultiSubnetFailover=True;ApplicationIntent=readonly;
構成ファイルを作成してから、SSMSで必要な登録済みサーバーを自動作成することはできますか?私のMSSQLTipsの記事で述べたように:
PowerShellスクリプトを試しましたが、アプリケーションの目的で(スペースを含む)別のスペルを使用しましたか?または、接続方法を混同していますか?
Server=$regsrv ; integrated security=true;Initial Catalog=dbname;
Application Intent=ReadOnly");