# API設計書

## 概要

本ドキュメントはSQL Server First Responder Kitのストアドプロシージャ（API）を定義したものです。このプロジェクトはHTTP REST APIではなく、SQL Serverのストアドプロシージャとして機能するデータベース診断・管理ツール群を提供します。各ストアドプロシージャは入力パラメータを受け取り、結果セットを返すことでAPIとして機能します。

## 共通仕様

### 呼び出し方式

```sql
EXEC dbo.{ストアドプロシージャ名} @パラメータ1 = 値1, @パラメータ2 = 値2, ...;
```

### 対応環境

| 環境 | サポート状況 |
| --- | --- |
| SQL Server on Windows | 完全サポート（Microsoftサポート対象バージョン） |
| SQL Server on Linux | 完全サポート（sp_DatabaseRestoreを除く） |
| Amazon RDS SQL Server | 完全サポート |
| Azure SQL DB | 限定的サポート（一部のプロシージャのみ動作） |

### 共通パラメータ

以下のパラメータは多くのストアドプロシージャで共通して使用できます。

| パラメータ名 | 型 | デフォルト | 説明 |
| --- | --- | --- | --- |
| @Help | TINYINT/BIT | 0 | 1に設定するとヘルプメッセージを表示 |
| @ExpertMode | TINYINT | 0 | 1に設定すると詳細な結果を表示 |
| @OutputDatabaseName | NVARCHAR(256) | NULL | 結果を出力するデータベース名 |
| @OutputSchemaName | NVARCHAR(256) | NULL | 結果を出力するスキーマ名 |
| @OutputTableName | NVARCHAR(256) | NULL | 結果を出力するテーブル名 |
| @OutputServerName | NVARCHAR(256) | NULL | リンクサーバー経由で結果を出力する場合のサーバー名 |
| @Debug | TINYINT/BIT | 0 | デバッグメッセージを表示 |
| @Version | VARCHAR(30) | OUTPUT | バージョン番号を返す出力パラメータ |
| @VersionDate | DATETIME | OUTPUT | バージョン日付を返す出力パラメータ |
| @VersionCheckMode | BIT | 0 | 1に設定するとバージョン情報のみ返す |

### 共通出力形式

多くのプロシージャは@OutputTypeパラメータで出力形式を制御できます。

| 値 | 説明 |
| --- | --- |
| TABLE | テーブル形式で結果を返す（デフォルト） |
| COUNT | 見つかった問題の件数のみ返す |
| MARKDOWN | マークダウン形式で結果を返す |
| SCHEMA | スキーマ情報のみ返す |
| XML | XML形式で結果を返す |
| NONE | 結果を返さず出力テーブルにのみ書き込む |

## API一覧

| カテゴリ | ストアドプロシージャ | 説明 |
| --- | --- | --- |
| ヘルスチェック | sp_Blitz | サーバー全体の健康状態をチェック |
| パフォーマンス | sp_BlitzCache | プランキャッシュからリソース集約型クエリを分析 |
| パフォーマンス | sp_BlitzFirst | リアルタイムのパフォーマンス問題を診断 |
| インデックス | sp_BlitzIndex | インデックスの設計とパフォーマンスを分析 |
| パフォーマンス | sp_BlitzLock | デッドロックを分析 |
| パフォーマンス | sp_BlitzWho | 現在実行中のクエリを表示 |
| 分析 | sp_BlitzAnalysis | sp_BlitzFirst出力テーブルを分析 |
| バックアップ | sp_BlitzBackups | バックアップ状況とRPO/RTOを分析 |
| リストア | sp_DatabaseRestore | データベースリストアを実行 |
| ユーティリティ | sp_ineachdb | 複数データベースでコマンドを実行 |

## 各APIエンドポイント定義

### ヘルスチェック

#### 1. sp_Blitz - サーバー全体健康チェック

