# 画面設計書 40-シーケンス管理

## 概要

本ドキュメントは、dbatoolsにおけるデータベースシーケンス管理機能の設計仕様を定義する。

### 本画面の処理概要

シーケンス管理機能は、SQL Serverのシーケンスオブジェクトの取得を行うPowerShellコマンドを提供する。シーケンスはIDENTITY列の代替として、複数テーブル間で共有可能な連番生成機能を提供するデータベースオブジェクトである。

**業務上の目的・背景**：シーケンスはSQL Server 2012以降で導入された、連番生成のためのスキーマバウンドオブジェクトである。IDENTITY列と異なり、複数のテーブルで同じ連番を共有したり、値を事前に取得したりすることが可能。本機能は、シーケンスの一覧取得、設定確認、データベース間でのシーケンス構成の監査を支援する。

**画面へのアクセス方法**：PowerShellコンソールまたはスクリプトから以下のコマンドを実行してアクセスする。
- `Get-DbaDbSequence` - シーケンスの取得

**主要な操作・処理内容**：
1. シーケンス情報の取得：データ型、開始値、増分値、キャッシュ設定などの取得
2. シーケンスのフィルタリング：名前、スキーマによる絞り込み

**画面遷移**：本機能はCLIベースのため画面遷移は存在しないが、以下のコマンド間で連携が可能。
- `Get-DbaDatabase` から `Get-DbaDbSequence` へパイプライン入力
- シーケンス設計のドキュメント化ワークフロー

**権限による表示制御**：シーケンスの参照にはデータベースへのアクセス権限が必要。シーケンスの変更にはALTER権限またはシーケンスの所有権が必要。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 191 | Get-DbaDbSequence | 主機能 | シーケンスの取得 |

## 画面種別

CLI（コマンドラインインターフェース）- PowerShellコマンド

## URL/ルーティング

N/A（PowerShellモジュールのコマンドとして提供）

## 入出力項目

### Get-DbaDbSequence

| 項目名 | 型 | 必須 | 説明 |
|--------|-----|------|------|
| SqlInstance | DbaInstance[] | - | 対象SQLインスタンス |
| SqlCredential | PSCredential | - | 代替認証情報 |
| Database | string[] | - | 対象データベース名フィルター |
| Sequence | string[] | - | 取得対象シーケンス名フィルター（Nameエイリアス） |
| Schema | string[] | - | スキーマ名でフィルター |
| InputObject | Database[] | - | パイプライン入力用データベースオブジェクト |
| EnableException | switch | - | 例外処理の有効化 |

## 表示項目

### Get-DbaDbSequence 出力

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ComputerName | string | SQLサーバーのコンピュータ名 |
| InstanceName | string | SQLインスタンス名 |
| SqlInstance | string | 完全なSQLインスタンス名 |
| Database | string | データベース名 |
| Schema | string | スキーマ名 |
| Name | string | シーケンス名 |
| DataType | string | データ型（bigint/int/smallint/tinyint等） |
| StartValue | long | 開始値 |
| IncrementValue | long | 増分値 |

### Get-DbaDbSequence 追加プロパティ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| CurrentValue | long | 現在値 |
| MinValue | long | 最小値 |
| MaxValue | long | 最大値 |
| IsCycleEnabled | bool | サイクル有効フラグ |
| CacheSize | int | キャッシュサイズ（0=キャッシュなし） |
| SequenceCacheType | string | キャッシュタイプ（DefaultCache/NoCache/CacheWithSize） |
| Parent | Database | 親データベースオブジェクト |
| Urn | string | URN識別子 |
| State | string | SMOオブジェクト状態 |

## イベント仕様

### 1-シーケンス取得

Get-DbaDbSequenceコマンド実行時：
1. InputObjectまたはSqlInstanceの指定を確認
2. SqlInstance指定時はGet-DbaDatabaseでデータベースを取得
3. アクセス不可なデータベースはスキップ
4. 各データベースのSequencesコレクションを取得
5. Sequenceパラメータ指定時は名前でフィルター
6. Schemaパラメータ指定時はスキーマでフィルター
7. カスタムプロパティ（ComputerName、InstanceName等）を追加して出力

