SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Denali CTP3 の AlwaysOn Availability Groups のセカンダリ ロールの接続モードについて

leave a comment

AlwaysOn Availability Groups はプライマリと複数のセカンダリで構成することが可能です。

ミラーリングの場合は、ミラーサーバー (Availability Groups の セカンダリ) のデータベースを読み取りで使う場合はスナップショットを取得する必要があり、データベースをそのまま使用することはできませんでした。
image

直接アクセスしようとすると以下のようにエラーになりますので、
image

一度データベース スナップショットを作成して、そのスナップショットにアクセスをする必要がありました。
image

Availability Groups ではスナップショットを取得しなくてもセカンダリのデータベースにアクセスができるようになりました。
image

今回の投稿ではこのあたりをまとめてみたいと思います。

■セカンダリ ロールの接続モード


セカンダリロールの接続モードですが技術情報としては以下になると思います。

Read-Only Access to Secondary Replicas (AlwaysOn Availability Groups)

セカンダリ ロールの接続モードは以下の 3 種類があります

image

接続を禁止 セカンダリ ロールのデータベースには接続を禁止
読み取りを目的とした接続のみを許可 読み取りのオプションを設定した接続であれば許可
すべての接続を許可 オプションを指定しなくても接続を許可

 

[接続を禁止] とした場合には、Availability Groups に設定しているデータベースをセカンダリ ロールで接続しようとするとエラーとなります。
image
image

他の二つのモードの場合はセカンダリ ロールのデータベースに接続することが可能です。
[読み取りを目的とした接続のみを許可] と [すべての接続を許可] の違いですが、接続文字列に [ApplicationIntent] を指定しているかどうかになります。

[読み取りを目的とした接続のみを許可] とした場合は接続文字列に明示的に [ApplicationIntent] を設定する必要があります。

Using Connection String Keywords with SQL Server Native Client

そのため SNAC もこのキーワードに対応しているものを使用する必要があります。

Denali CTP3 に入っている SNAC であれば、ODBC の設定画面からも ApplicationIntent に対応しているのが確認できます。
# アプリケーションの目的が [ApplicationIntent] に該当します。
image

それでは ODBC 設定時のテスト接続を使用して実際に試してみたいと思います。

まずは、接続モードを [接続を禁止] に設定しておきます。
image

この状態でアプリケーションの目的を [READONLY] にして接続をしてみます。
image

この状態では読み取り専用を目的として接続をしても拒否されます。
image

次に [読み取りを目的とした接続のみを許可] に設定します。
image

この状態ではアプリケーションの目的を読み取りとして設定している場合のみ接続が許可されます。
そのため、ODBC の設定で [READWRITE] に設定している場合はアクセスが拒否されますが、
image
image

[READONLY] に設定した場合は接続が許可されます。
image
image

[すべての接続を許可] にした場合は [READWRITE] [READONLY] のどちらにしても接続が許可されます。

この設定を使用することで明示的に読み取り専用と宣言している接続以外を拒否することができるようになります。
# どういう場合に使うか / 使うことによる利点等はこの後調べないといけないのですが…。

これに伴ってコマンドラインから SQL を実行するツールである [SQLCMD] にも [-K] というオプションが追加されています。

sqlcmd Utility

[読み取りを目的とした~] となっているデータベースに接続をする場合には、[-K ReadOnly] というオプションを指定して SQLCMD を実行する必要があります。

テーブルの内容をテキストに出力する際に使用する [BCP] に関しても同様に[-K] が追加されています。

bcp Utility

セカンダリを直接触ってテキストにデータを出力するのは Availability Groups を使用していると想定されるシナリオかもしれないですね。
# Availability Groups はセカンダリで COPY_ONLY のバックアップも取得ができますので、プライマリに負荷をかけないバックアップを取得することが可能となっています。

新しく追加された機能を最大限使用する場合には SNAC や各種ツールも最新を使う必要がありそうですね。

Share

Written by Masayuki.Ozawa

7月 25th, 2011 at 10:55 pm

Posted in SQL Server

Tagged with , ,

Leave a Reply