SQL Serverの健康状態をチェックし、優先順位付きの問題リストを返します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_Blitz` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @Help | TINYINT | - | 0 | ヘルプを表示 |
| @CheckUserDatabaseObjects | TINYINT | - | 1 | ユーザーDBのトリガー、ヒープ等をチェック |
| @CheckProcedureCache | TINYINT | - | 0 | プロシージャキャッシュをチェック |
| @OutputType | VARCHAR(20) | - | 'TABLE' | 出力形式（TABLE/COUNT/MARKDOWN/SCHEMA/XML/NONE） |
| @OutputProcedureCache | TINYINT | - | 0 | プロシージャキャッシュを出力に含める |
| @CheckProcedureCacheFilter | VARCHAR(10) | - | NULL | キャッシュフィルタ（CPU/Reads/Duration/ExecCount） |
| @CheckServerInfo | TINYINT | - | 0 | サーバー情報を含める |
| @SkipChecksServer | NVARCHAR(256) | - | NULL | スキップするサーバー名 |
| @SkipChecksDatabase | NVARCHAR(256) | - | NULL | スキップチェックのDB名 |
| @SkipChecksSchema | NVARCHAR(256) | - | NULL | スキップチェックのスキーマ名 |
| @SkipChecksTable | NVARCHAR(256) | - | NULL | スキップチェックのテーブル名 |
| @IgnorePrioritiesBelow | INT | - | NULL | この優先度より低いものを無視 |
| @IgnorePrioritiesAbove | INT | - | NULL | この優先度より高いものを無視 |
| @OutputServerName | NVARCHAR(256) | - | NULL | 出力先サーバー名 |
| @OutputDatabaseName | NVARCHAR(256) | - | NULL | 出力先DB名 |
| @OutputSchemaName | NVARCHAR(256) | - | NULL | 出力先スキーマ名 |
| @OutputTableName | NVARCHAR(256) | - | NULL | 出力先テーブル名 |
| @OutputXMLasNVARCHAR | TINYINT | - | 0 | XMLをNVARCHARとして出力 |
| @EmailRecipients | VARCHAR(MAX) | - | NULL | メール送信先 |
| @EmailProfile | sysname | - | NULL | メールプロファイル |
| @SummaryMode | TINYINT | - | 0 | サマリーモード |
| @BringThePain | TINYINT | - | 0 | 50以上のDBで@CheckUserDatabaseObjects=1を許可 |
| @UsualDBOwner | sysname | - | NULL | 通常のDBオーナー |
| @UsualOwnerOfJobs | sysname | - | NULL | ジョブの通常オーナー |
| @SkipBlockingChecks | TINYINT | - | 1 | ブロッキングチェックをスキップ |
| @Debug | TINYINT | - | 0 | デバッグモード（0=無効、1=メッセージ、2=動的クエリ表示） |

**レスポンス（結果セット）**

| フィールド名 | 型 | 説明 |
| --- | --- | --- |
| Priority | TINYINT | 優先度（1が最も緊急） |
| FindingsGroup | VARCHAR(50) | 問題のグループ |
| Finding | VARCHAR(200) | 問題の説明 |
| DatabaseName | NVARCHAR(128) | 対象データベース名 |
| URL | VARCHAR(200) | 詳細情報へのURL |
| Details | NVARCHAR(4000) | 詳細情報 |
| QueryPlan | NVARCHAR(MAX) | クエリプラン |
| QueryPlanFiltered | NVARCHAR(MAX) | フィルタ済みクエリプラン |
| CheckID | INT | チェックID |

**使用例**

```sql
-- 基本的な実行
EXEC sp_Blitz;

-- 結果をテーブルに出力
EXEC sp_Blitz
    @OutputDatabaseName = 'DBAtools',
    @OutputSchemaName = 'dbo',
    @OutputTableName = 'BlitzResults';

-- 優先度50以下のみ表示
EXEC sp_Blitz @IgnorePrioritiesAbove = 50;
```

---

### パフォーマンス分析

#### 2. sp_BlitzCache - クエリプランキャッシュ分析

プランキャッシュからリソース集約型クエリを特定し、パフォーマンス問題を分析します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_BlitzCache` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @Help | BIT | - | 0 | ヘルプを表示 |
| @Top | INT | - | NULL | 取得するレコード数 |
| @SortOrder | VARCHAR(50) | - | 'CPU' | ソート順序（CPU/Reads/Writes/Duration/Executions/Memory Grant/Spills等） |
| @UseTriggersAnyway | BIT | - | NULL | SQL 2008R2以前でもトリガーを含める |
| @ExportToExcel | BIT | - | 0 | Excel出力用に整形 |
| @ExpertMode | TINYINT | - | 0 | 詳細モード（1=詳細、2=Opserver最適化） |
| @OutputType | VARCHAR(20) | - | 'TABLE' | 出力形式 |
| @OutputServerName | NVARCHAR(258) | - | NULL | 出力サーバー名 |
| @OutputDatabaseName | NVARCHAR(258) | - | NULL | 出力DB名 |
| @OutputSchemaName | NVARCHAR(258) | - | NULL | 出力スキーマ名 |
| @OutputTableName | NVARCHAR(258) | - | NULL | 出力テーブル名 |
| @ConfigurationDatabaseName | NVARCHAR(128) | - | NULL | 設定DB名 |
| @ConfigurationSchemaName | NVARCHAR(258) | - | NULL | 設定スキーマ名 |
| @ConfigurationTableName | NVARCHAR(258) | - | NULL | 設定テーブル名 |
| @DurationFilter | DECIMAL(38,4) | - | NULL | 期間フィルタ |
| @HideSummary | BIT | - | 0 | サマリーを非表示 |
| @IgnoreSystemDBs | BIT | - | 1 | システムDBを無視 |
| @IgnoreReadableReplicaDBs | BIT | - | 1 | 読み取り可能レプリカDBを無視 |
| @OnlyQueryHashes | VARCHAR(MAX) | - | NULL | 特定のクエリハッシュのみ分析 |
| @IgnoreQueryHashes | VARCHAR(MAX) | - | NULL | 特定のクエリハッシュを除外 |
| @OnlySqlHandles | VARCHAR(MAX) | - | NULL | 特定のSQLハンドルのみ分析 |
| @IgnoreSqlHandles | VARCHAR(MAX) | - | NULL | 特定のSQLハンドルを除外 |
| @QueryFilter | VARCHAR(10) | - | 'ALL' | クエリフィルタ |
| @DatabaseName | NVARCHAR(128) | - | NULL | 特定のDB名でフィルタ |
| @StoredProcName | NVARCHAR(128) | - | NULL | 特定のストアドプロシージャ名 |
| @SlowlySearchPlansFor | NVARCHAR(4000) | - | NULL | プラン内を検索する文字列 |
| @Reanalyze | BIT | - | 0 | 再分析 |
| @SkipAnalysis | BIT | - | 0 | 分析をスキップ |
| @BringThePain | BIT | - | 0 | 大量データ取得を許可 |
| @MinimumExecutionCount | INT | - | 0 | 最小実行回数 |
| @Debug | TINYINT | - | 0 | デバッグモード |
| @CheckDateOverride | DATETIMEOFFSET | - | NULL | チェック日時オーバーライド |
| @MinutesBack | INT | - | NULL | 過去X分のデータを取得 |
| @AI | TINYINT | - | 0 | AI分析（1=アドバイス取得、2=プロンプト生成のみ） |
| @AIModel | VARCHAR(200) | - | NULL | AIモデル（デフォルト: gpt-4.1-mini） |
| @AIURL | VARCHAR(200) | - | NULL | AI APIのURL |
| @AICredential | VARCHAR(200) | - | NULL | AI認証情報 |
| @AIConfig | NVARCHAR(500) | - | NULL | AI設定テーブル |
| @KeepCRLF | BIT | - | 0 | 改行を保持 |

