# 画面設計書：28-リカバリモデル

## 1. 基本情報

| 項目 | 内容 |
|------|------|
| 画面ID | 28 |
| 画面名 | リカバリモデル |
| カテゴリ | データベース |
| 対応コマンド | Get-DbaDbRecoveryModel |
| 関連機能No | 112 |

## 2. 概要・目的

データベースのリカバリモデル設定とバックアップ履歴情報を取得する機能です。バックアップ戦略の計画、コンプライアンス監査、トランザクションログの成長問題のトラブルシューティングに使用します。

リカバリモデルの設定が業務要件に適しているかを確認し、バックアップポリシーがリカバリモデルに整合しているかを監査するのに役立ちます。

## 3. 機能説明

### 3.1 リカバリモデルの種類

| モデル | 説明 | ログ切り捨て | ポイントインタイム復旧 |
|--------|------|-------------|---------------------|
| Simple | 単純 | 自動 | 不可 |
| Full | 完全 | ログバックアップ時 | 可能 |
| BulkLogged | 一括ログ | ログバックアップ時 | 制限あり |

### 3.2 取得情報

- **リカバリモデル設定**: Simple/Full/BulkLogged
- **データベース状態**: アクセス可能/不可
- **最終バックアップ日時**: フル/差分/ログ

## 4. パラメータ仕様

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|------|-------------|------|
| SqlInstance | DbaInstance[] | Yes | - | 対象SQLインスタンス |
| SqlCredential | PSCredential | No | - | 認証資格情報 |
| Database | object[] | No | - | 対象データベース |
| ExcludeDatabase | object[] | No | - | 除外データベース |
| RecoveryModel | string[] | No | - | フィルタ対象リカバリモデル（Simple/Full/BulkLogged） |
| EnableException | switch | No | $false | 例外を有効化 |

## 5. 出力仕様

**型**: Microsoft.SqlServer.Management.Smo.Database（Select-DefaultViewでフィルタ）

### 5.1 デフォルト表示プロパティ

| プロパティ | 型 | 説明 |
|-----------|-----|------|
| ComputerName | string | コンピュータ名 |
| InstanceName | string | インスタンス名 |
| SqlInstance | string | 完全修飾インスタンス名 |
| Name | string | データベース名 |
| Status | string | データベース状態（Normal, Offline等） |
| IsAccessible | bool | アクセス可能フラグ |
| RecoveryModel | string | リカバリモデル（Simple/Full/BulkLogged） |
| LastFullBackup | DateTime | 最終フルバックアップ日時 |
| LastDiffBackup | DateTime | 最終差分バックアップ日時 |
| LastLogBackup | DateTime | 最終ログバックアップ日時 |

## 6. 処理フロー

```
[開始]
    |
    v
[Get-DbaDatabase呼び出し]
    | - SqlInstance, SqlCredential
    | - Database, ExcludeDatabase
    v
[RecoveryModelフィルタ]
    | - RecoveryModel指定時
    | - IsAccessible確認
    v
[Select-DefaultView適用]
    | - プロパティ名エイリアス
    | - LastBackupDate as LastFullBackup
    | - LastDifferentialBackupDate as LastDiffBackup
    | - LastLogBackupDate as LastLogBackup
    v
[出力]
    |
    v
[終了]
```

## 7. 内部実装詳細

### 7.1 デフォルトプロパティ定義

```powershell
# Get-DbaDbRecoveryModel.ps1 行91-93
$defaults = 'ComputerName', 'InstanceName', 'SqlInstance', 'Name', 'Status', 'IsAccessible', 'RecoveryModel',
'LastBackupDate as LastFullBackup', 'LastDifferentialBackupDate as LastDiffBackup',
'LastLogBackupDate as LastLogBackup'
```

### 7.2 スプラット構築

```powershell
# Get-DbaDbRecoveryModel.ps1 行96-102
$params = @{
    SqlInstance     = $SqlInstance
    SqlCredential   = $SqlCredential
    Database        = $Database
    ExcludeDatabase = $ExcludeDatabase
    EnableException = $EnableException
}
```

