SE の雑記

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

Archive for the ‘SQL Server’ Category

SQL Server 2008 SP2 CTP で UCP / DAC に対応しています

leave a comment

先日、英語版だけではありますが SQL Server 2008 SP2 CTP が公開されました。
SQL Server 2008 SP2 CTP

SQL Server 2008 SP2 から SQL Server 2008 R2 の UCP と DAC に対応されるようです。
どのようになるか軽く検証をしてみました。

今回は以下のバージョンのインスタンスを用意しています。

  • SQL Server 2008 R2 (SSMS も 2008 R2 のものを使用)
  • SQL Server 2008 SP1
  • SQL Server 2008 SP2 CTP

?

■UCP に登録

SQL Server 2008 SP1 を UCP のマネージインスタンスとして登録しようとすると以下のように
バージョンのチェックでエラーとなります。
image

それでは、SQL Server 2008 SP2 CTP を登録してみたいと思います。
SQL Server 2008 SP2 CTP は UCP に対応をしていますので、インスタンスを登録することが可能です。
image

実際に、インスタンスを登録して UCP で状態を確認した画面がこちらになります。
SQL Server 2008 のインスタンスが登録されていることが確認できますね。
?image

?

■DAC の登録

続いて DAC の登録も試してみたいと思います。

SQL Server 2008 R2 で DAC を登録した状態にしてあります。
image

まずは SQL Server 2008 SP1 に登録をしようとするとどうなるか確認してみます。
DAC はオブジェクトエクスプローラーの [管理] に表示されるのですが、 SQL Server 2008 SP1 のインスタンスでは
表示がされていません。
# インスタンス名が見切れてしまっていますが、[データ層アプリケーション] が表示されているのが 2008 R2 の
  インスタンスになります。
image?

SQL Server 2008 SP2 CTP のインスタンスの管理を表示してみます。
SQL Server 2008 SP2 CTP のインスタンスでデータ層アプリケーションが表示されているのが確認できます。
image

DAC パッケージの配置も実施することができます。
image

ユーティリティ エクスプローラーのデータ層アプリケーションにも表示されます。
image

複数のバージョンを一元的に確認できる用になるのはいいですね~。

Written by Masayuki.Ozawa

7月 14th, 2010 at 10:46 am

Posted in SQL Server

SQL Server 2008 R2 CU1 をスリップストリームインストール

leave a comment

Twitter で SQL Server 2008 R2 CU1 の情報が流れましたのでさっそくスリップストリームインストールができるか検証です。

[Setup.exe] のヘルプには以下のオプションが明記されているので、使えることはコマンドからでも確認できるのですが。

CUSOURCE???????????????????? セットアップ メディアの更新に使用される、抽出された累積した更新ファイルのディレクトリ。
PCUSOURCE??????????????????? セットアップ メディアの更新に使用される、抽出されたサービス パック ファイルのディレクトリ。

?

SQL Server 2008 R2 CU1 ですが、SQL Server 2008 SP1 CU5,6,7 相当の修正が適用されるみたいですね。

?

[CU1 のダウンロード]

CU1 は以下のサイトからダウンロードすることが可能です。
Cumulative Update package 1 for SQL Server 2008 R2

SQL Server 2008 R2 Non SP の累積修正プログラムの情報は以下のサイトに掲載されるようですので、こちらも定期的に
チェックをするとよさそうです。
The SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 was released

[CU1 の展開]

スリップストリームインストールをする前に、まずはダウンロードした CU1 を展開する必要があります。
image

以下の形式でダウンロードした EXE を実行することで展開することができます。

SQLServer2008R2-KB981355-x64.exe /extract:<展開先>

例)
SQLServer2008R2-KB981355-x64.exe /extract:C:CU1

# [/x:] でも展開可能です。

?

[CU1 をスリップストリームインストール]

CU をスリップストリームセットアップする場合は、[CUSOURCE] というオプションを使ってインストールメディアの [Setup.exe] を実行します。

Setup.exe /CUSource=<展開先>

例)
Setup.exe /CUSource=C:CU1

?

あとはウィザードに従ってインストールをしていきます。
インストールの準備完了で、アクションが [Install (Sripstream)] となっているのが確認できます。image

?

今回インストールしたインスタンスは [SQL2008R2ENT] という名称なのですが、バージョンが [10.50.1702.0] となっていますね。
image

スリップストリームインストールが使えると楽でいいですね♪

Written by Masayuki.Ozawa

5月 18th, 2010 at 1:15 pm

Posted in SQL Server

データベース管理者向けの SQL Server 2008 R2 3 つの新機能

one comment

Books Online や Web で SQL Server 2008 R2 の新機能の情報を収集していて、SQL Server 2008 R2 でメジャーな新機能以外に
いくつかデータベース管理者向けの新機能があったので検証してみました。