**レスポンス（主要結果セット）**

| フィールド名 | 型 | 説明 |
| --- | --- | --- |
| Database | sysname | データベース名 |
| QueryType | NVARCHAR(258) | クエリタイプ |
| AverageCPU | DECIMAL(38,4) | 平均CPU |
| TotalCPU | DECIMAL(38,4) | 合計CPU |
| AverageReads | BIGINT | 平均読み取り |
| TotalReads | BIGINT | 合計読み取り |
| ExecutionCount | BIGINT | 実行回数 |
| QueryText | NVARCHAR(MAX) | クエリテキスト |
| QueryPlan | XML | クエリプラン |
| Warnings | VARCHAR(MAX) | 警告 |
| PlanCreationTime | DATETIME | プラン作成日時 |
| LastExecutionTime | DATETIME | 最終実行日時 |

**使用例**

```sql
-- CPU順でトップ10を取得
EXEC sp_BlitzCache @Top = 10, @SortOrder = 'CPU';

-- 読み取り順でソート
EXEC sp_BlitzCache @SortOrder = 'Reads';

-- 特定のデータベースのみ分析
EXEC sp_BlitzCache @DatabaseName = 'MyDatabase';
```

---

#### 3. sp_BlitzFirst - リアルタイムパフォーマンス診断

