web-dev-qa-db-ja.com

読み取り専用アプリケーションインテントのSSMS登録サーバー

私たちはAlwaysOnを使用したSQL Server 2014 POCテストに取り組んでおり、ユーザーの1人がSSMSの構成をReadOnlyIntent with Localに登録されたサーバーを使用して保存することについて質問しましたサーバーグループ。これにより、ReadOnlyレプリカにアクセスする必要があるたびにエイリアス名を入力する必要がなくなります。

残念ながら、登録されたサーバー内には、通常のオブジェクトエクスプローラーとは異なり、ApplicationIntentオプションを追加するオプションはありません。

RegSrvr.xmlの接続文字列を変更することについて、マイクロソフトからこの記事を見つけました。

https://connect.Microsoft.com/SQLServer/feedback/details/786323/ssms-sql-server-management-studio-2012-missing-connection-properties-for-availability-groups

私は彼らの提案を試してみましたが、登録済みサーバーのローカルサーバー経由で接続するときに、正しいレプリカノードに接続しませんでした。

ReadOnlyオプションは、接続ウィンドウ>追加の接続パラメーターのオプションを使用するときに、オブジェクトエクスプローラーから正常に機能します。ただし、接続に加えられた変更は保存されません。

SSMSでReadOnlyIntentプロパティを使用して構成を保存するための代替ソリューションを知っている人はいますか?よろしくお願いします。

10
DBAuser

これは、登録済みサーバーで使用する場合のSQL 2016 SSMSで修正されました。 ReadOnly Intent接続をローカルサーバーグループの一部として登録し、保存しておいた接続を将来の使用のために開くことができました。これで助けてくれてありがとう。

0
DBAuser

SQL Management Studio(2016より前のバージョン)

残念ながら、SQL Management Studioでアプリケーションインテントを使用すると、いくらか苦痛を伴ういくつかの警告があります。

ReadOnlyインテントで手動で接続するには、オブジェクトエクスプローラーからサーバーに接続ダイアログを開いた後、ユーザーは次のことを覚えておく必要があります。

  1. オプション>>をクリックします。
  2. 追加の接続パラメータータブに移動します。
  3. 追加パラメーターとしてApplicationIntent = ReadOnly;を入力します。
  4. (注:追加の接続パラメーターを入力した後、ユーザーはオプション<<ボタンをクリックしないでください。そうしないと、パラメーターが失われます。)
  5. Connectをクリックします。
  6. Object Explorerビューで目的のデータベースを右クリックし、New Query以下の#3の警告に遭遇しないようにします。

適用される警告は次のとおりです。

  1. SQL Management Studioを読み取り専用インテントで接続することはできますが、登録済みサーバーに接続が追加された場合、追加の接続パラメーターは保存されません。
  2. RegSrvr.xmlファイルでローカルに登録されたサーバーを手動で編集してアプリケーションインテントを追加するときの動作は非常に一貫性がなく、GUIを介して変更が加えられると上書きされ、この回避策は信頼できなくなります。
  3. クエリウィンドウを開く前に、Always Onデータベースを選択する必要があります。それ以外の場合、接続はプライマリサーバーにルーティングされます。 Always On以外のデータベースに対してクエリウィンドウを既に開いた後で、クエリウィンドウのドロップダウンを使用してデータベースを選択しようとすると、エラーダイアログが表示されます。クエリウィンドウが非常にオンのデータベースに対して既に開かれている後に、USEステートメントを使用してデータベースを常にオンのデータベースに変更しようとすると、SQLクエリを実行しようとすると、結果は次のようになります。
      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つの手順を使用)で接続でき、追加の接続パラメーターを格納します。まだいくつかの警告があります:

  1. オブジェクトエクスプローラービューでは、AlwaysOnデータベース内のテーブルやその他のオブジェクトは列挙されません。それらを展開しようとすると、アクセス拒否メッセージが表示されます。
  2. 同じリスナーへの読み取り専用接続と読み取り専用以外の接続を同時に開くことはできません。
  3. データベース内のオブジェクト名のIntellisenseが機能しません。 (奇妙なことに、オブジェクトはクエリデザイナで問題なく列挙され、右クリックメニューからDesign Query in Editor ...を使用して起動できます。 )
  4. 以前のバージョンの警告の警告3が引き続き適用されます。

サードパーティ製品

LinqPad は、接続を保存するときにアプリケーションインテントとデータベースを含む接続文字列全体を保存するため、Always Onデータベースに対して読み取り専用クエリを実行するための実行可能なオプションになる場合があります。

3
JamieSee

コメントはできませんが、DBAUserの回答に追加しています。

登録済みサーバー領域内で接続を設定するときに、GUIにアプリケーションインテントを追加するオプションが表示されませんでした。

オブジェクトエクスプローラー(Data Source=<Listener>;Initial Catalog=<Database>;ApplicationIntent=ReadOnlyを使用)を使用して接続し、接続したらサーバーを登録する必要がありました。

または、Initial Catalog=<Database>;ApplicationIntent=ReadOnlyを.regsrvrファイルの接続文字列に追加します。

0
marclancy

あなたはパズルの重要な部分を見逃しているかもしれません、または少なくとも私はあなたの質問のどこにもそれを見ませんでした:

ApplicationIntent=readonlyは方程式の半分です。パラメータMultiSubnetFailover=Trueも渡す必要があります。

たとえば、[追加の接続パラメータ]タブで、次のように入力します。

MultiSubnetFailover=True;ApplicationIntent=readonly;
0
Tony Castro

構成ファイルを作成してから、SSMSで必要な登録済みサーバーを自動作成することはできますか?私のMSSQLTipsの記事で述べたように:

SQL Server Management Studio(SSMS)でのサーバーの登録と保守の自動化

0
jyao

PowerShellスクリプトを試しましたが、アプリケーションの目的で(スペースを含む)別のスペルを使用しましたか?または、接続方法を混同していますか?

Server=$regsrv ; integrated security=true;Initial Catalog=dbname;
Application Intent=ReadOnly"); 

アプリケーションインテントを読み取り専用でSQL Serverに接続

0
Ironman Gooch