SE の雑記

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

Archive for the ‘SQL Server’ Category

SQL Azure の統計情報関連で使用できる T-SQL について

one comment

Tech・Ed で Azure コミュニティの話もあるので最近は SQL Azure の勉強などをちょくちょくしています。

今日は SQL Azure の統計情報関連で使用できる T-SQL について調べてみました。
以下の技術情報を元にしています。
Transact-SQL Reference (SQL Azure Database)

?

■システム関数

STATS_DATE テーブルまたはインデックス付きビューの統計の最終更新日を返します。

?

■システムストアドプロシージャ

sp_autostats インデックス、統計オブジェクト、テーブル、またはインデックス付きビューの自動統計更新オプション (AUTO_UPDATE_STATISTICS) を表示または変更します。
sp_createstats CREATE STATISTICS ステートメントを呼び出して、統計オブジェクトの最初の列になっていない列の統計を 1 列ずつ作成します。
sp_helpstats 指定したテーブルの列およびインデックスに関する統計を返します
sp_statistics 指定したテーブルまたはインデックス付きビュー上にあるすべてのインデックスおよび統計の一覧を返します。
sp_updatestats 現在のデータベース内にあるすべてのユーザー定義テーブルと内部テーブルに対して UPDATE STATISTICS を実行します。

?

■システムビュー

sys.stats U、V、または TF 型の表形式オブジェクトの統計ごとに 1 行のデータを保持します。
sys.stats_columns sys.stats 統計の一部である列ごとに 1 行のデータを保持します。

?

■T-SQL ステートメント

CREATE STATISTICS テーブルまたはインデックス付きビューの 1 つまたは複数の列で、クエリの最適化に関する統計 (フィルター選択された統計情報を含む) を作成します。
DBCC SHOW_STATISTICS テーブルまたはインデックス付きビューについての、現在のクエリの最適化に関する統計を表示します。
DROP STATISTICS 現在のデータベースの指定されたテーブル内で、複数のコレクションの統計を削除します。

?

■データベースプロパティ (DATABASEPROPERTYEX)

IsAutoCreateStatistics 初期値:1 (TRUE) クエリのパフォーマンスを向上させるために、クエリ オプティマイザーが必要に応じて 1 列ずつの統計を作成します。
IsAutoUpdateStatistics 初期値:1 (TRUE) クエリで使用される既存の統計が古くなっている可能性がある場合、クエリ オプティマイザーによって更新されます。

?

統計情報関連としてはこれらを利用することが可能となっているようです。

STATS_DATE 関数が使えるので、統計情報が更新されたタイミングがわかるかな~と思ったのですが、SQL Azure では、NULL に
なってしまって更新日がうまく取得できませんでした…。
統計情報の自動更新はデフォルトで有効になっているのですが、データのサイズによっては実データとの乖離が発生する可能性が
ありますので、統計情報がいつ更新されたかが取得できるとデータベース管理者としてはうれしいのですけども。

SQL Azure も SQL Server 2008 R2 とベースは同じですので、最適なクエリの実行プランを選択するためには
統計情報は重要になってくると思いますので必要に応じた定期的な統計情報のメンテナンスは実施する必要があります。

SQL Azure には SQL Server Agent サービスがないので、SQL Azure 以外の機能で定期的にメンテナンスする必要がありますが。
# 開発をやらないのでこの辺のスキルが薄い…。

こういう情報調べるのって楽しいです♪

Written by Masayuki.Ozawa

8月 21st, 2010 at 2:09 pm

Posted in SQL Server

SQL Azure で使用可能な動的管理ビュー

leave a comment

今日は通勤中に SQL Azure の自習書を読んでいました。

SQL Azure 入門

読んでいて SQL Azure で動的管理ビュー (DMV) はどの程度使用できるんだろうというのが気になりました。
自習書の中に System Views (SQL Azure Database) へのリンクがあり、この技術情報が使用可能な
DMV についての情報となるようですね。

この技術情報の中に [Dynamic Management Views] というセクションがあり DMV について記載されています。

SQL Server 2008 R2 の SSMS で SQL Azure に接続して、システムビューから利用可能な DMV を確認してみました。
# 技術情報の英語を読むのを逃げました…。