現在のパフォーマンス問題をリアルタイムで診断します。DMVからサンプルを取得し、差分を分析します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_BlitzFirst` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @LogMessage | NVARCHAR(4000) | - | NULL | ログメッセージを記録 |
| @Help | TINYINT | - | 0 | ヘルプを表示 |
| @AsOf | DATETIMEOFFSET | - | NULL | 特定日時の分析 |
| @ExpertMode | TINYINT | - | 0 | 詳細モード（0=基本、1=詳細+sp_BlitzWho、2=詳細のみ） |
| @Seconds | INT | - | 5 | サンプリング間隔（秒） |
| @OutputType | VARCHAR(20) | - | 'TABLE' | 出力形式 |
| @OutputServerName | NVARCHAR(256) | - | NULL | 出力サーバー名 |
| @OutputDatabaseName | NVARCHAR(256) | - | NULL | 出力DB名 |
| @OutputSchemaName | NVARCHAR(256) | - | NULL | 出力スキーマ名 |
| @OutputTableName | NVARCHAR(256) | - | NULL | 出力テーブル名 |
| @OutputTableNameFileStats | NVARCHAR(256) | - | NULL | ファイル統計出力テーブル |
| @OutputTableNamePerfmonStats | NVARCHAR(256) | - | NULL | Perfmon統計出力テーブル |
| @OutputTableNameWaitStats | NVARCHAR(256) | - | NULL | 待機統計出力テーブル |
| @OutputTableNameBlitzCache | NVARCHAR(256) | - | NULL | BlitzCache出力テーブル |
| @OutputTableNameBlitzWho | NVARCHAR(256) | - | NULL | BlitzWho出力テーブル |
| @OutputResultSets | NVARCHAR(500) | - | 標準セット | 出力する結果セット |
| @OutputTableRetentionDays | TINYINT | - | 7 | 出力テーブル保持日数 |
| @OutputXMLasNVARCHAR | TINYINT | - | 0 | XMLをNVARCHARとして出力 |
| @FilterPlansByDatabase | VARCHAR(MAX) | - | NULL | データベースでプランをフィルタ |
| @CheckProcedureCache | TINYINT | - | 0 | プロシージャキャッシュをチェック |
| @CheckServerInfo | TINYINT | - | 1 | サーバー情報をチェック |
| @FileLatencyThresholdMS | INT | - | 100 | ファイル遅延閾値（ミリ秒） |
| @SinceStartup | TINYINT | - | 0 | 起動時からの統計を使用 |
| @ShowSleepingSPIDs | TINYINT | - | 0 | スリープ中のSPIDを表示 |
| @BlitzCacheSkipAnalysis | BIT | - | 1 | BlitzCache分析をスキップ |
| @MemoryGrantThresholdPct | DECIMAL(5,2) | - | 15.00 | メモリ付与閾値（%） |
| @LogMessageCheckID | INT | - | 38 | ログメッセージのチェックID |
| @LogMessagePriority | TINYINT | - | 1 | ログメッセージの優先度 |
| @LogMessageFindingsGroup | VARCHAR(50) | - | 'Logged Message' | ログメッセージのグループ |
| @LogMessageFinding | VARCHAR(200) | - | 'Logged from sp_BlitzFirst' | ログメッセージの説明 |
| @LogMessageURL | VARCHAR(200) | - | '' | ログメッセージのURL |
| @LogMessageCheckDate | DATETIMEOFFSET | - | NULL | ログメッセージの日時 |
| @Debug | BIT | - | 0 | デバッグモード |

**レスポンス（主要結果セット）**

| フィールド名 | 型 | 説明 |
| --- | --- | --- |
| Priority | TINYINT | 優先度 |
| FindingsGroup | VARCHAR(50) | 問題グループ |
| Finding | VARCHAR(200) | 問題の説明 |
| Details | NVARCHAR(4000) | 詳細 |
| URL | VARCHAR(200) | 詳細情報URL |

**使用例**

```sql
-- 基本的な実行（5秒サンプリング）
EXEC sp_BlitzFirst;

-- 30秒のサンプリング
EXEC sp_BlitzFirst @Seconds = 30;

-- テーブルに記録（定期実行用）
EXEC sp_BlitzFirst
    @OutputDatabaseName = 'DBAtools',
    @OutputSchemaName = 'dbo',
    @OutputTableName = 'BlitzFirst',
    @OutputTableNameFileStats = 'BlitzFirst_FileStats',
    @OutputTableNamePerfmonStats = 'BlitzFirst_PerfmonStats',
    @OutputTableNameWaitStats = 'BlitzFirst_WaitStats';
```

---

#### 4. sp_BlitzLock - デッドロック分析

システムヘルスセッションまたはカスタム拡張イベントセッションからデッドロックを分析します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_BlitzLock` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @DatabaseName | sysname | - | NULL | フィルタするDB名 |
| @StartDate | datetime | - | NULL | 検索開始日（デフォルト: 過去7日） |
| @EndDate | datetime | - | NULL | 検索終了日（デフォルト: 現在） |
| @ObjectName | nvarchar(1024) | - | NULL | テーブル名（Database.Schema.Table形式） |
| @StoredProcName | nvarchar(1024) | - | NULL | ストアドプロシージャ名 |
| @AppName | sysname | - | NULL | アプリケーション名でフィルタ |
| @HostName | sysname | - | NULL | ホスト名でフィルタ |
| @LoginName | sysname | - | NULL | ログイン名でフィルタ |
| @EventSessionName | sysname | - | 'system_health' | 拡張イベントセッション名 |
| @TargetSessionType | sysname | - | NULL | セッションタイプ（ring_buffer/event_file/table） |
| @VictimsOnly | bit | - | 0 | 犠牲者のみ表示 |
| @DeadlockType | nvarchar(20) | - | NULL | デッドロックタイプ（regular/parallel） |
| @TargetDatabaseName | sysname | - | NULL | デッドロックXMLが格納されているDB名 |
| @TargetSchemaName | sysname | - | NULL | デッドロックXMLが格納されているスキーマ名 |
| @TargetTableName | sysname | - | NULL | デッドロックXMLが格納されているテーブル名 |
| @TargetColumnName | sysname | - | NULL | デッドロックXMLが格納されている列名 |
| @TargetTimestampColumnName | sysname | - | NULL | タイムスタンプ列名（日付フィルタ用） |
| @Debug | bit | - | 0 | デバッグモード |
| @Help | bit | - | 0 | ヘルプを表示 |
| @OutputDatabaseName | sysname | - | NULL | 出力DB名 |
| @OutputSchemaName | sysname | - | 'dbo' | 出力スキーマ名 |
| @OutputTableName | sysname | - | 'BlitzLock' | 出力テーブル名 |
| @ExportToExcel | bit | - | 0 | Excel出力用に整形 |

