# 機能設計書 224-Set-DbaErrorLogConfig

## 概要

本ドキュメントは、SQL Serverエラーログの保持数とサイズ制限を設定するdbatools PowerShellコマンドレット「Set-DbaErrorLogConfig」の機能設計書である。

### 本機能の処理概要

Set-DbaErrorLogConfigは、SQL Serverが保持するエラーログファイルの数（6-99）と、ログファイルの最大サイズ（KB単位、SQL Server 2012以降）を設定するコマンドレットである。これにより、ディスク容量の管理と適切なトラブルシューティング履歴の保持バランスを実現できる。

**業務上の目的・背景**：SQL Serverのエラーログは、トラブルシューティングや監査のために重要な情報源である。しかし、デフォルト設定ではログファイル数が少なく、必要な履歴が失われる場合がある。また、ログファイルが大きくなりすぎるとディスク容量を圧迫する。この機能により、運用要件に応じたエラーログ管理を自動化できる。

**機能の利用シーン**：
- SQL Server新規インストール後のエラーログ設定
- ディスク容量管理のためのログサイズ制限設定
- 監査要件に応じたログ保持期間の延長
- 複数インスタンスに対する一括設定

**主要な処理内容**：
1. 指定されたSQL Serverインスタンスへの接続確立
2. 現在のエラーログ設定の取得
3. LogCount/LogSizeパラメータに基づく設定変更
4. SMO経由での変更適用
5. 変更後の設定値の出力

**関連システム・外部連携**：SQL Server Management Objects (SMO) を介してSQL Serverと連携する。

**権限による制御**：サーバーレベルのALTER SETTINGS権限またはsysadmin固定サーバーロールが必要。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | コマンドライン | 主画面 | PowerShellコンソールからの直接実行 |

## 機能種別

サーバー設定変更（UPDATE操作）

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| SqlInstance | DbaInstanceParameter[] | Yes | 対象SQL Serverインスタンス | 有効なインスタンス名 |
| SqlCredential | PSCredential | No | 認証用資格情報 | - |
| LogCount | int | No | 保持するログファイル数 | ValidateRange(6, 99) |
| LogSize | int | No | ログファイル最大サイズ（KB） | SQL Server 2012以降のみ |
| EnableException | switch | No | 例外有効化フラグ | - |

### 入力データソース

- PowerShellコマンドライン入力
- パイプライン入力（SqlInstanceプロパティ経由）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ComputerName | string | SQL Serverホストコンピュータ名 |
| InstanceName | string | SQL Serverインスタンス名 |
| SqlInstance | string | 完全なSQL Serverインスタンス名 |
| LogCount | int | 現在のログファイル保持数 |
| LogSize | dbasize | 現在のログファイル最大サイズ |

### 出力先

PowerShellパイプライン（標準出力）

## 処理フロー

### 処理シーケンス

