# 画面設計書 249-ダンプ取得

## 概要

本ドキュメントは、dbatools PowerShellモジュールの `Get-DbaDump` コマンドに関する画面設計書です。SQL Serverのメモリダンプファイル情報を取得する機能を提供します。

### 本画面の処理概要

`Get-DbaDump` コマンドは、SQL Serverの動的管理ビュー `sys.dm_server_memory_dumps` をクエリして、SQL Serverが生成したメモリダンプファイル（.mdmp）の情報を取得する機能を提供します。

**業務上の目的・背景**：SQL Serverは、クラッシュ、アサーション失敗、その他の重大なエラーが発生した際にメモリダンプファイルを生成します。これらのダンプファイルは、Microsoftサポートと連携した問題調査や、サーバーの安定性問題の診断に不可欠です。本コマンドは、いつダンプが生成されたか、そのサイズ、ファイルパスを迅速に確認することで、サーバー安定性の問題特定とトラブルシューティングの初期段階を支援します。

**画面へのアクセス方法**：PowerShellコンソールまたはPowerShell ISEから `Get-DbaDump` コマンドを直接実行します。SqlInstanceパラメータで対象SQL Serverインスタンスを指定します。

**主要な操作・処理内容**：
1. SQL Serverインスタンスへの接続
2. `sys.dm_server_memory_dumps` DMVのクエリ実行
3. ダンプファイル情報（ファイル名、作成日時、サイズ）の取得
4. 結果のオブジェクト出力

**画面遷移**：CLIコマンドのため画面遷移はありません。複数のSQL Serverインスタンスに対してパイプライン経由で実行可能です。

**権限による表示制御**：`sys.dm_server_memory_dumps` DMVへのアクセスにはVIEW SERVER STATE権限が必要です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 118 | Get-DbaDump | 主機能 | ダンプファイルの取得 |
| - | Connect-DbaInstance | 補助機能 | SQL Serverインスタンスへの接続 |

## 画面種別

CLI（コマンドラインインターフェース）/ 情報取得系

## URL/ルーティング

PowerShellコマンド: `Get-DbaDump`

## 入出力項目

### 入力パラメータ

| パラメータ名 | 型 | 必須 | パイプライン | 説明 |
|-------------|----|----|-------------|------|
| SqlInstance | DbaInstanceParameter[] | Yes | Yes | 対象SQL Serverインスタンス |
| SqlCredential | PSCredential | No | No | SQL Server認証用の資格情報 |
| EnableException | switch | No | No | 例外を詳細表示するフラグ |

## 表示項目

### 出力オブジェクト（PSCustomObject）

| 項目名 | 型 | 説明 |
|--------|----|----|
| ComputerName | string | SQL Serverホストのコンピュータ名 |
| InstanceName | string | SQL Serverサービス名 |
| SqlInstance | string | 完全修飾SQL Serverインスタンス名 |
| FileName | string | メモリダンプファイルのパスとファイル名（.mdmp） |
| CreationTime | datetime | ダンプファイルの作成日時 |
| Size | dbasize | ダンプファイルのサイズ（人間が読みやすい形式: "1.5 GB"等） |

## イベント仕様

### 1-コマンド実行

コマンド実行時の処理フロー:

1. **接続処理**: `Connect-DbaInstance` でSQL Serverに接続
2. **バージョン確認**: SQL Server 2008 R2 (v10.50) 以上であることを確認
3. **DMVクエリ実行**: `sys.dm_server_memory_dumps` をクエリ
4. **結果処理**: 各ダンプファイル情報をPSCustomObjectとして出力
5. **サイズ変換**: size_in_bytesを[dbasize]型に変換して人間が読みやすい形式に

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

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| コマンド実行 | sys.dm_server_memory_dumps | SELECT | 動的管理ビューの読み取り（書き込みなし） |

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

本コマンドはデータベースへの更新を行いません。動的管理ビューの読み取り専用アクセスです。

#### sys.dm_server_memory_dumps（読み取り）

| カラム名 | 取得条件 | 備考 |
|---------|---------|------|
| filename | すべて | ダンプファイルパス |
| creation_time | すべて | 作成日時 |
| size_in_bytes | すべて | バイト単位サイズ |

## メッセージ仕様