**使用例**

```sql
-- 基本的な実行
EXEC sp_BlitzLock;

-- 特定のデータベースでフィルタ
EXEC sp_BlitzLock @DatabaseName = 'MyDatabase';

-- 過去24時間のみ
EXEC sp_BlitzLock
    @StartDate = DATEADD(HOUR, -24, GETDATE()),
    @EndDate = GETDATE();
```

---

#### 5. sp_BlitzWho - 現在実行中のクエリ

現在実行中のすべてのクエリのスナップショットを取得します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_BlitzWho` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @Help | TINYINT | - | 0 | ヘルプを表示 |
| @ShowSleepingSPIDs | TINYINT | - | 0 | スリープ中のSPIDを表示 |
| @ExpertMode | BIT | - | 0 | 詳細モード |
| @Debug | BIT | - | 0 | デバッグモード |
| @OutputDatabaseName | NVARCHAR(256) | - | NULL | 出力DB名 |
| @OutputSchemaName | NVARCHAR(256) | - | NULL | 出力スキーマ名 |
| @OutputTableName | NVARCHAR(256) | - | NULL | 出力テーブル名 |
| @OutputTableRetentionDays | TINYINT | - | 3 | 出力テーブル保持日数 |
| @MinElapsedSeconds | INT | - | 0 | 最小経過秒数 |
| @MinCPUTime | INT | - | 0 | 最小CPU時間 |
| @MinLogicalReads | INT | - | 0 | 最小論理読み取り |
| @MinPhysicalReads | INT | - | 0 | 最小物理読み取り |
| @MinWrites | INT | - | 0 | 最小書き込み |
| @MinTempdbMB | INT | - | 0 | 最小TempDB使用量（MB） |
| @MinRequestedMemoryKB | INT | - | 0 | 最小要求メモリ（KB） |
| @MinBlockingSeconds | INT | - | 0 | 最小ブロッキング秒数 |
| @CheckDateOverride | DATETIMEOFFSET | - | NULL | チェック日時オーバーライド |
| @ShowActualParameters | BIT | - | 0 | 実際のパラメータを表示 |
| @GetOuterCommand | BIT | - | 0 | 外部コマンドを取得 |
| @GetLiveQueryPlan | BIT | - | NULL | ライブクエリプランを取得 |
| @SortOrder | NVARCHAR(256) | - | 'elapsed time' | ソート順序 |

**使用例**

```sql
-- 基本的な実行
EXEC sp_BlitzWho;

-- スリープ中のセッションも含める
EXEC sp_BlitzWho @ShowSleepingSPIDs = 1;

-- 実行時間5秒以上のみ
EXEC sp_BlitzWho @MinElapsedSeconds = 5;
```

---

### インデックス分析

#### 6. sp_BlitzIndex - インデックス分析

インデックスの設計とパフォーマンスを分析し、改善提案を行います。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_BlitzIndex` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @ObjectName | NVARCHAR(386) | - | NULL | オブジェクト名（dbname.schema.table形式） |
| @DatabaseName | NVARCHAR(128) | - | NULL | データベース名（未指定時は現在のDB） |
| @SchemaName | NVARCHAR(128) | - | NULL | スキーマ名（@TableNameと併用） |
| @TableName | NVARCHAR(261) | - | NULL | テーブル名（@SchemaNameと併用） |
| @Mode | TINYINT | - | 0 | モード（0=診断、1=サマリー、2=インデックス使用詳細、3=欠落インデックス詳細、4=診断詳細） |
| @Filter | TINYINT | - | 0 | フィルタ（0=なし、1=読み取り0のオブジェクトの警告なし、2=500MB以上のみ） |
| @SkipPartitions | BIT | - | 0 | パーティションをスキップ |
| @SkipStatistics | BIT | - | 1 | 統計をスキップ |
| @UsualStatisticsSamplingPercent | FLOAT | - | 100 | 通常の統計サンプリング率 |
| @GetAllDatabases | BIT | - | 0 | 全データベースを分析 |
| @ShowColumnstoreOnly | BIT | - | 0 | 列ストアのみ表示 |
| @BringThePain | BIT | - | 0 | 50以上のDBで分析を許可 |
| @IgnoreDatabases | NVARCHAR(MAX) | - | NULL | 除外するDB（カンマ区切り） |
| @ThresholdMB | INT | - | 250 | 最小オブジェクトサイズ（MB） |
| @OutputType | VARCHAR(20) | - | 'TABLE' | 出力形式 |
| @OutputServerName | NVARCHAR(256) | - | NULL | 出力サーバー名 |
| @OutputDatabaseName | NVARCHAR(256) | - | NULL | 出力DB名 |
| @OutputSchemaName | NVARCHAR(256) | - | NULL | 出力スキーマ名 |
| @OutputTableName | NVARCHAR(261) | - | NULL | 出力テーブル名 |
| @IncludeInactiveIndexes | BIT | - | 0 | 非アクティブインデックスを含める |
| @ShowAllMissingIndexRequests | BIT | - | 0 | 全欠落インデックスを表示 |
| @ShowPartitionRanges | BIT | - | 0 | パーティション範囲を表示 |
| @SortOrder | NVARCHAR(50) | - | NULL | ソート順序（@Mode=2のみ） |
| @SortDirection | NVARCHAR(4) | - | 'DESC' | ソート方向（@Mode=2のみ） |
| @Help | TINYINT | - | 0 | ヘルプを表示 |
| @Debug | BIT | - | 0 | デバッグモード |