```
1. SQL Serverインスタンスへの接続
   └─ Connect-DbaInstanceを使用して接続

2. 現在の設定値の取得
   └─ $server.NumberOfLogFiles
   └─ $server.ErrorLogSizeKb

3. LogSize設定（指定時）
   └─ バージョンチェック（SQL Server 2012以降）
   └─ 現在値と比較、異なる場合のみ変更
   └─ $server.ErrorLogSizeKb設定とAlter()

4. LogCount設定（指定時）
   └─ 現在値と比較、異なる場合のみ変更
   └─ $server.NumberOfLogFiles設定とAlter()

5. 結果の出力
   └─ PSCustomObjectで現在の設定を返却
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[SQL Server接続]
    B --> C{接続成功?}
    C -->|No| D[エラー出力・継続]
    C -->|Yes| E[現在設定取得]
    E --> F{LogSize指定?}
    F -->|Yes| G{バージョン >= 2012?}
    G -->|No| H[エラー:非対応]
    G -->|Yes| I{現在値と同じ?}
    I -->|Yes| J[警告:変更不要]
    I -->|No| K[LogSize設定・Alter]
    F -->|No| L{LogCount指定?}
    K --> L
    J --> L
    H --> L
    L -->|Yes| M{現在値と同じ?}
    M -->|Yes| N[警告:変更不要]
    M -->|No| O[LogCount設定・Alter]
    L -->|No| P[結果出力]
    O --> P
    N --> P
    P --> Q[終了]
    D --> Q
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | LogCount範囲 | 6から99の範囲で指定可能 | ValidateRange属性 |
| BR-002 | LogSizeバージョン制限 | LogSizeはSQL Server 2012（バージョン11）以降のみ対応 | VersionMajor < 11で拒否 |
| BR-003 | 同一値スキップ | 現在値と同じ値を指定した場合は警告のみ | 変更不要時 |
| BR-004 | 即時反映 | 設定変更は即座に反映される | 常時 |

### 計算ロジック

- LogSizeはKB単位で入力され、dbasizeオブジェクトとしてバイト換算（*1024）で出力される

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

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

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| 設定変更 | master.dbo.sp_configure（間接） | UPDATE | SMO Alter()による設定変更 |

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

SMOを介した設定変更であり、直接のテーブル操作はない。設定はSQL Serverのサーバープロパティとして保存される。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | ConnectionError | SQL Server接続失敗 | 接続情報を確認して再実行 |
| - | VersionNotSupported | SQL Server 2008 R2以前でLogSize指定 | LogSizeパラメータを除外 |
| - | AlterFailed | 設定変更の適用失敗 | 権限を確認 |

### リトライ仕様

リトライ処理は実装されていない。エラー発生時はStop-Functionで処理を停止し、-Continueにより次のインスタンスに進む。

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

SMOのAlter()メソッドにより設定変更が適用される。各設定（LogSize、LogCount）ごとに個別にAlter()が呼び出される。

## パフォーマンス要件

特に定義されていない。設定変更は軽量な操作である。

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

- ALTER SETTINGS権限またはsysadminロールが必要
- エラーログのパス変更にはSet-DbaStartupParameterを使用（本機能では不可）

## 備考

- エラーログのパス（格納場所）の変更にはSet-DbaStartupParameter -ErrorLogを使用
- WhatIfとConfirmパラメータをサポート
- LogSizeはdbasizeオブジェクトで出力され、自動的に適切な単位（KB/MB/GB）で表示される

---

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

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

### 推奨読解順序

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

出力オブジェクトの構造とdbasizeオブジェクトを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Set-DbaErrorLogConfig.ps1 | `public/Set-DbaErrorLogConfig.ps1` | 出力オブジェクトの構造（54-67行目の.OUTPUTSセクション） |

**読解のコツ**: LogSizeはdbasizeオブジェクトに変換される点に注目（110行目）。

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

processブロック内のメイン処理を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Set-DbaErrorLogConfig.ps1 | `public/Set-DbaErrorLogConfig.ps1` | processブロック（94-154行目） |

**主要処理フロー**:
1. **95-100行目**: 各SqlInstanceに対するループとConnect-DbaInstance接続
2. **102-103行目**: 現在のログ設定値取得
3. **105-111行目**: PSCustomObject初期化（現在値で初期化）
4. **112-132行目**: LogSize設定処理
5. **134-151行目**: LogCount設定処理
6. **152行目**: 結果出力

#### Step 3: 設定変更ロジックを理解する

バージョンチェックと設定変更処理を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Set-DbaErrorLogConfig.ps1 | `public/Set-DbaErrorLogConfig.ps1` | LogSize設定（112-132行目） |
| 3-2 | Set-DbaErrorLogConfig.ps1 | `public/Set-DbaErrorLogConfig.ps1` | LogCount設定（134-151行目） |

**主要処理フロー**:
- **113-115行目**: バージョンチェック（VersionMajor < 11で拒否）
- **116-117行目**: 同一値チェックと警告
- **119-126行目**: ShouldProcess確認、設定、Alter()
- **127-131行目**: Refresh()と結果更新

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

```
Set-DbaErrorLogConfig
    │
    ├─ Connect-DbaInstance (接続確立)
    │      └─ SQL Server SMO接続
    │
    ├─ $server.NumberOfLogFiles (現在値取得)
    │
    ├─ $server.ErrorLogSizeKb (現在値取得)
    │
    ├─ Test-Bound (パラメータ検証)
    │
    └─ $server.Alter() (SMOメソッド)
           └─ 設定変更の適用
```

### データフロー図

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

SqlInstance ─────────┐
SqlCredential ───────┼──▶ Connect-DbaInstance ──▶ SMO Server
LogCount ────────────┤          │
LogSize ─────────────┘          ▼
                         現在設定値取得
                         (NumberOfLogFiles, ErrorLogSizeKb)
                               │
                         ┌─────┴─────┐
                         ▼           ▼
                    LogSize設定   LogCount設定
                    (バージョン検証) (範囲検証済み)
                         │           │
                         ▼           ▼
                    $server.Alter() × 2
                               │
                               ▼
                         PSCustomObject
                         (LogCount, LogSize:dbasize)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Set-DbaErrorLogConfig.ps1 | `public/Set-DbaErrorLogConfig.ps1` | ソース | メインコマンドレット実装 |
| Get-DbaErrorLogConfig.ps1 | `public/Get-DbaErrorLogConfig.ps1` | ソース | エラーログ設定取得（関連機能） |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続処理 |
