# 帳票設計書 10-Export-DbaSpConfigure

## 概要

本ドキュメントは、dbatools PowerShellモジュールのExport-DbaSpConfigureコマンドレットに関する帳票設計書です。全sp_configure設定をSQLスクリプトとして生成し、構成の複製やドキュメント化に使用する機能について記載しています。

### 本帳票の処理概要

Export-DbaSpConfigureは、SQL Serverのすべてのsp_configure設定オプション（詳細設定を含む）に対するEXEC sp_configure文を含む完全なSQLスクリプトファイルを作成するコマンドレットです。このスクリプトは別のSQL Serverインスタンスで実行して、まったく同じ構成設定を複製できます。

**業務上の目的・背景**：環境の標準化、災害復旧の準備、コンプライアンス用のドキュメント化において、SQL Serverのサーバーレベル構成を正確に再現する必要があります。本コマンドは詳細設定も含めてすべての構成をスクリプト化し、環境間の一貫性を確保します。

**帳票の利用シーン**：
1. 複数インスタンス間の構成設定の統一
2. 災害復旧時の構成復元スクリプト準備
3. 構成変更前のベースラインドキュメント作成
4. コンプライアンス監査用の構成記録
5. 新規サーバー構築時のテンプレート作成

**主要な出力内容**：
1. sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE
2. 各構成オプションのEXEC sp_configure文
3. sp_configure 'show advanced options', 0;（元の設定復元）

**帳票の出力タイミング**：Export-DbaSpConfigureコマンドを実行した時点でSQLスクリプトファイルが生成されます。

**帳票の利用者**：データベース管理者（DBA）、システム管理者、インフラエンジニア

## 帳票種別

サーバー構成スクリプト（T-SQL）

## 利用画面

| 画面No | 画面名 | URL/ルーティング | 出力操作 |
|--------|--------|-----------------|---------|
| N/A | PowerShellコンソール | N/A | Export-DbaSpConfigureコマンド実行 |

## 出力形式

### 基本仕様

| 項目 | 内容 |
|-----|------|
| ファイル形式 | SQL (.sql) |
| 用紙サイズ | N/A（スクリプトファイル） |
| 向き | N/A |
| ファイル名 | {Servername}-{MMDDYYYYhhmmss}-sp_configure.sql または指定名 |
| 出力方法 | ファイル書き込み |
| 文字コード | システムデフォルト |

## 帳票レイアウト

### レイアウト概要

sp_configureコマンドの連続スクリプトです。

```
┌─────────────────────────────────────┐
│  EXEC sp_configure 'show advanced  │
│  options', 1; RECONFIGURE WITH     │
│  OVERRIDE                          │
├─────────────────────────────────────┤
│  EXEC sp_configure 'option1', val; │
│  EXEC sp_configure 'option2', val; │
│  EXEC sp_configure 'option3', val; │
│         ...                         │
├─────────────────────────────────────┤
│  EXEC sp_configure 'show advanced  │
│  options', 0;                      │
│  RECONFIGURE WITH OVERRIDE         │
│  （元の設定が0の場合のみ）           │
└─────────────────────────────────────┘
```

### ヘッダー部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | 詳細オプション有効化 | show advanced options を 1 に設定 | 固定 | T-SQL |
| 2 | RECONFIGURE | 設定適用 | 固定 | T-SQL |

### 明細部

| No | 項目名 | 説明 | データ取得元 | 表示形式 | 列幅 |
|----|-------|------|-------------|---------|-----|
| 1 | sp_configure文 | 各構成オプションの設定文 | Server.Configuration.Properties | T-SQL | 可変 |

### フッター部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | 詳細オプション無効化 | show advanced options を 0 に戻す | 元の設定値 | T-SQL |
| 2 | RECONFIGURE | 設定適用 | 固定 | T-SQL |

## 出力条件

### 抽出条件

| 条件名 | 説明 | 必須 |
|-------|------|-----|
| SqlInstance | 対象SQL Serverインスタンス | Yes |
| Path | 出力ディレクトリ | No（デフォルト: DbatoolsExportパス） |
| FilePath | 出力ファイルパス | No |

### ソート順

| 優先度 | 項目 | 昇順/降順 |
|-------|------|---------|
| 1 | Server.Configuration.Properties順 | N/A |

### 改ページ条件

スクリプトファイルのため改ページは適用されません。

## データベース参照仕様

### 参照テーブル一覧

| テーブル名 | 用途 | 結合条件 |
|-----------|------|---------|
| Server.Configuration (SMO) | 構成オプション取得 | N/A |

### Configuration Properties

| プロパティ | 説明 | 用途 |
|-----------|------|------|
| DisplayName | 構成オプションの表示名 | sp_configure第1引数 |
| ConfigValue | 現在の設定値 | sp_configure第2引数 |
| ShowAdvancedOptions | 詳細オプション表示フラグ | スクリプト前後の処理 |

## 計算仕様

### 計算項目一覧

| 項目名 | 計算式 | 端数処理 | 備考 |
|-------|-------|---------|------|
| 特になし | N/A | N/A | 値はそのまま出力 |

## 処理フロー

### 出力フロー