**使用例**

```sql
-- 現在のデータベースを分析
EXEC sp_BlitzIndex;

-- 特定のテーブルを分析
EXEC sp_BlitzIndex
    @DatabaseName = 'MyDatabase',
    @SchemaName = 'dbo',
    @TableName = 'MyTable';

-- 全データベースを分析
EXEC sp_BlitzIndex @GetAllDatabases = 1;

-- 欠落インデックスのみ表示
EXEC sp_BlitzIndex @Mode = 3;
```

---

### 分析ツール

#### 7. sp_BlitzAnalysis - BlitzFirst出力テーブル分析

sp_BlitzFirstが出力したテーブルのデータを分析します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_BlitzAnalysis` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @Help | TINYINT | - | 0 | ヘルプを表示 |
| @StartDate | DATETIMEOFFSET(7) | - | NULL | 開始日時（NULL=1時間前） |
| @EndDate | DATETIMEOFFSET(7) | - | NULL | 終了日時（NULL=@StartDateから1時間） |
| @OutputDatabaseName | NVARCHAR(256) | - | 'DBAtools' | BlitzFirstデータが格納されているDB |
| @OutputSchemaName | NVARCHAR(256) | - | 'dbo' | スキーマ名 |
| @OutputTableNameBlitzFirst | NVARCHAR(256) | - | 'BlitzFirst' | BlitzFirst出力テーブル名 |
| @OutputTableNameFileStats | NVARCHAR(256) | - | 'BlitzFirst_FileStats' | ファイル統計テーブル名 |
| @OutputTableNamePerfmonStats | NVARCHAR(256) | - | 'BlitzFirst_PerfmonStats' | Perfmon統計テーブル名 |
| @OutputTableNameWaitStats | NVARCHAR(256) | - | 'BlitzFirst_WaitStats' | 待機統計テーブル名 |
| @OutputTableNameBlitzCache | NVARCHAR(256) | - | 'BlitzCache' | BlitzCache出力テーブル名 |
| @OutputTableNameBlitzWho | NVARCHAR(256) | - | 'BlitzWho' | BlitzWho出力テーブル名 |
| @Servername | NVARCHAR(128) | - | @@SERVERNAME | サーバー名でフィルタ |
| @Databasename | NVARCHAR(128) | - | NULL | DB名でフィルタ |
| @BlitzCacheSortorder | NVARCHAR(20) | - | 'cpu' | BlitzCacheのソート順（all/cpu/reads/writes/duration/executions/memory grant/spills） |
| @MaxBlitzFirstPriority | INT | - | 249 | 最大優先度 |
| @ReadLatencyThreshold | INT | - | 100 | 読み取り遅延閾値（ms） |
| @WriteLatencyThreshold | INT | - | 100 | 書き込み遅延閾値（ms） |
| @WaitStatsTop | TINYINT | - | 10 | 上位待機統計数 |
| @BringThePain | BIT | - | 0 | 大量データ取得を許可 |
| @Maxdop | INT | - | 1 | 最大並列度 |
| @Debug | BIT | - | 0 | デバッグモード |

**使用例**

```sql
-- 過去1時間を分析
EXEC sp_BlitzAnalysis
    @StartDate = NULL,
    @EndDate = NULL,
    @OutputDatabaseName = 'DBAtools',
    @OutputSchemaName = 'dbo';

-- 特定期間を分析
EXEC sp_BlitzAnalysis
    @StartDate = '2026-02-19 00:00:00',
    @EndDate = '2026-02-19 12:00:00',
    @OutputDatabaseName = 'DBAtools',
    @OutputSchemaName = 'dbo';
