# 画面設計書：50-パーティション管理

## 1. 基本情報

| 項目 | 内容 |
|------|------|
| 画面ID | 50 |
| 画面名 | パーティション管理 |
| カテゴリ | Database |
| 対応コマンド | Get-DbaDbPartitionFunction, Remove-DbaDbPartitionFunction, Get-DbaDbPartitionScheme, Remove-DbaDbPartitionScheme |
| 主テンプレートファイル | public/Get-DbaDbPartitionFunction.ps1 |
| 説明 | SQL Serverデータベースのパーティション関数とパーティションスキームの取得・削除機能を提供 |

## 2. 画面概要

パーティション管理画面は、SQL Serverデータベースのテーブルパーティショニングを管理するためのコマンド群を提供します。パーティション関数（データの分割方法を定義）とパーティションスキーム（パーティションのファイルグループへのマッピングを定義）の取得・削除機能を含みます。

### 2.1 主要機能

| 機能No | コマンド名 | 機能種別 | 説明 |
|--------|------------|----------|------|
| 111 | Get-DbaDbPartitionFunction | 主機能 | パーティション関数の取得 |
| 203 | Remove-DbaDbPartitionFunction | 補助機能 | パーティション関数の削除 |
| 112 | Get-DbaDbPartitionScheme | 補助機能 | パーティションスキームの取得 |
| 204 | Remove-DbaDbPartitionScheme | 補助機能 | パーティションスキームの削除 |

## 3. 機能詳細

### 3.1 Get-DbaDbPartitionFunction

#### 目的
データベースに定義されたパーティション関数とそのメタデータ（作成日、パーティション数等）を取得します。パーティショニング戦略の文書化、パーティション分布の分析、メンテナンス操作前の監査に使用されます。

#### パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|------|--------------|------|
| SqlInstance | DbaInstanceParameter[] | Yes | - | 対象SQL Serverインスタンス |
| SqlCredential | PSCredential | No | - | 代替認証情報 |
| Database | object[] | No | - | 対象データベース |
| ExcludeDatabase | object[] | No | - | 除外データベース |
| PartitionFunction | string[] | No | - | 対象パーティション関数名 |
| EnableException | switch | No | - | 例外を有効化 |

#### 出力

| 出力型 | 説明 |
|--------|------|
| Microsoft.SqlServer.Management.Smo.PartitionFunction | SMOパーティション関数オブジェクト |

#### デフォルト表示プロパティ

- ComputerName
- InstanceName
- SqlInstance
- Database
- CreateDate
- Name
- NumberOfPartitions

#### 処理フロー

1. Connect-DbaInstanceでサーバー接続
2. IsAccessibleなデータベースをフィルタリング
3. Database/ExcludeDatabaseでフィルタ
4. Database.PartitionFunctionsコレクションを列挙
5. PartitionFunction指定時、対象関数のみフィルタ
6. カスタムプロパティを追加して出力

### 3.2 Remove-DbaDbPartitionFunction

#### 目的
データベースからパーティション関数を削除します。パーティションクリーンアップ操作、スキーママイグレーション、パーティションテーブルの廃止時に使用されます。

#### パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|------|--------------|------|
| SqlInstance | DbaInstanceParameter[] | No | - | 対象インスタンス |
| SqlCredential | PSCredential | No | - | 代替認証情報 |
| Database | string[] | No | - | 対象データベース |
| ExcludeDatabase | object[] | No | - | 除外データベース |
| InputObject | PartitionFunction[] | Yes(Pipeline) | - | パイプライン入力 |
| EnableException | switch | No | - | 例外を有効化 |

#### 出力

| プロパティ | 型 | 説明 |
|-----------|-----|------|
| ComputerName | string | コンピュータ名 |
| InstanceName | string | インスタンス名 |
| SqlInstance | string | 完全インスタンス名 |
| Database | string | データベース名 |
| PartitionFunctionName | string | パーティション関数名 |
| Status | string | "Dropped" または エラーメッセージ |
| IsRemoved | bool | 削除成功フラグ |

#### 処理フロー

1. beginブロックで空の配列を初期化
2. processブロックでGet-DbaDbPartitionFunction経由またはInputObjectから関数収集
3. endブロックで実際のDrop()実行（コレクション変更問題回避）
4. ShouldProcess確認後、Drop()メソッド呼び出し
5. 成功/失敗結果をPSCustomObjectで出力

### 3.3 Get-DbaDbPartitionScheme