以下のブログで新機能がまとめられており、こちらの情報がとても参考になります。
INF: New SQL Server features in SQL Server 2008 R2 ? Part 1
INF: New SQL Server features in SQL Server 2008 R2 ?Part 2

  1. SQL Server 2008 R2 Express Edition のデータベース上限の変更
  2. SQL Server 2008 Express Edition までは、データベースの上限は [4GB] となっていました。
    image?

    SQL Server 2008 R2 Express Edition では、データベースの上限が [10GB] に変更となりました。
    image?

    Books Online には以下のように記載されています。

    SQL Server Express でサポートされるデータベースの最大サイズが 4 GB から 10 GB に引き上げられました。

    # ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.ja/s10de_0evalplan/html/8f625d5a-763c-4440-97b8-4b823a6e2439.htm

  3. Standard Edition でバックアップ圧縮をサポート

    SQL Server 2008 でバックアップ圧縮の機能が追加されました。
    ただし、使える Edition は [Enterprise Edition のみ] となっていました。

    SQL Server 2008 Standard Edition でバックアップ圧縮を使ったデータベースアックアップを取得しようとすると以下のエラーとなります。

    print @@version

    BACKUP DATABASE [master] TO? DISK = N’C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008STDMSSQLBackupmaster.bak’ WITH NOFORMAT, NOINIT,
    NAME = N’master-完全 データベース バックアップ’, SKIP, NOREWIND, NOUNLOAD, COMPRESSION,? STATS = 10
    GO

    Microsoft SQL Server 2008 (SP1) – 10.0.2746.0 (X64)
    ??? Nov? 9 2009 16:37:47
    ??? Copyright (c) 1988-2008 Microsoft Corporation
    ??? Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (VM)

    メッセージ 1844、レベル 16、状態 1、行 1
    BACKUP DATABASE WITH COMPRESSION は Standard Edition (64-bit) ではサポートされません。
    メッセージ 3013、レベル 16、状態 1、行 1
    BACKUP DATABASE が異常終了しています。

    ?

    それでは SQL Server 2008 R2 Standard Edition で同様の処理を実行してみます。

    print @@version

    BACKUP DATABASE [master] TO? DISK = N’C:Program FilesMicrosoft SQL ServerMSSQL10_50.SQL2008R2STDMSSQLBackupmaster.bak’ WITH NOFORMAT,
    NOINIT,? NAME = N’master-完全 データベース バックアップ’, SKIP, NOREWIND, NOUNLOAD, COMPRESSION,? STATS = 10
    GO

    Microsoft SQL Server 2008 R2 (RTM) – 10.50.1600.1 (X64)
    ??? Apr? 2 2010 15:48:46
    ??? Copyright (c) Microsoft Corporation
    ??? Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)

    10 パーセント処理されました。
    21 パーセント処理されました。
    31 パーセント処理されました。
    40 パーセント処理されました。
    50 パーセント処理されました。
    61 パーセント処理されました。
    71 パーセント処理されました。
    80 パーセント処理されました。
    90 パーセント処理されました。
    データベース ‘master’ の 376 ページ、ファイル 2 のファイル ‘master’ を処理しました。
    100 パーセント処理されました。
    データベース ‘master’ の 4 ページ、ファイル 2 のファイル ‘mastlog’ を処理しました。
    BACKUP DATABASE により 380 ページが 0.390 秒間で正常に処理されました (7.612 MB/秒)。

    Standard Edition でもバックアップ圧縮のオプションを設定しても正常にバックアップができています。
    バックアップは常に使用する機能ですので、Standard Edition でバックアップ圧縮が使えるようになったのはうれしいですね。
    Standard Edition でリソースガバナーを使うことができませんので、バックアップ中の CPU の利用状況の制限に関してはできません。

    こちらも Books Online に記載されています。

    バックアップ圧縮は SQL Server 2008 Enterprise で導入されました。
    SQL Server 2008 R2 以降、バックアップ圧縮は SQL Server 2008 R2 Standard 以上のエディションでサポートされています。
    圧縮されたバックアップは、SQL Server 2008 以降の各エディションで復元できます

    # ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.ja/s10de_4deptrbl/html/05bc9c4f-3947-4dd4-b823-db77519bd4d2.htm
    ?

  4. 共有フォルダにデータベースを配置

    SQL Server 2008 R2 では [共有フォルダにデータベースを配置] することが可能となりました。

    SQL Server 2008 で共有フォルダにデータベースを作ろうとすると以下のようなエラーとなります。

    CREATE DATABASE [TEST] ON? PRIMARY
    ( NAME = N’TEST’, FILENAME = N’127.0.0.1c$Program FilesMicrosoft SQL ServerMSSQL10.SQL2008EXPRESSMSSQLDATATEST.mdf’ , SIZE = 3072KB , FILEGROWTH = 1024KB )
    LOG ON
    ( NAME = N’TEST_log’, FILENAME = N’127.0.0.1c$Program FilesMicrosoft SQL ServerMSSQL10.SQL2008EXPRESSMSSQLDATATEST_log.ldf’ , SIZE = 1024KB , FILEGROWTH = 10%)
    GO

    メッセージ 5110、レベル 16、状態 2、行 1
    ファイル "127.0.0.1c$Program FilesMicrosoft SQL ServerMSSQL10.SQL2008EXPRESSMSSQLDATATEST.mdf" が存在するネットワーク パスは、データベース ファイルでサポートされません。
    メッセージ 1802、レベル 16、状態 1、行 1
    CREATE DATABASE が失敗しました。一覧されたファイル名の一部を作成できませんでした。関連するエラーを確認してください。

    SQL Server 2008 R2 で実行すると正常に作成することが可能です。
    # Express Edition でも配置することが可能でした。

    CREATE DATABASE [TEST] ON? PRIMARY
    ( NAME = N’TEST’, FILENAME = N’127.0.0.1c$Program FilesMicrosoft SQL ServerMSSQL10_50.SQL2008R2EXPRESSMSSQLDATATEST.mdf’ , SIZE = 3072KB , FILEGROWTH = 1024KB )
    LOG ON
    ( NAME = N’TEST_log’, FILENAME = N’127.0.0.1c$Program FilesMicrosoft SQL ServerMSSQL10_50.SQL2008R2EXPRESSMSSQLDATATEST_log.ldf’ , SIZE = 1024KB , FILEGROWTH = 10%)
    GO

    コマンドは正常に完了しました。

    共有フォルダへのアクセスですが、[SQL Server のサービスアカウント] で実行されます。
    共有フォルダへアクセスできない場合は、以下のエラーになります。

    メッセージ 5133、レベル 16、状態 1、行 1
    オペレーティング システム エラー 5(アクセスが拒否されました。) により、ファイル "127.0.0.1c$Program FilesMicrosoft SQL ServerMSSQL10_50.SQL2008R2EXPRESSMSSQLDATATEST.mdf" のディレクトリ参照に失敗しました。
    メッセージ 1802、レベル 16、状態 1、行 1
    CREATE DATABASE が失敗しました。一覧されたファイル名の一部を作成できませんでした。関連するエラーを確認してください。

    データベースの新規作成だけでなく、アタッチもすることができます。

    CREATE DATABASE TEST
    ON (FILENAME = N’127.0.0.1c$Program FilesMicrosoft SQL ServerMSSQL10_50.SQL2008R2EXPRESSMSSQLDATATEST.mdf’)
    FOR ATTACH

    クラスタの場合はこのようなエラーになります。
    クラスタの場合、共有フォルダではなく物理ディスクを使う必要があるようですね。
    # クラスタの共有ディスクに共有フォルダを設定しています。
     クラスタリソースの仮想コンピュータに関しては、[IPアドレス] のアクセスができないので [コンピュータ名] でアクセスしています。

    メッセージ 5184、レベル 16、状態 2、行 1
    クラスター サーバーにファイル ‘2008r2-wsfc-sqlgMSSQL10_50.MSSQLSERVERMSSQLDATATEST.mdf’ を使用できません。
    サーバーのクラスター リソースが依存関係を持つ、フォーマットされたファイルだけを使用できます。
    このファイルを含んでいるディスク リソースがクラスター グループに存在しないか、SQL Server のクラスター リソースが
    このファイルに依存していません。
    メッセージ 1802、レベル 16、状態 1、行 1
    CREATE DATABASE が失敗しました。一覧されたファイル名の一部を作成できませんでした。関連するエラーを確認してください。

    これについては最初に紹介しているブログの中に書かれているのですが、Books Online ではちょっと記載が見つけられませんでした。