```

---

### バックアップ・リストア

#### 8. sp_BlitzBackups - バックアップ分析

バックアップ履歴を分析し、RPO（目標復旧時点）とRTO（目標復旧時間）を推定します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_BlitzBackups` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @Help | TINYINT | - | 0 | ヘルプを表示 |
| @HoursBack | INT | - | 168 | 過去何時間のバックアップ履歴を分析（負の値も可） |
| @MSDBName | NVARCHAR(256) | - | 'msdb' | backupsetテーブルが存在するDB名 |
| @AGName | NVARCHAR(256) | - | NULL | 可用性グループ名 |
| @RestoreSpeedFullMBps | INT | - | NULL | フルリストア速度（MB/秒） |
| @RestoreSpeedDiffMBps | INT | - | NULL | 差分リストア速度（MB/秒） |
| @RestoreSpeedLogMBps | INT | - | NULL | ログリストア速度（MB/秒） |
| @Debug | TINYINT | - | 0 | デバッグモード |
| @PushBackupHistoryToListener | BIT | - | 0 | バックアップ履歴をリスナーにプッシュ |
| @WriteBackupsToListenerName | NVARCHAR(256) | - | NULL | リスナー名（リンクサーバー必要） |
| @WriteBackupsToDatabaseName | NVARCHAR(256) | - | NULL | 書き込み先DB名 |
| @WriteBackupsLastHours | INT | - | 168 | 過去何時間分を転送 |

**使用例**

```sql
-- 基本的な実行
EXEC sp_BlitzBackups;

-- 過去24時間のみ分析
EXEC sp_BlitzBackups @HoursBack = -24;

-- バックアップ履歴を集中管理サーバーに転送
EXEC sp_BlitzBackups
    @PushBackupHistoryToListener = 1,
    @WriteBackupsToListenerName = 'AG_LISTENER_NAME',
    @WriteBackupsToDatabaseName = 'FAKE_MSDB_NAME',
    @WriteBackupsLastHours = -24;
```

---

#### 9. sp_DatabaseRestore - データベースリストア

Ola Hallengrenのバックアップスクリプトと連携して、マルチファイルリストアを簡素化します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_DatabaseRestore` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |
| 前提条件 | Ola Hallengrenのメンテナンススクリプト |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @Database | NVARCHAR(128) | 〇 | NULL | データベース名 |
| @RestoreDatabaseName | NVARCHAR(128) | - | NULL | リストア後のDB名 |
| @BackupPathFull | NVARCHAR(260) | 〇 | NULL | フルバックアップのUNCパス |
| @BackupPathDiff | NVARCHAR(260) | - | NULL | 差分バックアップのUNCパス |
| @BackupPathLog | NVARCHAR(260) | - | NULL | ログバックアップのUNCパス |
| @MoveFiles | BIT | - | 1 | ファイルを移動 |
| @MoveDataDrive | NVARCHAR(260) | - | NULL | データファイル移動先 |
| @MoveLogDrive | NVARCHAR(260) | - | NULL | ログファイル移動先 |
| @MoveFilestreamDrive | NVARCHAR(260) | - | NULL | FILESTREAMデータ移動先 |
| @MoveFullTextCatalogDrive | NVARCHAR(260) | - | NULL | フルテキストカタログ移動先 |
| @BufferCount | INT | - | NULL | バッファ数 |
| @MaxTransferSize | INT | - | NULL | 最大転送サイズ |
| @BlockSize | INT | - | NULL | ブロックサイズ |
| @TestRestore | BIT | - | 0 | テストリストア（完了後削除） |
| @RunCheckDB | BIT | - | 0 | リストア後にDBCCを実行 |
| @RestoreDiff | BIT | - | 0 | 差分を含めてリストア |
| @ContinueLogs | BIT | - | 0 | ログのみリストアを継続 |
| @StandbyMode | BIT | - | 0 | スタンバイモード |
| @StandbyUndoPath | NVARCHAR(MAX) | - | NULL | スタンバイUndoファイルパス |
| @RunRecovery | BIT | - | 0 | WITH RECOVERYでリストア |
| @ForceSimpleRecovery | BIT | - | 0 | 単純復旧モードを強制 |
| @ExistingDBAction | TINYINT | - | 0 | 既存DB対応（0=なし、1=シングルユーザー、2=接続切断、3=接続切断後削除） |
| @StopAt | NVARCHAR(14) | - | NULL | 特定時点でリストアを停止 |
| @OnlyLogsAfter | NVARCHAR(14) | - | NULL | この時点以降のログのみリストア |
| @SimpleFolderEnumeration | BIT | - | 0 | 単純フォルダ列挙 |
| @SkipBackupsAlreadyInMsdb | BIT | - | 0 | MSDBにある既存バックアップをスキップ |
| @DatabaseOwner | sysname | - | NULL | DBオーナー |
| @SetTrustworthyON | BIT | - | 0 | TRUSTWORTHYをONに設定 |
| @FixOrphanUsers | BIT | - | 0 | 孤立ユーザーを修正 |
| @KeepCdc | BIT | - | 0 | CDCを保持 |
| @Execute | CHAR(1) | - | 'Y' | 実行（Y/N） |
| @FileExtensionDiff | NVARCHAR(128) | - | NULL | 差分ファイル拡張子 |
| @Debug | INT | - | 0 | デバッグモード |
| @Help | BIT | - | 0 | ヘルプを表示 |
| @FileNamePrefix | NVARCHAR(260) | - | NULL | リストアファイルの接頭辞 |
| @RunStoredProcAfterRestore | NVARCHAR(260) | - | NULL | リストア後に実行するストアドプロシージャ |
| @EnableBroker | BIT | - | 0 | Service Brokerを有効化 |

**使用例**

```sql
-- フルバックアップとログバックアップからリストア
EXEC dbo.sp_DatabaseRestore
    @Database = 'LogShipMe',
    @BackupPathFull = '\\FILESERVER\BACKUPS\SQL2016PROD1A\LogShipMe\FULL\',
    @BackupPathLog = '\\FILESERVER\BACKUPS\SQL2016PROD1A\LogShipMe\LOG\',
    @ContinueLogs = 0,
    @RunRecovery = 1;