#### 目的
データベースに定義されたパーティションスキームとそのメタデータ（関連パーティション関数等）を取得します。パーティションテーブルのストレージマッピング確認、パフォーマンストラブルシューティング、パーティションメンテナンス準備に使用されます。

#### パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|------|--------------|------|
| SqlInstance | DbaInstanceParameter[] | Yes | - | 対象インスタンス |
| SqlCredential | PSCredential | No | - | 代替認証情報 |
| Database | object[] | No | - | 対象データベース |
| ExcludeDatabase | object[] | No | - | 除外データベース |
| PartitionScheme | string[] | No | - | 対象パーティションスキーム名 |
| EnableException | switch | No | - | 例外を有効化 |

#### 出力

| 出力型 | 説明 |
|--------|------|
| Microsoft.SqlServer.Management.Smo.PartitionScheme | SMOパーティションスキームオブジェクト |

#### デフォルト表示プロパティ

- ComputerName
- InstanceName
- SqlInstance
- Database
- Name
- PartitionFunction

#### 処理フロー

1. Connect-DbaInstanceでサーバー接続
2. IsAccessibleなデータベースをフィルタリング
3. Database/ExcludeDatabaseでフィルタ
4. Database.PartitionSchemesコレクションを列挙
5. PartitionScheme指定時、対象スキームのみフィルタ
6. カスタムプロパティを追加して出力

### 3.4 Remove-DbaDbPartitionScheme

#### 目的
データベースからパーティションスキームを削除します。データベース再編成、マイグレーションプロジェクト、パーティション戦略の簡素化時に使用されます。

#### パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|------|--------------|------|
| SqlInstance | DbaInstanceParameter[] | No | - | 対象インスタンス |
| SqlCredential | PSCredential | No | - | 代替認証情報 |
| Database | string[] | No | - | 対象データベース |
| ExcludeDatabase | object[] | No | - | 除外データベース |
| InputObject | PartitionScheme[] | Yes(Pipeline) | - | パイプライン入力 |
| EnableException | switch | No | - | 例外を有効化 |

#### 出力

| プロパティ | 型 | 説明 |
|-----------|-----|------|
| ComputerName | string | コンピュータ名 |
| InstanceName | string | インスタンス名 |
| SqlInstance | string | 完全インスタンス名 |
| Database | string | データベース名 |
| PartitionSchemeName | string | パーティションスキーム名 |
| Status | string | "Dropped" または エラーメッセージ |
| IsRemoved | bool | 削除成功フラグ |

#### 処理フロー

1. beginブロックで空の配列を初期化
2. processブロックでGet-DbaDbPartitionScheme経由またはInputObjectからスキーム収集
3. endブロックで実際のDrop()実行（コレクション変更問題回避）
4. ShouldProcess確認後、Drop()メソッド呼び出し
5. 成功/失敗結果をPSCustomObjectで出力

## 4. UI/UX仕様

### 4.1 コマンドライン操作

```powershell
# 全パーティション関数の取得
Get-DbaDbPartitionFunction -SqlInstance sql2016

# 特定データベースのパーティション関数取得
Get-DbaDbPartitionFunction -SqlInstance Server1 -Database db1

# 特定データベース以外のパーティション関数取得
Get-DbaDbPartitionFunction -SqlInstance Server1 -ExcludeDatabase db1

# パイプラインでの取得
'Sql1','Sql2/sqlexpress' | Get-DbaDbPartitionFunction

# 特定パーティション関数の取得
Get-DbaDbPartitionFunction -SqlInstance localhost -Database TestDB -PartitionFunction partFun01

# パーティション関数の削除
Remove-DbaDbPartitionFunction -SqlInstance localhost, sql2016 -Database db1, db2

# 選択的削除（Out-GridView使用）
Get-DbaDbPartitionFunction -SqlInstance SRV1 | Out-GridView -Title 'Select partition function(s) to drop' -OutputMode Multiple | Remove-DbaDbPartitionFunction

# 全パーティションスキームの取得
Get-DbaDbPartitionScheme -SqlInstance sql2016

# 特定データベースのパーティションスキーム取得
Get-DbaDbPartitionScheme -SqlInstance Server1 -Database db1

# パーティションスキームの削除
Remove-DbaDbPartitionScheme -SqlInstance localhost, sql2016 -Database db1, db2

# 選択的削除（Out-GridView使用）
Get-DbaDbPartitionScheme -SqlInstance SRV1 | Out-GridView -Title 'Select partition scheme(s) to drop' -OutputMode Multiple | Remove-DbaDbPartitionScheme
```