?

ユーティリティ コントロール ポイント / データ層アプリケーション / PowerPivot のようなメジャーな新機能ではありませんが、
個人的には、どれも気になる機能でした。
まだ、たくさん新機能はありますので検証ができたタイミングで投稿したいと思います。

Written by Masayuki.Ozawa

5月 15th, 2010 at 1:51 pm

Posted in SQL Server

SQL Server 2008 R2 のフェールオーバークラスタのインストール その 3 – 2 ノード目のインストール –

leave a comment

続いて 2 ノード目のインストールです。

.NET Framework 3.5 SP1 とネットワークバインドの順序の手順は実施済みです。

■2 ノード目のインストール

  1. [Setup.exe] を実行します。
    image
  2. [インストール] → [SQL Server フェールオーバー クラスターにノードを追加します。] をクリックします。
    image
  3. [OK] をクリックします。
    image
  4. [次へ] をクリックします。
    image
  5. [ライセンス条項に同意する。] を有効にして、[次へ] をクリックします。
    image
  6. ? [インストール] をクリックします。
    image
  7. [次へ] をクリックします。
    image
  8. ノードを追加するインスタンスを選択し、[次へ] をクリックします。
    image
  9. サービスアカウントのユーザーのパスワードを入力し、[次へ] をクリックします。
    image?
  10. エラー レポートの設定をして、[次へ] をクリックします。
    image
  11. [次へ] をクリックします。
    image
  12. [インストール] をクリックします。
    image
    image
  13. [閉じる] をクリックします。
    image

以上で 2 ノード目のインストールは完了です。
実行可能な所有者として、ノードが追加されています。
image

2 ノード目には、BIDTS と SSMS も一緒にインストールされていますね。
?image

SQL Server 2008 R2 のデータベースエンジンのクラスタのインストールは以上で完了です。
CTP と同一の手順でインストールが可能ですね。

今までの投稿で書いていなかった内容もいくつかあったので、クラスタのインストールを補完するいい機会でした。

Written by Masayuki.Ozawa

5月 5th, 2010 at 6:48 am

Posted in SQL Server

SQL Server 2008 R2 のフェールオーバークラスタのインストール その 2 – 1 ノード目のインストール –

leave a comment

ネットワークのバインド順序の設定は実施済みの状態です。
SQL Server 2008 R2 のクラスターインストール時のネットワークバインド順序の警告について

■.NET Framework 3.5 SP1 のインストール

SQL Server 2008 R2 は .NET Framework 3.5 SP1 が必要になります。
image

Windows Server 2008 R2 の場合、.NET Framework 3.5 SP1 は機能の追加からインストールすることができます。
SQL Server のインストールメディアの [redistDotNetFrameworks] に .NET Framework のセットアップが含まれていますが、
Windows Server 2008 R2 では、管理ツールから追加するようにメッセージが表示されます。
image

  1. サーバー ネージャーから [機能の追加] をクリックします。
    image
  2. [.NET Framework 3.5.1] を有効にし、[次へ] をクリックします。
    image
  3. [インストール] をクリックします。
    image
  4. [閉じる] をクリックします。
    image?

?

■共有ディスクの準備
インストールを実行しているノードが利用可能な共有ディスクを持っていない場合、インストール時に以下のエラーとなります。

image

事前に、SQL Server をインストールするためのクラスタグループを作る場合は、そのグループに共有ディスクを割り当て、
インストールを実行しているノードに移動すればよいのですが、事前にグループを作成しない場合は、[使用可能記憶域]
インストールを実行するノードに移動させる必要があります。

このクラスタグループですが GUI からは移動ができないのでコマンドで移動をさせます。