## データベース更新仕様

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| シーケンス取得 | sys.sequences | SELECT | シーケンス情報の参照 |

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|--------------|----------|
| MSG001 | エラー | You must pipe in a database or specify a SqlInstance | SqlInstanceとInputObject両方未指定 |
| MSG002 | 詳細 | Getting Database Sequences for {db} on {server} | シーケンス取得処理開始 |

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| SqlInstanceとInputObject両方未指定 | Stop-Functionでエラー出力して終了 |
| インスタンス接続失敗 | Stop-Functionでエラー出力して続行 |
| データベースにアクセスできない | スキップして続行 |

## 備考

- シーケンスはSQL Server 2012以降でサポート
- シーケンスの主な特徴：
  - スキーマバウンドオブジェクト（テーブルに依存しない）
  - 複数テーブル間で共有可能
  - NEXT VALUE FOR関数で値を取得
  - sp_sequence_get_rangeで範囲取得が可能
  - サイクル（最大値から最小値へのループ）設定可能
  - キャッシュによるパフォーマンス最適化
- データ型の選択：
  - bigint: -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807
  - int: -2,147,483,648 から 2,147,483,647
  - smallint: -32,768 から 32,767
  - tinyint: 0 から 255
  - decimal/numeric: 有効桁数38桁まで
- キャッシュサイズ0は「キャッシュなし」を意味し、毎回ディスクI/Oが発生する

---

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

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

### 推奨読解順序

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

シーケンス管理で扱う主要なデータ構造はSMOのSequenceオブジェクトである。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaDbSequence.ps1 | `public/Get-DbaDbSequence.ps1` | 出力オブジェクトの構造（行58-85）を確認 |

**読解のコツ**: SequenceオブジェクトはDataType、StartValue、IncrementValue、CacheSizeなどの設定プロパティを持つ。CurrentValueで現在値を確認可能。

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

process{}ブロックが処理の起点となる。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaDbSequence.ps1 | `public/Get-DbaDbSequence.ps1` | 行131-167のprocessブロック |

**主要処理フロー（Get-DbaDbSequence）**:
1. **行132-135**: InputObjectまたはSqlInstanceの必須確認
2. **行137-139**: Get-DbaDatabaseでデータベース取得
3. **行142-144**: アクセス不可なデータベースをスキップ
4. **行148**: Database.Sequencesコレクション取得
5. **行150-156**: フィルタリング処理
6. **行158-165**: カスタムプロパティ追加と出力

#### Step 3: フィルタリングロジックを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaDbSequence.ps1 | `public/Get-DbaDbSequence.ps1` | フィルタリング処理（行150-156） |

**フィルタリングの詳細**:
```powershell
if ($Sequence) {
    $dbSequences = $dbSequences | Where-Object { $_.Name -in $Sequence }
}
if ($Schema) {
    $dbSequences = $dbSequences | Where-Object { $_.Schema -in $Schema }
}
```

- Sequenceパラメータ: 名前による完全一致フィルター
- Schemaパラメータ: スキーマによる完全一致フィルター

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

```
Get-DbaDbSequence
    |
    +-- Get-DbaDatabase
    |
    +-- Database.Sequences (SMOコレクション)
    |
    +-- フィルタリング (Sequence/Schema)
    |
    +-- Select-DefaultView (出力整形)
```

### データフロー図

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

SqlInstance    ----->  Connect-DbaInstance
                            |
Database       ----->  フィルタリング           ----->  対象データベース
                            |
                     Database.Sequences取得
                            |
Sequence       ----->  名前フィルタリング
                            |
Schema         ----->  スキーマフィルタリング
                            |
                     Select-DefaultView          ----->  Sequence (シーケンス情報)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaDbSequence.ps1 | `public/Get-DbaDbSequence.ps1` | ソース | シーケンス取得コマンド |
| Get-DbaDatabase.ps1 | `public/Get-DbaDatabase.ps1` | ソース | データベース取得（依存コマンド） |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | インスタンス接続（依存コマンド） |
| New-DbaDbSequence.ps1 | `public/New-DbaDbSequence.ps1` | ソース | シーケンス作成（関連コマンド、存在する場合） |
| Set-DbaDbSequence.ps1 | `public/Set-DbaDbSequence.ps1` | ソース | シーケンス設定変更（関連コマンド、存在する場合） |