### 4.2 出力例

```
# Get-DbaDbPartitionFunction
ComputerName InstanceName SqlInstance Database CreateDate          Name          NumberOfPartitions
------------ ------------ ----------- -------- ----------          ----          ------------------
SERVER1      MSSQLSERVER  SERVER1     db1      2024-01-15 10:30:00 pf_Monthly    12
SERVER1      MSSQLSERVER  SERVER1     db1      2024-02-01 09:00:00 pf_Quarterly  4

# Remove-DbaDbPartitionFunction
ComputerName InstanceName SqlInstance Database PartitionFunctionName Status  IsRemoved
------------ ------------ ----------- -------- --------------------- ------  ---------
SERVER1      MSSQLSERVER  SERVER1     db1      pf_Monthly           Dropped True

# Get-DbaDbPartitionScheme
ComputerName InstanceName SqlInstance Database Name          PartitionFunction
------------ ------------ ----------- -------- ----          -----------------
SERVER1      MSSQLSERVER  SERVER1     db1      ps_Monthly    pf_Monthly
SERVER1      MSSQLSERVER  SERVER1     db1      ps_Quarterly  pf_Quarterly

# Remove-DbaDbPartitionScheme
ComputerName InstanceName SqlInstance Database PartitionSchemeName Status  IsRemoved
------------ ------------ ----------- -------- ------------------- ------  ---------
SERVER1      MSSQLSERVER  SERVER1     db1      ps_Monthly          Dropped True
```

## 5. エラーハンドリング

### 5.1 エラーケース

| エラー条件 | 対処方法 | 出力 |
|-----------|----------|------|
| データベースアクセス不可 | Write-Message Warning、スキップ | 警告メッセージ |
| パーティション関数なし | Write-Message Verbose、継続 | Verboseメッセージ |
| パーティションスキームなし | Write-Message Verbose、継続 | Verboseメッセージ |
| Drop失敗（依存関係等） | Stop-Function、Status=エラーメッセージ | IsRemoved=false |
| 接続失敗 | Stop-Function、Continue | エラーメッセージ |

### 5.2 ConfirmImpact

| コマンド | ConfirmImpact | 説明 |
|----------|---------------|------|
| Get-DbaDbPartitionFunction | なし | 参照のみ |
| Get-DbaDbPartitionScheme | なし | 参照のみ |
| Remove-DbaDbPartitionFunction | High | 確認プロンプト表示 |
| Remove-DbaDbPartitionScheme | High | 確認プロンプト表示 |

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

### 6.1 必要権限

| 操作 | 必要権限 |
|------|----------|
| パーティション関数/スキーム取得 | VIEW DEFINITION権限 |
| パーティション関数削除 | ALTER ANY DATASPACE権限 |
| パーティションスキーム削除 | ALTER ANY DATASPACE権限 |

### 6.2 パーティション依存関係

- パーティションスキームはパーティション関数に依存
- パーティションテーブル/インデックスはパーティションスキームに依存
- 依存オブジェクトがある場合は削除不可

## 7. パフォーマンス考慮事項

### 7.1 パーティション関数/スキームの数

- 大規模データベースでは多数のパーティションオブジェクトが存在する可能性
- ExcludeDatabaseで不要なデータベースをスキップ推奨

### 7.2 endブロックでの削除

- コレクション変更問題を回避するため、endブロックで一括削除
- パイプライン入力でも正しく動作

### 7.3 パーティション数

- NumberOfPartitionsプロパティでパーティション数を確認可能
- 大量のパーティションを持つ関数の特定に有用

## 8. 関連コマンド

| コマンド | 関連性 |
|----------|--------|
| Get-DbaDatabase | データベースオブジェクト取得 |
| Get-DbaDbTable | パーティションテーブル確認 |
| Get-DbaDbIndex | パーティションインデックス確認 |

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

### 9.1 関連ファイル一覧

| ファイルパス | 行数 | 役割 |
|-------------|------|------|
| public/Get-DbaDbPartitionFunction.ps1 | 152 | パーティション関数取得コマンド |
| public/Remove-DbaDbPartitionFunction.ps1 | 132 | パーティション関数削除コマンド |
| public/Get-DbaDbPartitionScheme.ps1 | 155 | パーティションスキーム取得コマンド |
| public/Remove-DbaDbPartitionScheme.ps1 | 135 | パーティションスキーム削除コマンド |

### 9.2 データ構造

