# 機能設計書 12-Install-Azure

## 概要

本ドキュメントは、Azure SQL Database互換のFirst Responder Kitストアドプロシージャをインストールするスクリプト（Install-Azure.sql）の機能設計を記載したものである。

### 本機能の処理概要

**業務上の目的・背景**：Azure SQL Databaseは、オンプレミスのSQL Serverとは異なるアーキテクチャを持ち、一部のシステムビューやDMVにアクセスできない制約がある。Install-All-Scripts.sqlに含まれる全てのプロシージャはAzure SQL DBでは動作しないため、Azure環境専用に調整されたサブセットが必要となる。本スクリプトは、Azure SQL Database環境で利用可能なFirst Responder Kitツールのみを選別してインストールする。

**機能の利用シーン**：
- Azure SQL Database環境への診断ツール導入
- Azure SQL Managed Instance環境への診断ツール導入
- クラウドネイティブなSQL環境でのパフォーマンス分析
- オンプレミスからAzureへのマイグレーション後のツール再構築

**主要な処理内容**：
1. Azure互換プロシージャの存在チェック（OBJECT_ID確認）
2. 存在しない場合は空のプロシージャを作成（CREATE PROCEDURE）
3. ALTER PROCEDUREでAzure互換の実装に置換
4. グローバル一時テーブルの初期化（sp_BlitzCache用）
5. Azure非対応機能の除外

**関連システム・外部連携**：
- Azure SQL Databaseシステムカタログビュー
- Azure固有のDMV（sys.dm_db_*等）
- Azure SQL Database固有の制約への対応

**権限による制御**：
- データベースへのdb_owner権限が必要
- Azure SQL Databaseの場合、サーバーレベルの権限は不要
- 各プロシージャはVIEW DATABASE STATE権限を実行時に要求

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | Azure Portal SQLクエリエディタ | 実行画面 | スクリプトをAzure Portalで実行 |
| - | SSMS/Azure Data Studio | 実行画面 | スクリプトをクライアントツールで実行 |

## 機能種別

インストール・デプロイメント（Azure専用）

## 入力仕様

### 入力パラメータ

本スクリプトはパラメータを持たない。スクリプト全体を実行することでインストールが完了する。

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| （なし） | - | - | - | - |

### 入力データソース

- Install-Azure.sqlファイル本体（約27,250行）
- 実行対象Azure SQL Database

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| インストール結果メッセージ | テキスト | 各プロシージャの作成・更新状況 |

### 出力先

| 出力種別 | 出力先 | 説明 |
|---------|--------|------|
| ストアドプロシージャ | dbo.sp_BlitzAnalysis | パフォーマンスデータ集約分析 |
| ストアドプロシージャ | dbo.sp_BlitzCache | プランキャッシュ分析 |
| グローバル一時テーブル | ##BlitzCacheResults | sp_BlitzCache用中間結果 |
| グローバル一時テーブル | ##BlitzCacheProcs | sp_BlitzCache用中間結果 |

### Azure非対応プロシージャ（Install-Azure.sqlに含まれないもの）

| プロシージャ名 | 除外理由 |
|---------------|---------|
| sp_Blitz | サーバーレベルDMV依存 |
| sp_BlitzFirst | サーバーレベルDMV/拡張イベント依存 |
| sp_BlitzIndex | 一部機能がAzure非対応 |
| sp_BlitzLock | System Health拡張イベント非対応 |
| sp_BlitzWho | サーバーレベルDMV依存 |
| sp_BlitzBackups | msdbデータベース非対応 |
| sp_DatabaseRestore | 物理ファイルアクセス非対応 |
| sp_ineachdb | 複数データベース操作非対応 |

## 処理フロー

### 処理シーケンス

```
1. sp_BlitzAnalysisのインストール
   └─ OBJECT_ID確認 → CREATE/ALTER PROCEDURE
2. sp_BlitzCacheのインストール
   └─ OBJECT_ID確認 → グローバル一時テーブル作成 → CREATE/ALTER PROCEDURE
```

### フローチャート