cluster group “使用可能記憶域” /move:%computername%

?

■コンピュータアカウントの準備

事前にコンピュータアカウントを作成しておく場合は適切な状態にする必要があります。
# コンピュータアカウントの新規作成になる場合は、クラスターのコンピュータアカウントで SQL Server のコンピュータアカウントが作成されます。

コンピュータアカウントを事前に作成していて、適切な設定がされていない場合は、インストールの最後で以下のエラーが発生します。

image?
image

コンピュータアカウントの事前準備は DTC の場合と同じです。

  1. コンピュータアカウントを作成します。?
  2. 作成したコンピュータアカウントを [無効] にします。?
  3. 作成したコンピュータアカウントに [クラスタのコンピュータアカウントのフルコントロール] を設定します。

ここまで終われば事前準備完了です。

■SQL Server 2008 R2 クラスタ環境のインストール

  1. インストールメディアの [setup.exe] を実行します。
    image
  2. [インストール」→ [SQL Server フェールオーバー クラスターの新規インストール] をクリックします。
    image
  3. [OK]? をクリックします。
    image
  4. [次へ] をクリックします。
    image
  5. [ライセンス条項に同意する] を有効にし、[次へ] をクリックします。
    image
  6. [インストール]? をクリックします。
    image
  7. [次へ] をクリックします。
    image
  8. 必要な機能を選択して、[次へ] をクリックします。
    # 今回は、データベースエンジンで必要な機能をインストールしています。
    image
  9. [SQL Server のネットワーク名] を入力して、[次へ] をクリックします。
    ネットワーク名が SQL Server のクラスタのコンピュータ名になります。
    インスタンスに関しては用途に応じて設定します。今回は既定のインスタンスでインストールをしています。
    image
  10. [次へ] をクリックします。
    image
  11. SQL Server をインストールするクラスタのグループ名を入力し、[次へ] をクリックします。
    # プルダウンはコンボボックスなので入力可能です。以下の画像はデフォルトで設定されているグループ名になります。
    image
  12. SQL Server をインストールする共有ディスクを選択し、[次へ] をクリックします。
    image
  13. SQL Server のクラスタで使用する IP アドレスを設定し、[次へ] をクリックします。
    今回は DHCP を使用しています。
    image
  14. セキュリティで使用する ID を選択し、[次へ] をクリックします。
    今回は Windows Server 2008 R2 を使っていますので、サービス SID が使用できます。
    Windows Server 2003 の場合は、ドメイングループが必要となります。
    # ドメイングループを使用する場合は、この後で設定するサービスアカウントをグループのメンバーとして追加しておく必要があります。
    image
  15. サービスで使用する [ドメイン ユーザー] を設定します。
    # [SQL Server Agent] と [SQL Server Database Engine] はドメイン ユーザーで実行する必要があります。
    image?
  16. 必要に応じて [照合順序] を設定し、[次へ] をクリックします。
    # デフォルトは [Japanese_CI_AS] になっています。
    日本語環境なので、[Japanese_XJIS] に変更しています。
    ?image
  17. インストール後の SQL Server の管理者ユーザーを設定し、[次へ] をクリックします。
    # データディレクトリと FILESTREAM はお好みで変更します。
    image
    image
    image
  18. エラーレポートの設定をし、[次へ] をクリックします
    image?
  19. [次へ] をクリックします。
    image?
  20. [インストール] をクリックします。
    image
    image
  21. [閉じる] をクリックします。
    image

以上で 1 ノード目のインストールは完了です。
image?

現在は、まだ 2 ノード目のインストールはしていないので、実行可能な所有者はインストールを実行したノードのみになっています。
image

次の投稿で 2 ノード目の追加についてまとめてみます。

Written by Masayuki.Ozawa

5月 5th, 2010 at 5:57 am

Posted in SQL Server

SQL Server 2008 R2 のフェールオーバークラスタのインストール その 1 – MSDTC のリソース作成 –

leave a comment

SQL Server 2008 R2 の日本語版 RTM がダウンロードできるようになったので、さっそくクラスタのインストールをまとめてみたいと思います。
# 私のブログに期待されているのはこの内容だと思いますので。

まずは、MSDTC のリソース作成から。
今までまとめたことなかったみたいなんですよね。

WSFC のコアクラスタリソースに関しては構築が完了しています。
コンピュータ名等に関しては以下の図のようになっています。
# 2008R2-WSFC-01 がクラスタのコンピュータ名になります。

image

■MSDTC 作成前の準備

MSDTC のリソース作成時に [共有ディスク] [コンピュータアカウント] [IP アドレス] が必要となります。

  • 共有ディスク
    共有ディスクに関しては、クラスタで使用可能なディスクとして [使用可能記憶域] に割り当てをしておきます。
    クォーラムディスクと違って DTC で使用するディスクはドライブ文字が必要になります。
    image
  • コンピュータアカウント
    [コンピュータアカウント作成権限の委任][Account Operators] を付与している場合は特に準備は必要ないのですが、
    事前にコンピュータアカウントを作成しておく場合は、適切な設定をしておく必要があります。
    1. コンピュータアカウントを作成します。
      image
    2. 作成したコンピュータアカウントを [無効] にします。
      image
      image
    3. 作成したコンピュータアカウントに [クラスタのコンピュータアカウントのフルコントロール] を設定します。
      image?

以上でコンピュータアカウントの設定は完了です。
事前にコンピュータアカウントを作成している場合、適切な設定がされていないと DTC のサービスを作成する際に以下のエラーがとなります。
image?

コンピュータアカウントを事前に作成していない場合は、[Computers] のコンテナにコンピュータアカウントが作成されます。
# 作成されるコンピュータアカウントの [ms-DS-Creator-SID] はクラスタのコンピュータアカウントになっていますので、
  クラスタのコンピュータアカウントを利用して DTC のコンピュータアカウントを作成しています。
この場合は、[フルコントロール] ではなく必要となりそうな権限のみが付与されているようですので、厳密には [フルコントロール] である
必要はないんでしょうね。

  • IP アドレス
    MSDTC には IP アドレスのリソースが必要になりますので、割り当て可能な IP アドレスを事前に準備しておきます。
    今回は DHCP で作ってしまっているので、固定 IP は用意していません。

以上で事前準備は完了です。

続いて MSDTC のリソースを作成します。

■MSDTC の作成

フェールオーバークラスターマネージャーで MSDTC のリソースを作成します。

    1. [操作] → [サービスまたはアプリケーションの構成] をクリックします。
      image
    2. [次へ] をクリックします。
      image
    3. [分散トランザクションコーディネーター (DTC)] を選択し、[次へ] をクリックします。
      image
    4. [名前] を設定し、[次へ] をクリックします。
      # 以下の名前は、自動で設定されていたものです。また、固定 IP を使っている場合はここで設定することになったはずです。
      [名前] に入力したものが DTC のコンピュータアカウントとなります。
      image
    5. DTC で使用するディスクを選択して、[次へ] をクリックします。
      image
    6. [次へ] をクリックします。
      image
    7. [完了] をクリックします。
      image
      ?

以上で、MSDTC のリソース作成は完了です。
image?
# [名前] の状態が [オンライン (名前解決はまだ使用できません)] となっている場合は、DTC のコンピュータリソースの DNS 登録がされていない
??? 可能性がありますので、DNS の登録状況を確認します。
? [ipconfig /registerdns] や、コンピュータ名リソースのオフライン→オンラインを実行すると解消できると思います。

作成した DTC は [クラスター化された DTC] として設定がされます。
# 以下はコンポーネント サービスの表示内容です。

作成した DTC のプロパティを開き、セキュリティの設定をしておきます。
このセキュリティの設定はいろいろな情報を見てこれかな~といったレベルの設定ですので、ベストプラクティスではありません…。
# DTC のリソースを保持していないノードだと、コンピューター展開しても反応がない可能性があります。
 その場合は、リソースを保持しているノードまたは、サービスを操作するノードに移動して設定をします。
??? 一度サービスを保持していれば、リソースが他のノードに移動しても設定はできるみたいなんですけどね。
image

image
image
image?

これで SQL Server をインストールする際に必要な DTC のリソースを作成することができました。
次の投稿で SQL Server のインストールをしたいと思います。

Written by Masayuki.Ozawa

5月 5th, 2010 at 3:14 am

Posted in SQL Server

SQL Server 2008 R2 のクラスターインストール時のネットワークバインド順序の警告について

leave a comment

SQL Server 2005 以降のクラスターのインストールではセットアップ時に以下のようなインストール前の検証が行われます。
# 以下は SQL Server 2008 R2 November CTP の内容です。

image?
[ネットワーク バインド順序] 以外のルールはすべて [合格] にできるのですが、環境によっては [ネットワーク バインド順序] だけが
[警告] になってしまうという現象がまれに発生していました。

警告は以下の内容となっています。
image?

今回の環境では、[Public] というドメインのネットワークと、[Private] というクラスタの内部通信用のネットワークの 2 種類を用意しています。
ネットワークのアクセス順序に関しては、[Public] [Private] という順番にしてあり、優先順位としては [Public] のほうが高い設定となっています。
image

ドメイン ネットワークのほうが、優先順位高いのですが、この警告が発生するんですよね。
[Public] と [Private] の順序を変更すると警告が消えることがあります。
# あくまでも警告のレベルなので、インストールは継続することができ動作的にも特に問題はないのですが。

今日の午前中に、英語版の SQL Server 2008 R2 RTM の Enterprise Evaluation をインストールしていて同様の現象が発生し、
そういえばこの間この現象について、英語の情報があったな~と思い対応方法をまとめてみました。

■参考にした情報

この現象の解決には、以下のサイトの情報を参考にさせていただきました。
Network Binding Order Rule Warning in SQL Server 2008 Cluster Setup Explained

このチェックに関しては、[アダプターとバインド] で設定する順序だけでなく、レジストリの設定も関係しているようですね。

■対応方法

  1. ネットワークアダプタの順序の設定
    ネットワークアダプタの順序に関しては、[ネットワーク][プロパティ] を開いて、
    image

    [詳細設定][詳細設定] から変更することができます。
    # Windows Server 2008 以降はメニューバーが表示されないので、[Alt] を押してメニューバーを表示します。
    image

  2. ゴーストデバイスが存在していないかの確認
    NIC のゴーストデバイスが残っていないかを確認するのもポイントのようですね。
    以下の KB はWindows 2000 Server 用の技術情報になりますが、2008 / R2 でも同様の操作で表示することが可能です。
    Windows 2000 に現在存在しないデバイスがデバイス マネージャに表示されない

    いつまでたっても、

    set devmgr_show_nonpresent_devices=1
    cd%SystemRoot%System32
    start devmgmt.msc

    が覚えられないです…。

    上記コマンドを実行すると [非表示のデバイスの表示] を有効にした際に、ゴーストデバイスが表示できるようになりますので、
    image

    [ネットワーク アダプター] に薄い文字で表示されているデバイスがないかを確認します。
    今回の環境ではゴーストデバイスは存在していないために表示されていません。
    # 薄い文字で表示されているものが接続されていないがアダプターとしては残っているゴーストデバイスになります。
    image

  3. レジストリの設定変更
    多くの場合は、このレジストリ値のの設定が起因して警告が表示されているような気がします。

    [HKLMSYSTEMCurrentControlSetServicesTcpipLinkage][Bind] という [REG_MULTI_SZ] の設定があります。
    image?

    SQL Server のクラスターのインストールでは、この値の順序もアダプタのバインド順序として認識されているようです。

    このままでは、どの値がどのアダプターを指しているかわからないのでコマンドプロンプトで、[WMIC] を使ってアダプターと値の関連を調べます。

    wmic nicconfig get description, SettingID

    そうすると以下のような結果が取得できます。

    WAN Miniport (SSTP)??????????????????????????????????????? {4AE6B55C-6DD6-427D-A5BB-13535D4BE926}
    WAN Miniport (IKEv2)?????????????????????????????????????? {DBD85EFC-7CFA-4A38-90A3-4803A40BF61E}
    WAN Miniport (L2TP)??????????????????????????????????????? {66973E50-CF44-46A7-AD86-0F369D30ACA2}
    WAN Miniport (PPTP)??????????????????????????????????????? {F93EB786-8968-43C5-BC58-54D87385060E}
    WAN Miniport (PPPOE)?????????????????????????????????????? {6A16EDEB-24DF-416A-B427-CED88EFCA006}
    WAN Miniport (IPv6)??????????????????????????????????????? {F4373218-ED19-4F3D-8DB4-982009ED86B7}
    WAN Miniport (Network Monitor)???????????????????????????? {5356FE17-48EE-4A7A-BECE-645E20060A52}
    Microsoft Virtual Machine バス ネットワーク アダプター???? {80A41E42-ED0F-4584-860F-F03808F2D520}
    WAN Miniport (IP)????????????????????????????????????????? {66513FCE-F1B9-480C-B278-3DD588D5D452}
    Microsoft Virtual Machine バス ネットワーク アダプター #2? {B14AF60C-B406-4890-9D27-0D7034D634AD}
    RAS Async Adapter????????????????????????????????????????? {DD2F4800-0DEB-4A98-A302-0777CB955DC1}
    Microsoft Failover Cluster Virtual Adapter???????????????? {64D317B9-D0D5-4AAB-9D1F-8D8BA9E5A1E3}

    今回は、[Public] が [#2] のアダプタを使っているので、[{B14AF60C~}] の値が、ドメイン ネットワークになりますね。
    image

    それではレジストリの値を変更して、Public のネットワークを先頭に設定します。
    # ついでに、[Private] を 2 番に設定しています。Public が先頭にあれば、警告は表示されないようになるためこれは必須ではありません。
    image

以上で設定は終了です。

SQL Server のインストーラーの検証を再実行してみます。
# 設定変更後にサーバーの再起動はしていません。

すべての検証が [合格] になりました。
ファイアウォールはすべてを合格にするために機能自体を無効にしているので、本来は [Windows ファイアウォール] だけが警告になるのが正しいと思いますが。
image?

ネットワークのプロパティからの設定だけでなく、レジストリの変更をしないと警告が回避できないのでちょっとわかりずらいですね。

Written by Masayuki.Ozawa

4月 29th, 2010 at 4:32 am

Posted in SQL Server

SQL Server のスケーラブルな共有データベース

leave a comment

SQL Server では、読み取り専用データベースを複数のサーバーで共有してスケールアウトする手法があります。
この方法を [スケーラブルな共有データベース] と言います。

SQL Server 2008 R2 の BOL にも記載されていますね。
スケーラブルな共有データベースの概要

この設定自体は知っていたのですが、正式な名称を今日初めて知りました…。

今回はその設定方法をまとめてみたいと思います。

■環境について

今回作成した環境がこちらになります。
[2008R2-SQL-01] ~ [2008R2-SQL-03] の 3 台のサーバーと NAS 上にデータベースを用意しました。
# iSCSI で接続をしています。

[2008R2-SQL-01] でデータベースの更新を実施して、そのデータベースを [2008R2-SQL-02] [2008R2-SQL-03] で
読み取り専用のデータベースとして使用するというシナリオです。
# 実際には 2 台の SQL Server があればテストできるのですがシナリオを考慮して 3 台用意しました。

image
環境概要図

■データベースの準備

まずは、[2008R2-SQL-01] でデータベースを準備します。

データベースで使用する LUN は [読み取り/書き込み] の両方が可能なように指定してあります。
image
– [2008R2-SQL-01] で使用している LUN

今回は SQL Server の自習書でおなじみの [NorthwindJ] を用意しました。
image

スケーラブルな共有データベースを設定するためには、データベースを [読み取り専用] にする必要があります。

USE [master]
GO
ALTER DATABASE [NorthwindJ] SET? READ_ONLY WITH NO_WAIT
GO

– 読み取り専用データベースにするための SQL –

データベースを読み取り専用にすると SSMS の表示が以下のように変わります。image
– SSMS での読み取り専用データベースの表示 –

読み取り専用データベースに設定をしたら、データベースをタッチをします。
# LUN を読み取り専用にするのであればデタッチしなくても大丈夫だと思います。

USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N’NorthwindJ’
GO

これで準備完了です。

続いて参照用のサーバーでこのデータベースをアタッチします。

■読み取り専用データベースのアタッチ

今回の環境では、全 SQL Server で同一の LUN を参照しています。
読み取り専用データベースとしてアタッチするサーバーでは LUN を [読み取り専用] として設定しておきます。
# [2008R2-SQL-01] では [読み取り/書き込み] できるようにしていますが、他のサーバーでは読み取り専用とします。
image?
[2008R2-SQL-02] / [2008R2-SQL-03] の LUN の設定

LUN を読み取り専用にしているため、ディスクの管理でも [読み取り専用] として設定されています。
image
ディスクの管理の表示

?
[2008R2-SQL-01] でデータベースを設定しているため、既にドライブ内にはデータベースのファイルが存在しています。
?image
– ドライブの内容 –

それではこのデータベースをアタッチします。

USE [master]
GO
CREATE DATABASE [NorthwindJ] ON
( FILENAME = N’E:NorthwindJNorthwindJ.mdf’ ),
( FILENAME = N’E:NorthwindJNorthwindJ.ldf’ )
FOR ATTACH
GO

– アタッチの SQL –

以下が同一のデータベースファイルを複数のサーバーでアタッチした状態になります。
image?
複数のサーバーで同一ファイルをアタッチ

これで、[スケーラブルな共有データベース] の設定は完了です。

■NLB で冗長化

この環境を NLB を設定することでクライアントからの接続ポイントを固定化して、冗長化することができます。

?image?
構成概要図

image?
NLB の設定

以上で設定は完了です。

読み取り専用のデータベースなので、参照系でしか使えませんがサーバー増強 (スケールアウト) によってパフォーマンスを
向上させる方法としては面白い構成なのかな~と思います。
# ディスクがホットスポットになるので、ディスク負荷を考慮したうえで構成を検討する必要がありますが。

Written by Masayuki.Ozawa

4月 3rd, 2010 at 1:50 pm

Posted in SQL Server

SQL Server の名前付きインスタンスのポート解決について

3 comments

久しぶりに SQL Server の勉強を。今日はインスタンスのポート番号の解決について。

今回は以下の環境を使って検証しています。
ポート番号をいろいろと変更してテストを行っていたので、
?image

?

■SQL Server が使用するポートのデフォルト設定

SQL Server のインスタンスには既定のインスタンスと名前付きインスタンスの 2 種類があります。

初期設定では、既定のインスタンスの場合は、デフォルトで [TCP 1433] が使用され、名前付きインスタンスの場合は、
[動的ポート] となり使用されるポートは固定されません。

既定のインスタンスに接続する場合は [サーバー名] のみ
image

名前付きインスタンスに接続する場合は、[サーバー名インスタンス名] の形式で指定します。
image?

?

■ポートの変更

ポートの設定は、[SQL Server 構成 マネージャ] で設定することができ、デフォルトでは以下の設定となっています。

image

既定のインスタンス

名前付きインスタンス

image image

SQL Server のポート番号は任意に変更することができ、既定のインスタンスを動的ポート、名前付きインスタンスで [1433] を
設定するということもできます。

名前付きインスタンスを [TCP 1433] で動かすと、名前付きインスタンスにサーバー名だけで接続ができるようになったりもします。
下の画像のオブジェクトエクスプローラーでは [SQL-TEST] というサーバー名で接続をしているのですが、[@@servername] を
実行した結果は、[SQL-TESTINSTANCE1] となっています。
image

このようにポート 1433 で実行している SQL Server インスタンスに関しては、サーバー名で接続が可能になります。

■サーバー名だけで接続した際の挙動

Network Monitor を使ってサーバー名だけで接続した場合に使用されるポートを調べてみたいと思います。
SSMS で接続するより、SQLCMD で接続をした場合の方がポートの使用状況がわかりやすかったので、
今回は SQLCMD を使用しながら、挙動を確認していきたいと思います。

接続に使用するコマンドは以下になります。

SQLCMD ?E ?S “SQL-TEST”

この時の接続状況が以下になります。

クライアント [172.23.0.2] からサーバー [172.23.0.1] の [TCP 1433] に対して接続が行われていますね。

?image

サーバー名だけで接続をする場合は、直接 1433 に対して接続をしているのが確認できます。

?

■[サーバー名インスタンス名]で接続した場合の挙動

続いては、[サーバー名インスタンス名] で確認をしてみます。

名前付きインスタンスに接続する場合のコマンドは以下になります。

SQLCMD ?E ?S “SQL-TESTINSTANCE1”

?

この時の Network Monitor の内容が以下になります。

image

現在、[INSTANCE1] の動的ポートでは [TCP 49151] が使用されています。

image

[SQLCMD.EXE] で、172.23.0.2 から、172.23.0.1 のポート [TCP 49151] に接続している個所が、SQL Server に
接続をしている内容になります。

先ほどの既定のインスタンスへの接続と異なる個所としては、[UDP 1434] の通信が発生しているところですね。

この時のフレームサマリーが以下になります。
image

172.23.0.2 から 172.23.0.1 に [UDP 1434] で接続をし、そのあとに 172.23.0.1 の [TCP 49151] に接続をしています。

この時の [UDP 1434] の通信に使用されるサービスが、[SQL Server Browser] サービスになります。
# サーバー名だけの接続では使われないようです。

?

■SQL Server Browser サービスについて

先ほどの内容で [SQL Server Browser] サービスで [UDP 1434] が使用されていると書きました。

[SQL Server Browser] サービスは、SQL Server を起動しているサーバーで実行することのできるサービスになります。
今回の検証では、[SQL-TEST] でサービスが起動しています。
image

タスクマネージャーで確認するとプロセス ID [2896] で起動しているのが確認できますね。
# 32ビットプロセスなんですよね。
image

[netstat] コマンドを使用して、プロセス ID [2896] のポート使用状況を確認してみたいと思います。
使用するコマンドはこちらです。

netstat ?ano | find “2896”

?

実行するとこのような結果が取得できます。
[UDP 1434] がプロセス ID [2896] で実行されていることが確認できますね。
image

このサービスが何をやっているかを確認する場合は、[SQL Server Browser] サービスをサービスではなく、
コンソールモードで起動するとわかりやすいです。

コンソールモードで起動するためには、[SQL Server Browser] サービスを停止して、コマンドプロンプトで
以下のコマンドを実行します。
コンソールモードで起動すると [UDP 1434] に対してのアクセスのログがコンソールに表示されるようになります。

"C:Program Files (x86)Microsoft SQL Server90Sharedsqlbrowser.exe" -c

この状態で再度名前付きインスタンスでの接続をするとコンソールに以下の用に表示されます。
image?

172.23.0.2 から [UDP 1434] に対してアクセスがあったことを確認することができますね。

[SQL Server Browser] サービスは SQL Server のインスタンス名を指定した接続要求時に、インスタンスに対応するポートを
返答する機能になります。
# サーバー名だけで接続した場合は使用されません。そのため、既定のインスタンスのポートを変更した際には、
  SQL Server Browser が使用されないので、接続時にポート番号を指定する必要があります。
特定のインスタンスの接続をする際にポート番号を指定しなかった場合はこの機能を使用して、ポート解決をする必要があります。

下の画像が、[INSTANCE1] 接続時にクライアントから SQL Server の [UDP 1434] に対してアクセスされた際の
ネットワークフレームの情報 (Frame Number 9 の情報) になります。
パースがうまくできなかったので、[Hex Details] をみる必要があるのですが、[instance1] という情報が読み取れますね。
クライアントからサーバーに [instance1] のポート解決に対してのリクエストがされています。
image

次ネットワークフレームの情報 (Frame Number 10 の情報) が SQL Server からクライアントに対してのレスポンスになります。
こちらもパースができなかったので [Hex Details] で確認する必要があるのですが、SQL Server の情報がクライアントに渡されています。
この中にポート番号 (49195) が入っているのが確認できますね。
image

[SQL Server Browser] サーバーは、インスタンス名が指定されており、ポート番号が指定されていない場合に使用されます。
そのため、インスタンス名を指定していても、ポート番号を指定している場合は使用されません。
# [UDP 1434] にたいしてアクセスがされません。

ポート番号を指定する場合は以下のコマンドになります。

SQLCMD ?E ?S “SQL-TESTINSTANCE1,49195”

?

この場合の Network Monitor の取得内容が以下になるのですが、指定したポートに直接接続がされており、[UDP 1434] の
通信は発生していません。
image

普段何気なく使用している、[サーバー名インスタンス名] の接続ですがきちんと調べると勉強になります。

Written by Masayuki.Ozawa

2月 21st, 2010 at 7:48 am

Posted in SQL Server

SQL Server Express Edition で定期的にデータベースをバックアップ

leave a comment

以前投稿した内容に SQL Server 2008 Express Edition でメンテナンスプランの利用についてコメントをいただきました。

残念ながら SQL Server の Express Edition では、メンテナンスプランが使用できないんですよね。
SQL Server 2008 の各エディションがサポートする機能

また、SQL Server の Express Edition では SQL Server Agent も使用できないため、定期的なジョブを SQL Server 側で
実行することができません。

スキルチャージプログラムで貸与されている環境は Community Server をインストールしてあり、データベースには
SQL Server 2008 Express Edition を使用しています。
この環境ですが日次で 1 世代のバックアップだけは自動で取得する用に設定をしてあります。

メンテナンスプランと SQL Server Agent を使用できない状態で定期的にバックアップを取得するため、
タスクスケジューラ + SQLCMD.EXE を使ってバックアップのスケジューリングを設定しています。

[タスク スケジューラ] は管理ツールの中に入っています。?

このタスク スケジューラで以下のようなタスクを作成しています。
?image image
image

操作には以下のような設定を登録してあります。

操作 プログラムの開始
プログラム/スクリプト "C:Program FilesMicrosoft SQL Server100ToolsBinnSQLCMD.EXE"
引数の追加 (オプション) -S localhost<インスタンス名> -E -i "E:ToolsBackupCSDBBackup.sql"

?

CSDBBackup.sql には以下の内容を記載しています。
# SSMS で生成したスクリプトを記載しているだけですが。

BACKUP DATABASE [CommunityServer] TO? DISK = N’E:BackupCommunityServer.bak’ WITH NOFORMAT, INIT,
NAME = N’CommunityServer-完全 データベース バックアップ’, SKIP, NOREWIND, NOUNLOAD,? STATS = 10
GO

?

同様の方法でインデックスのメンテナンスも可能です。
ざっくりと作ったインデックスの再構築のクエリです。
これを SQLCMD でタスクスケジューラから実行すると定期的にインデックスの断片化を解消することができます。
# アドホッククエリで書いてしまっていますが…。

SET NOCOUNT ON
USE [CommunityServer]
GO
DECLARE @name sysname
DECLARE @SQL nvarchar(500)

SELECT * INTO [#tables] FROM [sys].[tables]

DECLARE [table_cursor] CURSOR FOR
SELECT [name] FROM [#tables]

OPEN [table_cursor]
FETCH NEXT FROM [table_cursor] INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN
??? SET @SQL = N’ALTER INDEX ALL ON [‘ + @name + ‘] REBUILD’
??? EXECUTE sp_executesql @SQL
??? FETCH NEXT FROM [table_cursor] INTO @name
END

CLOSE [table_cursor]
DEALLOCATE [table_cursor]

?

自分でクエリを書くのが面倒な場合は、定期的に実行したい操作を SSMS からスクリプト化しておけばよいと思います。

Express Edition を使っていてもデータベースのメンテナンスは定期的に実行しないと駄目ですが、無償版なので
この辺の機能がないのは仕方ないですね。

Written by Masayuki.Ozawa

1月 31st, 2010 at 3:26 pm

Posted in SQL Server