# 機能設計書 620-Get-DbaDbSequence

## 概要

本ドキュメントは、指定されたデータベースからSQL Serverシーケンスオブジェクトとその設定詳細を取得するdbatools PowerShell関数 `Get-DbaDbSequence` の機能設計書である。

### 本機能の処理概要

**業務上の目的・背景**：シーケンスはSQL Server 2012以降で使用可能な連番生成機能であり、IDENTITY列の代替として複数テーブル間で連番を共有したり、より柔軟な採番制御を行う場合に使用される。本機能は、データベース内のシーケンスオブジェクトを一覧取得し、その設定情報（データ型、開始値、増分値など）を確認することで、DBAがシーケンスのインベントリ作成、設定検証、メンテナンス計画を行うのを支援する。

**機能の利用シーン**：
- データベース内のシーケンスオブジェクトの棚卸し
- シーケンス設定の確認と検証
- メンテナンスや最適化が必要なシーケンスの特定
- 複数データベース間でのシーケンス設定の比較

**主要な処理内容**：
1. 対象データベースの取得（SqlInstanceまたはInputObject経由）
2. 各データベースのSequencesコレクションを取得
3. SequenceおよびSchemaパラメータでフィルタリング
4. 追加プロパティ（ComputerName、InstanceName等）を付与して出力

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

**権限による制御**：シーケンスオブジェクトの参照には、対象データベースでのVIEW DEFINITION権限またはCONTROL権限が必要。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 40 | シーケンス管理 | 主機能 | シーケンスの取得 |

## 機能種別

データ取得（SELECT）- オブジェクト情報照会

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| SqlInstance | DbaInstance[] | 条件付き | 対象のSQL Serverインスタンス | 有効なインスタンス名 |
| SqlCredential | PSCredential | No | 代替認証情報 | 有効な資格情報オブジェクト |
| Database | string[] | No | 対象のデータベース名 | 有効なデータベース名 |
| Sequence | string[] | No | 取得するシーケンスの名前 | - |
| Schema | string[] | No | 対象のスキーマ名 | 有効なスキーマ名 |
| InputObject | Database[] | No | パイプライン入力用のデータベースオブジェクト | 有効なDatabaseオブジェクト |
| EnableException | switch | No | 例外処理の有効化 | - |
| WhatIf | switch | No | 実行せずに処理内容を表示 | - |
| Confirm | switch | No | 実行前に確認プロンプトを表示 | - |

### 入力データソース

- SqlInstanceパラメータ: コマンドライン引数
- InputObject: Get-DbaDatabase からのパイプライン入力
- SqlCredential: Get-Credentialコマンドレットまたは事前定義の資格情報

## 出力仕様

### 出力データ

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

### 出力先

PowerShellパイプライン - Microsoft.SqlServer.Management.Smo.Sequenceオブジェクト（追加プロパティ付き）

## 処理フロー

### 処理シーケンス