DMV 名 説明 (BOL から抜粋)
sys.dm_database_copies (*) BOL には記載なし (SQL Azure 特有の DMV)
sys.dm_db_partition_stats 現在のデータベースのパーティションごとに、ページ数と行数の情報を返します。
sys.dm_exec_connections このインスタンスの SQL Server との間に確立された接続に関する情報と各接続の詳細を返します。
sys.dm_exec_query_stats キャッシュされたクエリ プランの集計パフォーマンス統計を返します
sys.dm_exec_requests SQL Server 内で実行中の各要求に関する情報を返します。
sys.dm_exec_sessions SQL Server での認証済みセッションごとに 1 行を返します。
sys.dm_tran_active_transactions SQL Server のインスタンスのトランザクションに関する情報を返します。
sys.dm_tran_database_transactions データベース レベルのトランザクションに関する情報を返します。
sys.dm_tran_locks 現在アクティブなロック マネージャのリソースに関する情報を返します。
sys.dm_tran_session_transactions 関連付けられたトランザクションとセッションの相関関係情報を返します。

(*) master データベースにのみ存在している DMV

この中で、[sys.dm_database_copies] に関しては SQL Azure 特有の DMV になるようですね。
SQL Server 2008 R2 のBooks Online (BOL) にはこの DMV についての記載はありませんでした。

自習書にも書かれていたのですが、現在インデックスの断片化を見ることができる DMV は現在、提供されていないのですね。
インデックスの断片化や欠落したインデックス (missing index) は SQL Azure でも見れると便利そうなのですがこの辺は今後に期待でしょうか。

SQL Azure を運用する際に、データベースエンジニアとしてどのようにして DB のヘルスチェックをするかは見れる情報が
限定されているので悩ましいですね。

Written by Masayuki.Ozawa

8月 16th, 2010 at 2:47 pm

Posted in SQL Server

SQL Server 2008 R2 と SQL Azure のサーバー / データベースプロパティの比較

leave a comment

最近、SQL Server に触ることもなかったので久しぶりに勉強を。

SQL Server 2008 R2 と SQL Azure のサーバープロパティ / データベースプロパティはどのくらい違うのかが
気になったので調べてみました。

■サーバープロパティの比較

まずはサーバープロパティの比較から。

使用した SQL は以下になります。
SQL Server 2008 R2 / SQL Azure 共に同じ SQL で実行可能です。

SELECT
SERVERPROPERTY(‘BuildClrVersion’) AS BuildClrVersion,
SERVERPROPERTY(‘Collation’) AS Collation,
SERVERPROPERTY(‘CollationID’) AS CollationID,
SERVERPROPERTY(‘ComparisonStyle’) AS ComparisonStyle,
SERVERPROPERTY(‘ComputerNamePhysicalNetBIOS’) AS ComputerNamePhysicalNetBIOS,
SERVERPROPERTY(‘Edition’) AS Edition,
SERVERPROPERTY(‘EditionID’) AS EditionID,
SERVERPROPERTY(‘EngineEdition’) AS EngineEdition,
SERVERPROPERTY(‘InstanceName’) AS InstanceName,
SERVERPROPERTY(‘IsClustered’) AS IsClustered,
SERVERPROPERTY(‘IsFullTextInstalled’) AS IsFullTextInstalled,
SERVERPROPERTY(‘IsIntegratedSecurityOnly’) AS IsIntegratedSecurityOnly,
SERVERPROPERTY(‘IsSingleUser’) AS IsSingleUser,
SERVERPROPERTY(‘LCID’) AS LCID,
SERVERPROPERTY(‘LicenseType’) AS LicenseType,
SERVERPROPERTY(‘MachineName’) AS MachineName,
SERVERPROPERTY(‘NumLicenses’) AS NumLicenses,
SERVERPROPERTY(‘ProcessID’) AS ProcessID,
SERVERPROPERTY(‘ProductVersion’) AS ProductVersion,
SERVERPROPERTY(‘ProductLevel’) AS ProductLevel,
SERVERPROPERTY(‘ResourceLastUpdateDateTime’) AS ResourceLastUpdateDateTime,
SERVERPROPERTY(‘ResourceVersion’) AS ResourceVersion,
SERVERPROPERTY(‘ServerName’) AS ServerName,
SERVERPROPERTY(‘SqlCharSet’) AS SqlCharSet,
SERVERPROPERTY(‘SqlCharSetName’) AS SqlCharSetName,
SERVERPROPERTY(‘SqlSortOrder’) AS SqlSortOrder,
SERVERPROPERTY(‘SqlSortOrderName’) AS SqlSortOrderName,
SERVERPROPERTY(‘FilestreamShareName’) AS FilestreamShareName,
SERVERPROPERTY(‘FilestreamConfiguredLevel’) AS FilestreamConfiguredLevel,
SERVERPROPERTY(‘FilestreamEffectiveLevel’) AS FilestreamEffectiveLevel