```mermaid
flowchart TD
    A[Export-DbaSpConfigure実行] --> B[Connect-DbaInstance]
    B --> C[ファイルパス決定]
    C --> D{ShowAdvancedOptions = 0?}
    D -->|Yes| E[ShowAdvancedOptions = 1に設定]
    D -->|No| F[そのまま継続]
    E --> G[show advanced options有効化をファイル出力]
    F --> G
    G --> H[Configuration.Propertiesループ]
    H --> I[各sp_configure文をファイル追加]
    I --> J{全プロパティ処理完了?}
    J -->|No| H
    J -->|Yes| K{元のShowAdvancedOptions = 0?}
    K -->|Yes| L[show advanced options無効化を追加]
    K -->|No| M[そのまま]
    L --> N[サーバー設定を元に戻す]
    M --> O[FileInfo出力]
    N --> O
```

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 表示メッセージ | 対処方法 |
|----------|---------|--------------|---------|
| 接続エラー | SQL Server接続失敗 | "Failure" | 接続情報確認 |
| 権限エラー | show advanced options設定失敗 | "Can't set 'show advanced options' to 1 on instance" | sysadmin権限確認 |
| ファイル書き込みエラー | ファイル出力失敗 | "Can't write to $FilePath" | 権限・パス確認 |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定データ件数 | 構成オプション数（約70〜100程度） |
| 目標出力時間 | 数秒 |
| 同時出力数上限 | 1インスタンス/セッション |

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

- sysadmin権限が必要（show advanced optionsの変更に必要な場合）
- SQL Server 2005以上対応
- 出力スクリプトにはセキュリティ関連設定も含まれる可能性
- スクリプトファイルのアクセス権限を適切に設定

## 備考

- 一時的にshow advanced optionsを1に変更し、処理後に元の値に戻す
- パイプラインで複数インスタンスを処理可能
- ファイル名にサーバー名とタイムスタンプが自動付与される
- コマンド直接出力せず、ファイルに保存される

---

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

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

### 推奨読解順序

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

SMO Server.Configurationオブジェクトの構造を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Export-DbaSpConfigure.ps1 | `public/Export-DbaSpConfigure.ps1` | Configuration.Properties使用箇所 |

**読解のコツ**: DisplayNameとConfigValueプロパティの使用に注目

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Export-DbaSpConfigure.ps1 | `public/Export-DbaSpConfigure.ps1` | パラメータと処理フロー |

**主要処理フロー**:
1. **行94-96**: beginブロック - 出力ディレクトリ確認
2. **行97-139**: processブロック - メイン処理
3. **行140-142**: endブロック - 完了メッセージ

#### Step 3: 構成取得と出力処理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Export-DbaSpConfigure.ps1 | `public/Export-DbaSpConfigure.ps1` | 構成ループと出力 |

**主要処理フロー**:
- **行107**: ShowAdvancedOptions現在値取得
- **行109-116**: ShowAdvancedOptions一時変更
- **行118-121**: 初期行出力（show advanced options有効化）
- **行124-127**: 各構成オプションの出力ループ
- **行130-136**: ShowAdvancedOptions復元

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

```
Export-DbaSpConfigure (PowerShell)
    │
    ├─ Test-ExportDirectory
    │      └─ 出力ディレクトリ確認
    │
    ├─ Connect-DbaInstance
    │      └─ SQL Server接続（MinimumVersion 9）
    │
    ├─ Get-ExportFilePath
    │      └─ ファイルパス生成
    │
    ├─ Server.Configuration.ShowAdvancedOptions (SMO)
    │      ├─ .ConfigValue 取得
    │      └─ .ConfigValue 設定
    │
    ├─ Server.Configuration.Alter (SMO)
    │      └─ 設定変更適用
    │
    ├─ Server.Configuration.Properties (SMO)
    │      └─ 全構成オプション取得
    │
    ├─ Set-Content / Add-Content
    │      └─ ファイル書き込み
    │
    └─ Get-ChildItem
           └─ FileInfo出力
```

### データフロー図

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

SqlInstance               ┌──────────────────┐
     │                    │ Connect          │
     └───────────────────▶│ DbaInstance      │
                          └────────┬─────────┘
                                   │
                                   ▼
                          ┌──────────────────┐
                          │ Configuration    │
                          │ Properties取得   │
                          └────────┬─────────┘
                                   │
                                   ▼
                          ┌──────────────────┐
                          │ show advanced    │
                          │ options有効化    │
                          └────────┬─────────┘
                                   │
                                   ▼
                          ┌──────────────────┐
                          │ 各オプション     │────▶  .sqlファイル
                          │ sp_configure出力 │
                          └────────┬─────────┘
                                   │
                                   ▼
                          ┌──────────────────┐
                          │ show advanced    │
                          │ options復元     │
                          └────────┬─────────┘
                                   │
                                   ▼
                          ┌──────────────────┐
                          │ FileInfo出力     │
                          └──────────────────┘
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Export-DbaSpConfigure.ps1 | `public/Export-DbaSpConfigure.ps1` | ソース | メインコマンドレット |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続 |
| Test-ExportDirectory.ps1 | `private/functions/Test-ExportDirectory.ps1`（推定） | ソース | ディレクトリ確認 |
| Get-ExportFilePath.ps1 | `private/functions/Get-ExportFilePath.ps1`（推定） | ソース | ファイルパス生成 |
| dbatools.psd1 | `dbatools.psd1` | 設定 | モジュールマニフェスト |
