# 機能設計書 120-Get-DbaErrorLogConfig

## 概要

本ドキュメントは、SQL Serverエラーログの構成設定（ファイル数、サイズ制限、保存場所）を取得するための機能設計書である。

### 本機能の処理概要

**業務上の目的・背景**：SQL Serverエラーログの構成設定は、ログ保持ポリシーの理解、ログ関連問題のトラブルシューティング、環境間の設定比較において重要である。本機能は、SQL Server Management Studioを使用せずにエラーログ設定を迅速に確認でき、複数インスタンスの一括監査を可能にする。

**機能の利用シーン**：
- エラーログ保持ポリシーの確認
- 環境間のログ設定比較
- ログファイル容量の計画
- ログ関連問題のトラブルシューティング
- 構成ドキュメントの自動生成

**主要な処理内容**：
1. 対象SQL Serverインスタンスへ接続
2. SMOサーバープロパティからエラーログ設定を取得
3. ログ数、サイズ（SQL 2012以降）、パスをPSCustomObjectとして返却

**関連システム・外部連携**：SMOサーバーオブジェクトのプロパティを使用。

**権限による制御**：サーバー構成の読み取り権限が必要。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | - | - | PowerShellコマンドラインインターフェースのみ |

## 機能種別

データ参照 / 構成情報取得

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| SqlInstance | DbaInstanceParameter[] | Yes | 対象SQL Serverインスタンス（パイプライン可） | 接続可能なインスタンス名 |
| SqlCredential | PSCredential | No | 代替認証資格情報 | 有効なWindows/SQL認証資格情報 |
| EnableException | switch | No | 例外を発生させるかどうか | - |

### 入力データソース

- SqlInstanceパラメータ: ユーザー入力またはパイプライン（必須）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ComputerName | string | SQL Serverのコンピュータ名 |
| InstanceName | string | SQL Serverサービス名 |
| SqlInstance | string | 完全なSQL Serverインスタンス名（DomainInstanceName） |
| LogCount | int | 保持するエラーログファイルの数 |
| LogSize | dbasize | 各エラーログファイルの最大サイズ（SQL 2012以降、それ以前は$null） |
| LogPath | string | エラーログファイルの保存ディレクトリパス |

### 出力先

- PowerShellパイプライン（標準出力）
- PSCustomObject として返却

## 処理フロー

### 処理シーケンス