?

実行結果がこちら。

? SQL Server 2008 R2 SQL Azure
BuildClrVersion v2.0.50727 NULL
Collation <インストール時の照合順序> SQL_Latin1_General_CP1_CI_AS
CollationID 315464 872468488
ComparisonStyle 196609 196609
ComputerNamePhysicalNetBIOS <サーバー名> NULL
Edition <エディション名> SQL Azure
EditionID -2117995310 1674378470
EngineEdition 3 5
InstanceName <インスタンス名> NULL
IsClustered 0 NULL
IsFullTextInstalled 1 0
IsIntegratedSecurityOnly 0 0
IsSingleUser 0 0
LCID 1041 1033
LicenseType DISABLED DISABLED
MachineName <サーバー名> NULL
NumLicenses NULL NULL
ProcessID 1488 NULL
ProductVersion 10.50.1600.1 10.25.9386.0
ProductLevel RTM RTM
ResourceLastUpdateDateTime 2010-04-02 17:38:24.957 2010-06-16 17:08:33.043
ResourceVersion 10.50.1600 10.25.9346
ServerName <サーバー名><インスタンス名> <サーバー名>
SqlCharSet 109 1
SqlCharSetName cp932 iso_1
SqlSortOrder 0 52
SqlSortOrderName bin_ascii_8 nocase_iso
FilestreamShareName <共有名> NULL
FilestreamConfiguredLevel 0 0
FilestreamEffectiveLevel 0 0

2008 R2 の環境は日本語なのですが、キャラセット系はやはり異なりますね。
SQL Azure ではフルテキスト検索がインストールされていないんですね。

■データベースプロパティの比較

続いては、master データベースのプロパティを比較してみました。
# ユーザーデータベースも比較したのですが同じだったのでこちらを。

使用した SQL はこちらになります。