```
1. 入力検証
   └─ SqlInstanceまたはInputObjectの必須チェック
2. データベースの取得
   └─ SqlInstance指定時はGet-DbaDatabase経由
3. 各データベースに対するループ処理
   ├─ アクセス可能性チェック
   └─ Sequencesコレクションの取得
4. フィルタリング処理
   ├─ Sequenceパラメータでの名前フィルター
   └─ Schemaパラメータでのスキーマフィルター
5. プロパティの追加と出力
   └─ ComputerName、InstanceName、SqlInstance、Databaseプロパティを追加
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{InputObject or SqlInstance?}
    B -->|Neither| C[エラー: 必須パラメータ]
    B -->|SqlInstance| D[Get-DbaDatabase]
    B -->|InputObject| E[InputObjectを使用]
    C --> Z[終了]
    D --> F[InputObjectに追加]
    E --> G[データベースループ開始]
    F --> G
    G --> H{IsAccessible?}
    H -->|No| I[スキップ]
    H -->|Yes| J[Sequences取得]
    J --> K{Sequence指定あり?}
    K -->|Yes| L[名前でフィルター]
    K -->|No| M{Schema指定あり?}
    L --> M
    M -->|Yes| N[スキーマでフィルター]
    M -->|No| O[シーケンスループ]
    N --> O
    O --> P{シーケンス残り?}
    P -->|No| Q[次のDBへ]
    P -->|Yes| R[プロパティ追加]
    R --> S[Select-DefaultView出力]
    S --> P
    Q --> T{DB残り?}
    T -->|Yes| H
    T -->|No| Z
    I --> Q
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | パラメータ必須 | SqlInstanceまたはInputObjectのいずれかが必須 | 常時 |
| BR-002 | アクセス可能チェック | IsAccessible=falseのデータベースはスキップ | データベース処理時 |
| BR-003 | 複合フィルター | SequenceとSchemaは両方指定可能で、AND条件で適用 | フィルター指定時 |

### 計算ロジック

特になし

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

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

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| シーケンス取得 | sys.sequences | SELECT | SMO経由でシーケンス情報を取得 |

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

#### sys.sequences

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| SELECT | name, schema_id, start_value, increment, data_type_id等 | SMO Sequencesプロパティ経由 | 読み取り専用 |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | パラメータエラー | SqlInstanceもInputObjectも未指定 | Stop-Functionでエラー出力 |
| - | 接続失敗 | SQL Serverインスタンスに接続できない | Get-DbaDatabase内でエラー処理 |

### リトライ仕様

リトライ機能なし

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

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

## パフォーマンス要件

特に定義されていない。SMOのSequencesコレクションアクセスは通常高速に完了する。

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

- シーケンスオブジェクトの参照にはVIEW DEFINITION権限またはCONTROL権限が必要
- Windows認証、SQL Server認証、Active Directory認証をサポート
- MFAサポートにはConnect-DbaInstanceを使用

## 備考

- シーケンスはSQL Server 2012以降で使用可能
- Nameパラメータは Sequenceのエイリアス
- Get-DbaDatabase からのパイプライン入力をサポート
- 追加プロパティとしてCurrentValue、MinValue、MaxValue、IsCycleEnabled、CacheSize等もSMOオブジェクトから取得可能

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Sequence (SMO) | Microsoft.SqlServer.Management.Smo | シーケンスオブジェクトの構造を理解する |

**読解のコツ**: SMOのSequenceオブジェクトは、Database.Sequencesコレクションからアクセスでき、StartValue、IncrementValue、DataType等のプロパティを持つ。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaDbSequence.ps1 | `public/Get-DbaDbSequence.ps1` | メイン関数の入口とパラメータ定義を確認 |

**主要処理フロー**:
1. **118-130行目**: パラメータブロック定義
2. **131-135行目**: 入力検証（SqlInstance/InputObject必須チェック）
3. **137-139行目**: SqlInstance指定時にGet-DbaDatabase経由でデータベース取得
4. **141-145行目**: 各データベースに対するループ、アクセス可能性チェック
5. **147-148行目**: Sequencesコレクション取得
6. **150-152行目**: Sequenceパラメータでフィルター
7. **154-156行目**: Schemaパラメータでフィルター
8. **158-165行目**: 追加プロパティの付与とSelect-DefaultView出力

#### Step 3: 依存関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaDatabase.ps1 | `public/Get-DbaDatabase.ps1` | データベースオブジェクトの取得方法を理解 |

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

```
Get-DbaDbSequence
    │
    ├─ 入力検証
    │      └─ SqlInstance/InputObject必須チェック
    │
    ├─ Get-DbaDatabase (SqlInstance指定時)
    │      └─ Connect-DbaInstance
    │             └─ SMO Server接続
    │
    └─ foreach Database
           ├─ IsAccessibleチェック
           ├─ db.Sequences取得
           ├─ Sequenceフィルター
           ├─ Schemaフィルター
           ├─ Add-Member (ComputerName, InstanceName, SqlInstance, Database)
           └─ Select-DefaultView
```

### データフロー図

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

SqlInstance      ───┬──▶ Get-DbaDatabase ───▶ データベースリスト
SqlCredential    ───┤                               │
Database         ───┤                               │
                    │                               ▼
                    │                        foreach database
                    │                               │
InputObject      ───┴───────────────────────▶ db.Sequences
                                                    │
Sequence         ───────────────────────────▶ 名前フィルター
Schema           ───────────────────────────▶ スキーマフィルター
                                                    │
                                                    ▼
                                             Add-Member
                                             ComputerName
                                             InstanceName
                                             SqlInstance
                                             Database
                                                    │
                                                    ▼
                                             Select-DefaultView ───▶ パイプライン出力
                                             ComputerName
                                             InstanceName
                                             SqlInstance
                                             Database
                                             Schema
                                             Name
                                             DataType
                                             StartValue
                                             IncrementValue
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaDbSequence.ps1 | `public/Get-DbaDbSequence.ps1` | ソース | メイン関数 |
| New-DbaDbSequence.ps1 | `public/New-DbaDbSequence.ps1` | ソース | シーケンス作成関数 |
| Remove-DbaDbSequence.ps1 | `public/Remove-DbaDbSequence.ps1` | ソース | シーケンス削除関数 |
| Set-DbaDbSequence.ps1 | `public/Set-DbaDbSequence.ps1` | ソース | シーケンス設定変更関数 |
| Select-DbaDbSequenceNextValue.ps1 | `public/Select-DbaDbSequenceNextValue.ps1` | ソース | 次の値取得関数 |
| Get-DbaDatabase.ps1 | `public/Get-DbaDatabase.ps1` | ソース | データベース取得関数 |
| Get-DbaDbSequence.Tests.ps1 | `tests/Get-DbaDbSequence.Tests.ps1` | テスト | 単体テスト |