-- 差分を含めてリストア
EXEC dbo.sp_DatabaseRestore
    @Database = 'LogShipMe',
    @BackupPathFull = '\\FILESERVER\BACKUPS\SQL2016PROD1A\LogShipMe\FULL\',
    @BackupPathDiff = '\\FILESERVER\BACKUPS\SQL2016PROD1A\LogShipMe\DIFF\',
    @BackupPathLog = '\\FILESERVER\BACKUPS\SQL2016PROD1A\LogShipMe\LOG\',
    @RestoreDiff = 1,
    @RunRecovery = 1;
```

---

### ユーティリティ

#### 10. sp_ineachdb - 複数データベースでコマンド実行

sp_MSforeachdbの改良版で、複数のデータベースでコマンドを実行します。

**基本情報**

| 項目 | 内容 |
| --- | --- |
| プロシージャ名 | `dbo.sp_ineachdb` |
| 認証 | SQL Server権限に依存 |
| バージョン | 8.29 |

**パラメータ**

| パラメータ名 | 型 | 必須 | デフォルト | 説明 |
| --- | --- | --- | --- | --- |
| @command | nvarchar(max) | 〇 | NULL | 実行するコマンド |
| @replace_character | nchar(1) | - | '?' | データベース名の置換文字 |
| @print_dbname | bit | - | 0 | データベース名を出力 |
| @select_dbname | bit | - | 0 | データベース名を選択結果に含める |
| @print_command | bit | - | 0 | コマンドを出力 |
| @print_command_only | bit | - | 0 | コマンドを出力のみ（実行しない） |
| @suppress_quotename | bit | - | 0 | 引用符を抑制（注意して使用） |
| @system_only | bit | - | 0 | システムDBのみ |
| @user_only | bit | - | 0 | ユーザーDBのみ |
| @name_pattern | nvarchar(300) | - | '%' | データベース名パターン |
| @database_list | nvarchar(max) | - | NULL | データベースリスト（カンマ区切り） |
| @exclude_pattern | nvarchar(300) | - | NULL | 除外パターン |
| @exclude_list | nvarchar(max) | - | NULL | 除外リスト（カンマ区切り） |
| @recovery_model_desc | nvarchar(120) | - | NULL | 復旧モデル |
| @compatibility_level | tinyint | - | NULL | 互換性レベル |
| @state_desc | nvarchar(120) | - | 'ONLINE' | 状態 |
| @is_read_only | bit | - | 0 | 読み取り専用 |
| @is_auto_close_on | bit | - | NULL | 自動終了 |
| @is_auto_shrink_on | bit | - | NULL | 自動圧縮 |
| @is_broker_enabled | bit | - | NULL | Broker有効 |
| @user_access | nvarchar(128) | - | NULL | ユーザーアクセス |
| @Help | bit | - | 0 | ヘルプを表示 |
| @is_ag_writeable_copy | bit | - | 0 | AG書き込み可能コピー |
| @is_query_store_on | bit | - | NULL | クエリストア有効 |

**使用例**

```sql
-- 全データベースでテーブル数を取得
EXEC sp_ineachdb @command = 'SELECT DB_NAME(), COUNT(*) FROM ?.sys.tables';

-- ユーザーDBのみでインデックス再構築
EXEC sp_ineachdb
    @command = 'ALTER INDEX ALL ON ?.dbo.MyTable REBUILD',
    @user_only = 1;

-- 特定のデータベースを除外
EXEC sp_ineachdb
    @command = 'DBCC CHECKDB (?)',
    @exclude_list = 'tempdb, master';
```

---

## 備考

### バージョン情報

現在のバージョン: 8.29（2026年2月3日）

全てのストアドプロシージャは共通の出力パラメータでバージョン確認が可能です:

```sql
DECLARE @VersionOutput VARCHAR(30), @VersionDateOutput DATETIME;
EXEC sp_Blitz
    @Version = @VersionOutput OUTPUT,
    @VersionDate = @VersionDateOutput OUTPUT,
    @VersionCheckMode = 1;
SELECT @VersionOutput AS Version, @VersionDateOutput AS VersionDate;
```

### ライセンス

MIT License - Brent Ozar Unlimited

### 参考リンク

- 公式サイト: http://FirstResponderKit.org
- GitHub: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/
- サポート: Slack #FirstResponderKit チャンネル