SELECT
DATABASEPROPERTYEX (N’master’,’Collation’) AS Collation,
DATABASEPROPERTYEX (N’master’,’ComparisonStyle’) AS ComparisonStyle,
DATABASEPROPERTYEX (N’master’,’IsAnsiNullDefault’) AS IsAnsiNullDefault,
DATABASEPROPERTYEX (N’master’,’IsAnsiNullsEnabled’) AS IsAnsiNullsEnabled,
DATABASEPROPERTYEX (N’master’,’IsAnsiPaddingEnabled’) AS IsAnsiPaddingEnabled,
DATABASEPROPERTYEX (N’master’,’IsAnsiWarningsEnabled’) AS IsAnsiWarningsEnabled,
DATABASEPROPERTYEX (N’master’,’IsArithmeticAbortEnabled’) AS IsArithmeticAbortEnabled,
DATABASEPROPERTYEX (N’master’,’IsAutoClose’) AS IsAutoClose,
DATABASEPROPERTYEX (N’master’,’IsAutoCreateStatistics’) AS IsAutoCreateStatistics,
DATABASEPROPERTYEX (N’master’,’IsAutoShrink’) AS IsAutoShrink,
DATABASEPROPERTYEX (N’master’,’IsAutoUpdateStatistics’) AS IsAutoUpdateStatistics,
DATABASEPROPERTYEX (N’master’,’IsCloseCursorsOnCommitEnabled’) AS IsCloseCursorsOnCommitEnabled,
DATABASEPROPERTYEX (N’master’,’IsFulltextEnabled’) AS IsFulltextEnabled,
DATABASEPROPERTYEX (N’master’,’IsInStandBy’) AS IsInStandBy,
DATABASEPROPERTYEX (N’master’,’IsLocalCursorsDefault’) AS IsLocalCursorsDefault,
DATABASEPROPERTYEX (N’master’,’IsMergePublished’) AS IsMergePublished,
DATABASEPROPERTYEX (N’master’,’IsNullConcat’) AS IsNullConcat,
DATABASEPROPERTYEX (N’master’,’IsNumericRoundAbortEnabled’) AS IsNumericRoundAbortEnabled,
DATABASEPROPERTYEX (N’master’,’IsParameterizationForced’) AS IsParameterizationForced,
DATABASEPROPERTYEX (N’master’,’IsQuotedIdentifiersEnabled’) AS IsQuotedIdentifiersEnabled,
DATABASEPROPERTYEX (N’master’,’IsPublished’) AS IsPublished,
DATABASEPROPERTYEX (N’master’,’IsRecursiveTriggersEnabled’) AS IsRecursiveTriggersEnabled,
DATABASEPROPERTYEX (N’master’,’IsSubscribed’) AS IsSubscribed,
DATABASEPROPERTYEX (N’master’,’IsSyncWithBackup’) AS IsSyncWithBackup,DATABASEPROPERTYEX (N’master’,’IsTornPageDetectionEnabled’) AS IsTornPageDetectionEnabled,
DATABASEPROPERTYEX (N’master’,’LCID’) AS LCID,
DATABASEPROPERTYEX (N’master’,’Recovery’) AS Recovery,
DATABASEPROPERTYEX (N’master’,’SQLSortOrder’) AS SQLSortOrder,
DATABASEPROPERTYEX (N’master’,’Status’) AS Status,
DATABASEPROPERTYEX (N’master’,’Updateability’) AS Updateability,
DATABASEPROPERTYEX (N’master’,’UserAccess’) AS UserAccess,
DATABASEPROPERTYEX (N’master’,’Version’) AS Version

?

注意点としては、SQL Azure ではフルテキスト検索が使えませんので、SQL Azure で実行する場合は、
[DATABASEPROPERTYEX (N’master’,’IsFulltextEnabled’) AS IsFulltextEnabled,] の行はコメント化する必要があります。

? SQL Server 2008 R2 SQL Azure
Collation <サーバーレベルの照合順序> SQL_Latin1_General_CP1_CI_AS
ComparisonStyle 196609 196609
IsAnsiNullDefault 0 0
IsAnsiNullsEnabled 0 0
IsAnsiPaddingEnabled 0 0
IsAnsiWarningsEnabled 0 0
IsArithmeticAbortEnabled 0 0
IsAutoClose 0 0
IsAutoCreateStatistics 1 1
IsAutoShrink 0 0
IsAutoUpdateStatistics 1 1
IsCloseCursorsOnCommitEnabled 0 0
IsFulltextEnabled 0 <設定なし>
IsInStandBy 0 0
IsLocalCursorsDefault 0 0
IsMergePublished 0 0
IsNullConcat 0 0
IsNumericRoundAbortEnabled 0 0
IsParameterizationForced 0 0
IsQuotedIdentifiersEnabled 0 0
IsPublished 0 0
IsRecursiveTriggersEnabled 0 0
IsSubscribed 0 0
IsSyncWithBackup 0 0
IsTornPageDetectionEnabled 0 0
LCID 1041 1033
Recovery SIMPLE FULL
SQLSortOrder 0 52
Status ONLINE ONLINE
Updateability READ_WRITE READ_WRITE
UserAccess MULTI_USER MULTI_USER
Version 661 1105

面白いな~と思ったのは、SQL Azure で作成されるデータベースは復旧モデルが [フル] になっていることろですね。
オンプレミスの SQL Server では、[master] データベースの復旧モデルは [シンプル] なのですが、SQL Azure では
[master] データベースも含めて [フル] となっているようです。

SQL Azure はまだあまり触れていないので、これから頑張って勉強していきたいと思います。

Written by Masayuki.Ozawa

8月 16th, 2010 at 12:24 pm

Posted in SQL Server

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