### 7.3 RecoveryModelフィルタ

```powershell
# Get-DbaDbRecoveryModel.ps1 行104-108
if ($RecoveryModel) {
    Get-DbaDatabase @params | Where-Object RecoveryModel -in $RecoveryModel |
        Where-Object IsAccessible | Select-DefaultView -Property $defaults
} else {
    Get-DbaDatabase @params | Select-DefaultView -Property $defaults
}
```

## 8. 使用例

### 8.1 特定リカバリモデルのフィルタ

```powershell
# BulkLoggedモデルのデータベースを取得
Get-DbaDbRecoveryModel -SqlInstance sql2014 -RecoveryModel BulkLogged -Verbose
```

### 8.2 特定データベースの指定

```powershell
# 特定データベースのリカバリモデルを取得
Get-DbaDbRecoveryModel -SqlInstance sql2014 -Database TestDB
```

### 8.3 全データベースの取得

```powershell
# 全データベースのリカバリモデルを取得
Get-DbaDbRecoveryModel -SqlInstance sql2014
```

## 9. エラーハンドリング

| エラー状況 | 処理 | ソース位置 |
|-----------|------|-----------|
| Get-DbaDatabase内のエラー | Get-DbaDatabase側で処理 | - |

## 10. 関連コマンド

| コマンド | 関係 | 説明 |
|---------|------|------|
| Set-DbaDbRecoveryModel | 関連 | リカバリモデルを変更 |
| Get-DbaDatabase | 内部使用 | データベースオブジェクト取得 |
| Get-DbaDbBackupHistory | 関連 | バックアップ履歴詳細取得 |

## 11. 注意事項・制約

1. **SMO Database**: 出力はSMO Databaseオブジェクト（Select-DefaultViewでフィルタ）
2. **RecoveryModelフィルタ時**: IsAccessibleのデータベースのみ出力
3. **バックアップ日時**: SMOのLastBackupDate/LastDifferentialBackupDate/LastLogBackupDateを使用
4. **ValidateSet**: RecoveryModelパラメータはSimple/Full/BulkLoggedのみ許可

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

### 12.1 関連ファイル一覧

| ファイル | 種類 | 行数 | 説明 |
|---------|------|------|------|
| public/Get-DbaDbRecoveryModel.ps1 | メインコマンド | 110 | リカバリモデル取得 |

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

```
Get-DbaDbRecoveryModel
    |
    +-- Get-DbaDatabase (@params, 行105 or 107)
    |       |
    |       +-- Connect-DbaInstance
    |
    +-- Where-Object RecoveryModel -in $RecoveryModel (行105)
    +-- Where-Object IsAccessible (行106)
    +-- Select-DefaultView (行106 or 107)
```

### 12.3 データフロー図

```
[SqlInstance]
    |
    v
[Get-DbaDatabase]
    |
    | SMO Databaseオブジェクト群
    v
[RecoveryModelフィルタ（オプション）]
    |
    +-- RecoveryModel指定あり --> Where-Object RecoveryModel + IsAccessible
    +-- 指定なし -------------> フィルタなし
    |
    v
[Select-DefaultView]
    |
    | プロパティエイリアス適用
    | - LastBackupDate -> LastFullBackup
    | - LastDifferentialBackupDate -> LastDiffBackup
    | - LastLogBackupDate -> LastLogBackup
    v
[出力]
```

### 12.4 読み解きの流れ

1. **beginブロック (行90-94)**
   - $defaults配列定義
   - プロパティエイリアス指定

2. **processブロック (行95-109)**
   - $paramsスプラット構築（行96-102）
   - RecoveryModelによる条件分岐（行104-108）
   - Get-DbaDatabase呼び出しとSelect-DefaultView適用

## 13. 改訂履歴

| 日付 | バージョン | 変更内容 |
|------|-----------|---------|
| 2026-02-18 | 1.0 | 初版作成 |