```
1. processブロック開始
   └─ 各SqlInstanceについてループ処理
      ├─ 1.1 Connect-DbaInstance で接続
      ├─ 1.2 $server.NumberOfLogFiles でログ数取得
      ├─ 1.3 バージョンチェック（SQL 2012以上でLogSize取得）
      │      ├─ SQL 2012以上: $server.ErrorLogSizeKb を dbasize に変換
      │      └─ SQL 2012未満: $null
      └─ 1.4 PSCustomObject として出力
2. エラー処理
   └─ 接続失敗時は Stop-Function で次のインスタンスへ
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{SqlInstanceをループ}
    B --> C[Connect-DbaInstance]
    C --> D{接続成功?}
    D -->|No| E[Stop-Function]
    E --> B
    D -->|Yes| F[NumberOfLogFiles取得]
    F --> G{SQL 2012以上?}
    G -->|Yes| H[ErrorLogSizeKb取得]
    G -->|No| I[LogSize = $null]
    H --> J[dbasize変換]
    J --> K[PSCustomObject出力]
    I --> K
    K --> B
    B --> L[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | LogSize可用性 | ErrorLogSizeKbはSQL Server 2012（VersionMajor >= 11）以降でのみ利用可能 | 常時 |
| BR-002 | サイズ変換 | ErrorLogSizeKbをKBからバイトに変換（* 1024）してdbasize型に | SQL 2012以上 |

### 計算ロジック

- **LogSize**: $server.ErrorLogSizeKb * 1024 を [dbasize] にキャスト

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

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

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| 設定取得 | - | SMOプロパティ | サーバーオブジェクトのプロパティを読み取り |

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

#### SMO サーバープロパティ

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| GET | NumberOfLogFiles | - | 保持ログファイル数 |
| GET | ErrorLogSizeKb | VersionMajor >= 11 | ログサイズ（KB） |
| GET | ErrorLogPath | - | ログファイルパス |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | ConnectionError | SQL Server接続失敗 | Stop-Function でエラー出力、次のインスタンスへ |

### リトライ仕様

リトライ処理は実装されていない。接続エラー時は当該インスタンスをスキップして次を処理。

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

読み取り専用操作のため、トランザクション管理は不要。

## パフォーマンス要件

- SMOプロパティ取得は高速（キャッシュ済み）
- 各インスタンスに対して最小限の処理

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

- サーバー構成情報（ログパス）が出力される
- SQL認証使用時は資格情報の安全な管理が必要

## 備考

- Set-DbaErrorLogConfig関数で設定変更可能
- SQL Server 2008 R2以前ではLogSizeプロパティは$null
- デフォルトのログファイル数は6

---

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

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

### 推奨読解順序

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

本機能ではシンプルなPSCustomObjectを出力する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaErrorLogConfig.ps1 | `public/Get-DbaErrorLogConfig.ps1` | 出力プロパティ（77-84行目） |

**読解のコツ**: LogSizeプロパティはSQL 2012以上でのみ値が設定され、それ以前は$null。

#### Step 2: バージョン条件分岐を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaErrorLogConfig.ps1 | `public/Get-DbaErrorLogConfig.ps1` | バージョンチェック（70-75行目） |

**主要処理フロー**:
- **70-72行目**: VersionMajor >= 11 の場合にErrorLogSizeKbを取得してdbasize変換
- **73-75行目**: それ以外は$null

#### Step 3: プロパティ取得を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaErrorLogConfig.ps1 | `public/Get-DbaErrorLogConfig.ps1` | SMOプロパティ取得（69行目、77-84行目） |

**主要処理フロー**:
- **69行目**: $server.NumberOfLogFiles
- **83行目**: $server.ErrorLogPath

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

```
Get-DbaErrorLogConfig
    │
    ├─ Connect-DbaInstance
    │
    └─ SMOプロパティ取得
           │
           ├─ $server.NumberOfLogFiles
           │
           ├─ $server.VersionMajor
           │      │
           │      └─ >= 11? ─┬─ Yes ─▶ $server.ErrorLogSizeKb
           │                 │              │
           │                 │              └─ [dbasize]($value * 1024)
           │                 │
           │                 └─ No ──▶ $null
           │
           └─ $server.ErrorLogPath
                  │
                  └─ PSCustomObject 構築
```

### データフロー図

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

SqlInstance ───────▶ Connect-DbaInstance ───▶ $server
                            │
                            ▼
                     $server.NumberOfLogFiles ─────────▶ LogCount
                            │
                            ▼
                     $server.VersionMajor >= 11?
                            │
              ┌─────────────┴─────────────┐
              ▼                           ▼
         $server.ErrorLogSizeKb        $null
              │
              ▼
         [dbasize]($value * 1024) ─────────────────▶ LogSize
                            │
                            ▼
                     $server.ErrorLogPath ─────────▶ LogPath
                            │
                            ▼
                     PSCustomObject ───▶ パイプライン出力
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaErrorLogConfig.ps1 | `public/Get-DbaErrorLogConfig.ps1` | ソース | メイン関数の実装 |
| Set-DbaErrorLogConfig.ps1 | `public/Set-DbaErrorLogConfig.ps1` | ソース | 関連機能：エラーログ設定変更 |
| Get-DbaErrorLog.ps1 | `public/Get-DbaErrorLog.ps1` | ソース | 関連機能：エラーログ内容取得 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続機能 |
| dbasize.ps1 | `private/classes/dbasize.ps1` | ソース | dbasize型の定義 |
