# データベース設計書

## 概要

本ドキュメントは、dbatools PowerShellモジュールが管理・作成するSQL Server用データベーステーブルの設計を記述します。dbatoolsはSQL Server管理ツールであり、主にOla HallengrenのSQL Server Maintenance Solutionに基づくメンテナンス機能を提供します。これらのテーブルは、データベースバックアップ、インデックス最適化、整合性チェックなどのメンテナンスタスクの実行ログおよびキュー管理に使用されます。

## テーブル一覧

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| CommandLog | コマンド実行ログ | データベースメンテナンスコマンドの実行履歴を記録 |
| Queue | 実行キュー | メンテナンスタスクのキュー管理 |
| QueueDatabase | キュー別データベース | Queueテーブルに関連付けられたデータベースごとの実行状態を管理 |

## 各テーブル定義

### 1. CommandLog

データベースメンテナンスコマンド（バックアップ、インデックス再構築、整合性チェック等）の実行履歴を記録するテーブルです。実行の開始時間、終了時間、エラー情報などを保持します。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| ID | int IDENTITY(1,1) | NOT NULL | 主キー。自動採番の一意識別子 |
| DatabaseName | sysname | NULL | 対象データベース名 |
| SchemaName | sysname | NULL | 対象スキーマ名 |
| ObjectName | sysname | NULL | 対象オブジェクト名（テーブル名等） |
| ObjectType | char(2) | NULL | オブジェクトタイプ（U: テーブル等） |
| IndexName | sysname | NULL | 対象インデックス名 |
| IndexType | tinyint | NULL | インデックスタイプ |
| StatisticsName | sysname | NULL | 統計情報名 |
| PartitionNumber | int | NULL | パーティション番号 |
| ExtendedInfo | xml | NULL | 拡張情報（XML形式） |
| Command | nvarchar(max) | NOT NULL | 実行されたSQLコマンド |
| CommandType | nvarchar(60) | NOT NULL | コマンドタイプ（BACKUP_DATABASE, INDEX_REBUILD等） |
| StartTime | datetime2(7) | NOT NULL | コマンド実行開始時刻 |
| EndTime | datetime2(7) | NULL | コマンド実行終了時刻 |
| ErrorNumber | int | NULL | エラー番号（エラー発生時） |
| ErrorMessage | nvarchar(max) | NULL | エラーメッセージ（エラー発生時） |

**制約:**
- 主キー: `PK_CommandLog` (ID ASC)

### 2. Queue

メンテナンスタスクのキュー管理を行うテーブルです。ストアドプロシージャの実行キューイングに使用されます。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| QueueID | int IDENTITY(1,1) | NOT NULL | 主キー。自動採番の一意識別子 |
| SchemaName | sysname | NOT NULL | 実行するストアドプロシージャのスキーマ名 |
| ObjectName | sysname | NOT NULL | 実行するストアドプロシージャ名 |
| Parameters | nvarchar(max) | NOT NULL | 実行パラメータ |
| QueueStartTime | datetime2(7) | NULL | キュー開始時刻 |
| SessionID | smallint | NULL | 実行中のセッションID |
| RequestID | int | NULL | リクエストID |
| RequestStartTime | datetime | NULL | リクエスト開始時刻 |

**制約:**
- 主キー: `PK_Queue` (QueueID ASC)

### 3. QueueDatabase

Queueテーブルに関連付けられたデータベースごとの実行状態を管理するテーブルです。複数のデータベースに対するメンテナンス処理の進捗を追跡します。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| QueueID | int | NOT NULL | 外部キー。Queueテーブルへの参照 |
| DatabaseName | sysname | NOT NULL | 対象データベース名 |
| DatabaseOrder | int | NULL | データベースの処理順序 |
| DatabaseStartTime | datetime2(7) | NULL | データベース処理開始時刻 |
| DatabaseEndTime | datetime2(7) | NULL | データベース処理終了時刻 |
| SessionID | smallint | NULL | 実行中のセッションID |
| RequestID | int | NULL | リクエストID |
| RequestStartTime | datetime | NULL | リクエスト開始時刻 |

**制約:**
- 主キー: `PK_QueueDatabase` (QueueID ASC, DatabaseName ASC)
- 外部キー: `FK_QueueDatabase_Queue` (QueueID) REFERENCES Queue(QueueID)

## 備考

### テーブルの用途

1. **CommandLog**: `dbo.CommandExecute`ストアドプロシージャによって使用され、すべてのメンテナンスコマンドの実行結果を記録します。LogToTableパラメータが'Y'の場合にログが記録されます。

2. **Queue / QueueDatabase**: 並列処理でのメンテナンスタスク管理に使用されます。DatabasesInParallelパラメータが'Y'の場合に活用されます。

### 作成元

これらのテーブルはOla HallengrenのSQL Server Maintenance Solutionの一部であり、dbatoolsモジュールを通じてSQL Serverインスタンスにデプロイされます。

### 関連コマンド

- `Install-DbaMaintenanceSolution`: Maintenance Solutionのインストール
- `Invoke-DbaDbBackup`: データベースバックアップの実行
- `Invoke-DbaDbIntegrityCheck`: 整合性チェックの実行
- `Invoke-DbaDbIndexOptimize`: インデックス最適化の実行

### データ型について

- `sysname`: SQL Serverのシステムデータ型で、nvarchar(128)と同等
- `datetime2(7)`: 高精度日時型（100ナノ秒精度）
- `xml`: XML形式のデータ格納用