```
Microsoft.SqlServer.Management.Smo.PartitionFunction
├── Name: パーティション関数名
├── CreateDate: 作成日
├── NumberOfPartitions: パーティション数
├── ParameterType: パーティション列のデータ型
├── RangeType: 範囲タイプ（Left/Right）
├── RangeValues: 境界値コレクション
├── Urn: Uniform Resource Name
├── State: SMO状態
└── Parent: Database

Microsoft.SqlServer.Management.Smo.PartitionScheme
├── Name: パーティションスキーム名
├── PartitionFunction: 関連パーティション関数名
├── FileGroups: ファイルグループマッピング
├── Urn: Uniform Resource Name
├── State: SMO状態
└── Parent: Database

削除結果オブジェクト:
PSCustomObject
├── ComputerName: コンピュータ名
├── InstanceName: インスタンス名
├── SqlInstance: 完全インスタンス名
├── Database: データベース名
├── PartitionFunctionName / PartitionSchemeName: オブジェクト名
├── Status: "Dropped" / エラーメッセージ
└── IsRemoved: true / false
```

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

```
Get-DbaDbPartitionFunction
├── Connect-DbaInstance (行109)
├── Database.PartitionFunctions (行129) - 関数コレクション
├── PartitionFunctionフィルタ (行131-133)
├── Add-Member (行142-145) - カスタムプロパティ追加
└── Select-DefaultView (行147) - 出力整形

Remove-DbaDbPartitionFunction
├── begin: $partfuns = @( ) (行92) - 空配列初期化
├── process: Get-DbaDbPartitionFunction (行100) - 関数取得
├── end: ShouldProcess (行109) - 確認プロンプト
├── Drop() (行120) - SMO削除メソッド
└── Get-ErrorMessage (行125) - エラー処理

Get-DbaDbPartitionScheme
├── Connect-DbaInstance (行109)
├── Database.PartitionSchemes (行129) - スキームコレクション
├── PartitionSchemeフィルタ (行131-133)
├── Add-Member (行142-145) - カスタムプロパティ追加
├── Select-DefaultView (行147) - 出力整形
└── Test-DbaDeprecation (行153) - 非推奨チェック

Remove-DbaDbPartitionScheme
├── begin: $partschs = @( ) (行95) - 空配列初期化
├── process: Get-DbaDbPartitionScheme (行103) - スキーム取得
├── end: ShouldProcess (行112) - 確認プロンプト
├── Drop() (行123) - SMO削除メソッド
└── Get-ErrorMessage (行128) - エラー処理
```

### 9.4 データフロー図

```
[SQL Server Instance]
        │
        ▼
   [Connect-DbaInstance]
        │
        ▼
   [Get-DbaDatabase]
        │
        ▼
   ┌─────────────────────────────┐
   │    Database Objects         │
   │  (IsAccessible = true)      │
   └─────────────────────────────┘
        │
        ├── Database/ExcludeDatabaseフィルタ
        │
        ├─────────────────────────────────────┐
        │                                     │
        ▼                                     ▼
[Database.PartitionFunctions]     [Database.PartitionSchemes]
 パーティション関数コレクション     パーティションスキームコレクション
        │                                     │
        ├── 名前フィルタ                       ├── 名前フィルタ
        │                                     │
        ▼                                     ▼
[Get-DbaDbPartitionFunction]      [Get-DbaDbPartitionScheme]
        │                                     │
        │                                     │
        └───────────┬─────────────────────────┘
                    │
                    ▼
           [Remove-DbaDb*]
           ├── begin: 配列初期化
           ├── process: オブジェクト収集
           └── end: Drop()実行
                    │
                    ▼
           [PSCustomObject出力]
           Status: Dropped / Error
           IsRemoved: true / false
```

## 10. 注意事項・制限事項

1. **依存関係順序**: パーティションスキーム削除後にパーティション関数を削除する必要
2. **テーブル依存**: パーティションテーブル/インデックスが存在する場合は削除不可
3. **コレクション変更回避**: Remove-*コマンドはendブロックで削除を実行
4. **非推奨エイリアス**: Get-DbaDatabasePartitionSchemeは非推奨（v1.0.0から）
5. **パイプラインサポート**: SqlInstanceパラメータはパイプライン入力をサポート
6. **Out-GridView連携**: GUI選択での削除ワークフローをサポート

## 11. 改訂履歴

| バージョン | 日付 | 変更内容 | 作成者 |
|-----------|------|----------|--------|
| 1.0 | 2026-02-18 | 初版作成 | dbatools team + Claude |