```mermaid
flowchart TD
    A[スクリプト実行開始] --> B{sp_BlitzAnalysis存在確認}
    B -->|存在しない| C[空のsp_BlitzAnalysis作成]
    B -->|存在する| D[ALTER PROCEDUREで更新]
    C --> D
    D --> E{SQL Serverバージョン確認}
    E -->|2008未満| F[エラーメッセージ出力]
    F --> G[処理終了]
    E -->|2008以上| H{sp_BlitzCache存在確認}
    H -->|存在しない| I[空のsp_BlitzCache作成]
    H -->|存在する| J[既存グローバル一時テーブル削除]
    I --> J
    J --> K[##BlitzCacheResults作成]
    K --> L[##BlitzCacheProcs作成]
    L --> M[ALTER PROCEDUREで更新]
    M --> N[インストール完了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-01 | Azure互換性 | Azure SQL Database/Managed Instanceで動作するプロシージャのみ含む | 常時 |
| BR-02 | 冪等性の保証 | スクリプトは何度実行しても同じ結果となる | 常時 |
| BR-03 | 既存更新 | 既存プロシージャがある場合は内容を更新 | プロシージャ存在時 |
| BR-04 | バージョンチェック | SQL Server 2008以降でのみ動作 | sp_BlitzCache |

### 計算ロジック

特になし。インストール処理のみ。

## データベース操作仕様

### 操作別データベース影響一覧

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| インストール | sys.objects | SELECT | プロシージャ存在確認 |
| インストール | dbo.sp_* | CREATE/ALTER | ストアドプロシージャの作成・更新 |
| インストール | tempdb.##BlitzCacheResults | CREATE | グローバル一時テーブル作成 |
| インストール | tempdb.##BlitzCacheProcs | CREATE | グローバル一時テーブル作成 |

### テーブル別操作詳細

#### sys.objects（参照のみ）

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| SELECT | object_id | OBJECT_ID('dbo.sp_*')による存在確認 | NULL判定で分岐 |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | 権限エラー | CREATE/ALTER PROCEDURE権限なし | db_owner権限付与 |
| - | バージョンエラー | SQL Server 2008未満 | サポートバージョンへの移行 |
| - | Azure互換性エラー | Azure非対応機能の使用 | Install-All-Scripts.sqlは使用不可 |

### リトライ仕様

スクリプトは冪等性を持つため、エラー発生時は原因解消後に再実行可能。

## トランザクション仕様

各GOステートメントでバッチが区切られ、個別にコミットされる。トランザクション制御は行わない。

## パフォーマンス要件

- 実行時間：通常10秒〜30秒程度
- ファイルサイズ：約1MB（約27,250行）

## セキュリティ考慮事項

- db_owner権限が必要
- Azure SQL Databaseのファイアウォール設定によりアクセス制限可能
- VIEW DATABASE STATE権限を実行時に要求

## 備考

- バージョン8.29（2026年2月3日リリース）時点の情報
- Azure SQL Database、Azure SQL Managed Instanceでサポート
- オンプレミスSQL Serverでは代わりにInstall-All-Scripts.sqlを使用
- 一部機能は利用不可（sp_Blitz、sp_BlitzFirstなど）

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: ファイル構造を理解する

Install-Azure.sqlは、Azure互換のストアドプロシージャのみを含むサブセットである。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Install-Azure.sql | `Install-Azure.sql` | Install-All-Scripts.sqlとの差分を理解 |

**読解のコツ**:
- 含まれるプロシージャが限定的（sp_BlitzAnalysis、sp_BlitzCache）
- Azure非対応のDMV参照が除外されている
- グローバル一時テーブル作成パターンは同一

#### Step 2: 各プロシージャの配置を理解する

| 順序 | プロシージャ | 開始行（目安） | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | sp_BlitzAnalysis | 1行目 | BlitzFirst出力の分析、Azure互換版 |
| 2-2 | sp_BlitzCache | 891行目付近 | プランキャッシュ分析、Azure互換版 |

**主要処理フロー**:
1. **1-8行目**: sp_BlitzAnalysisの存在チェックと空プロシージャ作成
2. **10行目**: ALTER PROCEDURE sp_BlitzAnalysis開始
3. **891行目**: sp_BlitzAnalysisのGOステートメント（バッチ終了）
4. **902-915行目**: SQL Serverバージョンチェック
5. **917-927行目**: sp_BlitzCache存在チェックとグローバル一時テーブル管理
6. **929-989行目付近**: グローバル一時テーブル##BlitzCacheResults, ##BlitzCacheProcs作成
7. **1136行目**: ALTER PROCEDURE sp_BlitzCache開始

#### Step 3: Install-All-Scripts.sqlとの差分を理解する

| 機能 | Install-All-Scripts.sql | Install-Azure.sql |
|------|------------------------|-------------------|
| sp_Blitz | 含む | 含まない |
| sp_BlitzAnalysis | 含む | 含む |
| sp_BlitzBackups | 含む | 含まない |
| sp_BlitzCache | 含む | 含む |
| sp_BlitzFirst | 含む | 含まない |
| sp_BlitzIndex | 含む | 含まない |
| sp_BlitzLock | 含む | 含まない |
| sp_BlitzWho | 含む | 含まない |
| sp_DatabaseRestore | 含む | 含まない |
| sp_ineachdb | 含む | 含まない |

### プログラム呼び出し階層図

```
Install-Azure.sql
    │
    ├─ sp_BlitzAnalysis
    │      └─ BlitzFirst/BlitzCache/BlitzWhoテーブルを参照
    │         （事前にデータ収集が必要）
    │
    └─ sp_BlitzCache
           └─ ##BlitzCacheResults, ##BlitzCacheProcsを使用
           └─ sys.dm_exec_query_stats等のDMV参照
```

### データフロー図

```
[入力]                    [処理]                         [出力]

Install-Azure.sql ───────▶ SSMS/Azure Portal実行 ───▶ dbo.sp_BlitzAnalysis
                                   │                   dbo.sp_BlitzCache
                                   │
                                   └─────────────────▶ ##BlitzCacheResults
                                                       ##BlitzCacheProcs
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Install-Azure.sql | `Install-Azure.sql` | ソース | Azure用インストールスクリプト |
| Install-All-Scripts.sql | `Install-All-Scripts.sql` | ソース | 全プロシージャインストール（比較用） |
| sp_BlitzAnalysis.sql | `sp_BlitzAnalysis.sql` | ソース | sp_BlitzAnalysis単体ファイル |
| sp_BlitzCache.sql | `sp_BlitzCache.sql` | ソース | sp_BlitzCache単体ファイル |
| Uninstall.sql | `Uninstall.sql` | ソース | アンインストールスクリプト |
