# 画面設計書 253-ページ情報

## 概要

本ドキュメントは、dbatools PowerShellモジュールの `Get-DbaDbPageInfo` コマンドに関する画面設計書です。このコマンドは、SQL Serverデータベースのページ割り当て情報を取得し、ストレージ分析やトラブルシューティングに使用します。

### 本画面の処理概要

**業務上の目的・背景**：データベースのストレージ問題を診断する際、ページレベルでの詳細な情報が必要になることがあります。このコマンドは `sys.dm_db_database_page_allocations` 動的管理ビューを使用して、ページタイプ、空き領域率、割り当て状態、混合ページ割り当てなどの詳細情報を提供します。スペース使用パターンの分析、ページレベルのパフォーマンス問題の調査、インデックス断片化の評価に有用です。

**画面へのアクセス方法**：PowerShellコンソールまたはスクリプトから `Get-DbaDbPageInfo` コマンドを実行します。データベースオブジェクトをパイプラインで渡すことも可能です。

**主要な操作・処理内容**：
1. 指定されたSQL Serverインスタンスへの接続を確立（MinimumVersion 11）
2. 対象データベースのフィルタリング
3. `sys.dm_db_database_page_allocations` DMVに対するクエリ実行
4. スキーマ・テーブルによるフィルタリング（オプション）
5. 結果をDataRowとして出力

**画面遷移**：CLIコマンドのため画面遷移はありません。出力結果は他のコマンドにパイプラインで渡すことができます。

**権限による表示制御**：VIEW DATABASE STATE権限が必要です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 107 | Get-DbaDbPageInfo | 主機能 | データベースページ情報の取得 |
| 98 | Get-DbaDatabase | 補助機能 | データベースオブジェクトの取得（パイプライン入力） |
| 112 | Get-DbaDbSpace | 関連機能 | データベース空間使用量の取得 |

## 画面種別

情報取得・分析（CLIコマンド）

## URL/ルーティング

該当なし（PowerShell CLIコマンド）

## 入出力項目

### 入力パラメーター

| パラメーター名 | 型 | 必須 | 説明 |
|---------------|---|-----|------|
| SqlInstance | DbaInstanceParameter[] | No | 対象SQL Serverインスタンス名 |
| SqlCredential | PSCredential | No | 代替認証情報 |
| Database | string[] | No | 対象データベース名（ワイルドカード対応） |
| Schema | string[] | No | 対象スキーマ名 |
| Table | string[] | No | 対象テーブル名 |
| InputObject | Database[] | No | パイプラインからのデータベースオブジェクト |
| EnableException | switch | No | 例外を直接スローするかどうか |

### 出力項目

| プロパティ名 | 型 | 説明 |
|-------------|---|------|
| ComputerName | string | SQL Serverインスタンスのコンピューター名 |
| InstanceName | string | SQL Serverインスタンス名 |
| SqlInstance | string | 完全修飾インスタンス名 |
| Database | string | データベース名 |
| Schema | string | スキーマ名 |
| Table | string | テーブル名 |
| PageType | string | ページタイプ（DATA_PAGE, INDEX_PAGE, LOB_DATA_PAGE等） |
| PageFreePercent | int | ページ内の空き領域率（0-100） |
| IsAllocated | string | 割り当て状態（"True" または "False"） |
| IsMixedPage | string | 混合ページ割り当て（"True" または "False"） |

## 表示項目

CLIコマンドのため、表示項目は出力オブジェクトのプロパティに依存します。

## イベント仕様

### 1-コマンド実行

コマンド実行時に以下の処理が行われます：

1. beginブロックでSQLクエリ文を構築（Schema/Tableフィルター付き）
2. `Connect-DbaInstance` でSQL Server 2012以上に接続
3. Databaseパラメーターに基づいてデータベースをフィルタリング
4. 各データベースに対してDMVクエリを実行
5. DataRowを直接出力

## データベース更新仕様

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| コマンド実行 | sys.dm_db_database_page_allocations | SELECT | ページ割り当て情報の読み取り |
| コマンド実行 | sys.tables | SELECT | テーブル情報の結合 |
| コマンド実行 | sys.schemas | SELECT | スキーマ情報の結合 |

### テーブル別更新項目詳細

このコマンドは読み取り専用であり、データベースの更新は行いません。

## メッセージ仕様

| メッセージ種別 | 条件 | メッセージ内容 |
|--------------|------|---------------|
| エラー | 接続失敗時 | "Failure" + ConnectionError詳細 |
| エラー | SQL Server 2012未満 | "Unsupported SQL Server version" |
| エラー | クエリ実行失敗 | "Something went wrong executing the query" |

## 例外処理

| 例外状況 | 処理内容 |
|---------|---------|
| 接続エラー | Stop-Functionで処理を中断して次のインスタンスへ続行 |
| バージョン不足 | Stop-Functionでメッセージ表示して次のデータベースへ続行 |
| クエリ実行エラー | Stop-Functionでメッセージ表示して次のデータベースへ続行 |

## 備考

- SQL Server 2012（バージョン11）以上が必要（sys.dm_db_database_page_allocations DMVの依存）
- 大規模データベースでは実行に時間がかかる場合があります
- DEtailed モードで実行されるため、詳細なページ情報を取得
- パイプラインでGet-DbaDatabaseと組み合わせて使用可能

---

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

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

### 推奨読解順序

#### Step 1: データ構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaDbPageInfo.ps1 | `public/Get-DbaDbPageInfo.ps1` | SQLクエリの構造（行99-116） |
| 1-2 | Get-DbaDbPageInfo.ps1 | `public/Get-DbaDbPageInfo.ps1` | 出力プロパティの定義（SELECTリスト） |

**読解のコツ**: このコマンドはDataRowを直接返すため、PSCustomObjectではなくクエリ結果のカラム構造がそのまま出力プロパティになります。

#### Step 2: エントリーポイントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaDbPageInfo.ps1 | `public/Get-DbaDbPageInfo.ps1` | 関数定義全体（行1-162） |

**主要処理フロー**:
1. **行98-129**: beginブロックでSQLクエリ構築（Schema/Tableフィルター追加）
2. **行132-139**: processブロックでSQL Serverに接続（MinimumVersion 11）
3. **行141-145**: データベースフィルタリング
4. **行149-160**: 各データベースに対してクエリ実行

#### Step 3: SQLクエリを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaDbPageInfo.ps1 | `public/Get-DbaDbPageInfo.ps1` | sys.dm_db_database_page_allocations DMV使用（行114） |

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

```
Get-DbaDbPageInfo
    │
    ├─ Connect-DbaInstance (MinimumVersion 11)
    │
    ├─ $server.Databases (フィルタリング)
    │
    └─ $db.Query($sql)
           └─ sys.dm_db_database_page_allocations
                  INNER JOIN sys.tables
                  INNER JOIN sys.schemas
```

### データフロー図

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

SqlInstance ───▶ Connect-DbaInstance ───▶ SMO Server
                           │
                           ▼
Database ───────▶ データベースフィルタ
                           │
Schema/Table ───▶ SQLクエリ WHERE句構築
                           │
                           ▼
                   $db.Query($sql)
                           │
                           ▼
                      DataRow ───▶ パイプライン出力
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaDbPageInfo.ps1 | `public/Get-DbaDbPageInfo.ps1` | ソース | メイン関数定義 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続 |
| Stop-Function.ps1 | `internal/functions/flowcontrol/Stop-Function.ps1` | ソース | エラーハンドリング |