| メッセージID | レベル | メッセージ内容 | 発生条件 |
|-------------|--------|--------------|----------|
| - | Error | Failure | SQL Server接続に失敗した場合 |
| - | Error | This function does not support versions lower than SQL Server 2008 R2 (v10.50). Skipping server '{instance}' | 対応バージョン未満の場合 |
| - | Error | Issue collecting data on {server} | DMVクエリ実行エラー時 |

## 例外処理

| 例外種別 | 発生条件 | 処理内容 |
|---------|---------|---------|
| 接続エラー | SQL Serverへの接続失敗 | Stop-Functionでエラー記録、次のインスタンスへ続行 |
| バージョンエラー | SQL Server 2008 R2未満 | Stop-Functionでエラー記録、次のインスタンスへ続行 |
| クエリエラー | DMVクエリ実行失敗 | Stop-Functionでエラー記録、次のインスタンスへ続行 |

## 備考

- SQL Server 2008 R2 (v10.50) 以上をサポート
- `sys.dm_server_memory_dumps` は SQL Server 2008 R2 で追加されたDMV
- ダンプファイルが存在しない場合、出力なし
- Sizeプロパティは[dbasize]型で、"1.5 GB"のような人間が読みやすい形式で表示
- VIEW SERVER STATE権限が必要
- ダンプファイル自体は取得しない（メタデータのみ）

---

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

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

### 推奨読解順序

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

出力オブジェクトの構造を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaDump.ps1 | `public/Get-DbaDump.ps1` | 36-47行目: .OUTPUTSセクションで出力プロパティ定義 |
| 1-2 | Get-DbaDump.ps1 | `public/Get-DbaDump.ps1` | 84-91行目: 出力PSCustomObjectの構造 |

**読解のコツ**: Sizeプロパティが[dbasize]型キャストされている点に注目。dbatoolsの独自型で人間が読みやすいサイズ表示を提供。

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

処理の起点となる関数の構造を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaDump.ps1 | `public/Get-DbaDump.ps1` | 59-65行目: パラメータ定義 |
| 2-2 | Get-DbaDump.ps1 | `public/Get-DbaDump.ps1` | 66-68行目: beginブロックのSQLクエリ定義 |
| 2-3 | Get-DbaDump.ps1 | `public/Get-DbaDump.ps1` | 70-96行目: processブロックのメインロジック |

**主要処理フロー**:
1. **67行目**: SQLクエリ定義 - `sys.dm_server_memory_dumps` の3カラムを取得
2. **71-76行目**: Connect-DbaInstanceでSQL Server接続
3. **78-79行目**: バージョンチェック（v10.50以上）
4. **83行目**: `$server.Query($sql)` でクエリ実行
5. **84-91行目**: 結果をPSCustomObjectとして出力

#### Step 3: バージョンチェックロジックを理解する

SQL Server 2008 R2以上のバージョン要件を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaDump.ps1 | `public/Get-DbaDump.ps1` | 78-79行目: バージョンチェック条件 |

**主要処理フロー**:
- **78行目**: `$server.versionMajor -lt 11 -and (-not ($server.versionMajor -eq 10 -and $server.versionMinor -eq 50))`
  - versionMajor < 11 (SQL Server 2012未満)
  - かつ、versionMajor=10 かつ versionMinor=50 (SQL Server 2008 R2) ではない
  - つまり、SQL Server 2008 SP1以下を除外

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

```
Get-DbaDump
    │
    ├─ Connect-DbaInstance
    │      └─ SQL Server接続確立
    │
    ├─ バージョンチェック
    │      └─ versionMajor >= 11 または (10.50)
    │
    └─ $server.Query($sql)
           │
           └─ sys.dm_server_memory_dumps
                  │
                  └─ foreach ($result)
                         └─ [PSCustomObject] 出力
```

### データフロー図

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

SqlInstance ───▶ Connect-DbaInstance ───▶ $server オブジェクト
                            │
                            ▼
                    バージョンチェック
                    (v10.50以上)
                            │
                            ▼
                    $server.Query($sql)
                    "SELECT filename, creation_time, size_in_bytes
                     FROM sys.dm_server_memory_dumps"
                            │
                            ▼
                    foreach ($result in ...)
                            │
                            ▼
                      PSCustomObject
                    ├─ ComputerName
                    ├─ InstanceName
                    ├─ SqlInstance
                    ├─ FileName
                    ├─ CreationTime
                    └─ Size ([dbasize]$result.size_in_bytes)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaDump.ps1 | `public/Get-DbaDump.ps1` | ソース | メインコマンド実装 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続 |
