# 画面設計書 79-パブリッシャー管理

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおける「パブリッシャー管理」機能の設計書です。SQL Server レプリケーションのパブリッシャー構成の取得・有効化・無効化を行うコマンド群について記述します。

### 本画面の処理概要

本機能は、SQL Server レプリケーショントポロジにおけるパブリッシャーの管理機能を提供します。パブリッシャーは、レプリケートするデータのソースとなるデータベースをホストするサーバーです。

**業務上の目的・背景**：SQL Server レプリケーション環境において、パブリッシャーはデータの発信元として重要な役割を担います。本機能により、ディストリビューションサーバーに登録されているパブリッシャーの構成状況の確認、パブリッシング機能の有効化・無効化が可能です。これは、レプリケーショントポロジの監査、新しいパブリッシャーの設定、トラブルシューティングに不可欠です。

**画面へのアクセス方法**：PowerShellコンソールから `Get-DbaReplPublisher`、`Enable-DbaReplPublishing`、`Disable-DbaReplPublishing` コマンドを直接実行します。

**主要な操作・処理内容**：
1. `Get-DbaReplPublisher`: ディストリビューターに登録されたパブリッシャー情報の取得
2. `Enable-DbaReplPublishing`: パブリッシング機能の有効化
3. `Disable-DbaReplPublishing`: パブリッシング機能の無効化

**画面遷移**：本機能はCLIコマンドのため画面遷移は存在しません。`Get-DbaReplPublisher` の出力を `Get-DbaReplPublication` にパイプラインで渡すことで、パブリッシャーのパブリケーション情報を取得できます。

**権限による表示制御**：パブリッシャー管理には sysadmin 権限または distribution データベースの db_owner 権限が必要です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 447 | Get-DbaReplPublisher | 主機能 | パブリッシャーの取得 |
| 441 | Enable-DbaReplPublishing | 主機能 | パブリッシングの有効化 |
| 439 | Disable-DbaReplPublishing | 主機能 | パブリッシングの無効化 |

## 画面種別

一覧 / 管理（パブリッシャー構成の取得および管理操作）

## URL/ルーティング

PowerShellコマンド:
- `Get-DbaReplPublisher`
- `Enable-DbaReplPublishing`
- `Disable-DbaReplPublishing`

## 入出力項目

### Get-DbaReplPublisher 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 |
|-------------|-----|------|------|
| SqlInstance | DbaInstanceParameter[] | Yes | 対象SQL Serverインスタンス（ディストリビューター） |
| SqlCredential | PSCredential | No | 代替認証情報 |
| EnableException | switch | No | 例外を有効化 |

## 表示項目

### Get-DbaReplPublisher 出力プロパティ

| プロパティ名 | 型 | 説明 |
|-------------|-----|------|
| ComputerName | string | SQL Serverインスタンスのコンピュータ名 |
| InstanceName | string | SQL Serverインスタンス名 |
| SqlInstance | string | 完全なSQL Serverインスタンス名 |
| Status | string | パブリッシャーのステータス |
| WorkingDirectory | string | パブリケーションデータとスキーマファイルの保存ディレクトリ |
| DistributionDatabase | string | このパブリッシャーが使用するディストリビューションデータベース |
| DistributionPublications | int | トランザクショナルパブリケーションの数 |
| PublisherType | string | パブリッシャーの種類（MSSQLSERVER等） |
| Name | string | パブリッシャーのインスタンス名 |

## イベント仕様

### 1-Get-DbaReplPublisher実行

1. Connect-DbaInstance を使用してSQL Serverに接続
2. Get-DbaReplServer を呼び出してレプリケーションサーバー情報を取得
3. DistributionPublishers プロパティからパブリッシャー一覧を取得
4. 各パブリッシャーに NoteProperty を追加
5. Select-DefaultView で出力を整形

### 2-Enable-DbaReplPublishing実行

1. 対象インスタンスへの接続
2. ディストリビューターの確認
3. パブリッシャーとしての登録
4. 結果を返却

### 3-Disable-DbaReplPublishing実行

1. 対象インスタンスへの接続
2. アクティブなパブリケーションの確認
3. パブリッシャー登録の解除
4. 結果を返却

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

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| Get-DbaReplPublisher実行 | distribution.dbo.MSpublisher_databases | SELECT | パブリッシャーデータベース情報の取得 |
| Enable-DbaReplPublishing実行 | msdb.dbo.MSdistpublishers | INSERT | パブリッシャーの登録 |
| Disable-DbaReplPublishing実行 | msdb.dbo.MSdistpublishers | DELETE | パブリッシャー登録の解除 |

### テーブル別更新項目詳細

#### distribution.dbo.MSpublisher_databases

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| SELECT | publisher_id, publisher_db | すべてのパブリッシャーDB | Get-DbaReplPublisher |

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|---------------|---------|
| MSG-001 | エラー | Failure | SQL Server接続失敗時 |
| MSG-002 | エラー | Unable to get publisher for | パブリッシャー取得失敗時 |
| MSG-003 | 情報 | Getting publisher for $server | パブリッシャー情報取得時（Verbose） |

## 例外処理

| 例外種別 | 発生条件 | 処理内容 |
|---------|---------|---------|
| ConnectionError | SQL Serverへの接続失敗 | Stop-Function で処理を停止 |
| NoPublishersConfigured | パブリッシャーが構成されていない | 空の結果を返却（エラーなし） |

## 備考

- Get-DbaReplPublisher は DistributionPublishers プロパティから情報を取得
- パブリッシャーが構成されていない場合、結果は返却されない
- PublisherType が MSSQLSERVER の場合は SQL Server パブリッシャー、その他はサードパーティ
- ThirdParty プロパティで非SQL Serverパブリッシャーを識別可能

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaReplPublisher.ps1 | `public/Get-DbaReplPublisher.ps1` | 出力プロパティの定義（行36-61） |

**読解のコツ**: Microsoft.SqlServer.Replication.DistributionPublisher オブジェクトに NoteProperty を追加している点に注目。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaReplPublisher.ps1 | `public/Get-DbaReplPublisher.ps1` | param ブロック（行74-79）と DistributionPublishers 取得（行91） |

**主要処理フロー**:
1. **行83**: Connect-DbaInstance による接続
2. **行84**: Get-DbaReplServer 呼び出し
3. **行88**: Verbose メッセージ出力
4. **行91**: $replServer.DistributionPublishers でパブリッシャー取得
5. **行97-100**: NoteProperty の追加
6. **行103**: Select-DefaultView で出力整形

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

```
Get-DbaReplPublisher
    |
    +-- Connect-DbaInstance (SQL Server 接続)
    |
    +-- Get-DbaReplServer (レプリケーションサーバー情報取得)
    |       |
    |       +-- Add-ReplicationLibrary
    |       +-- New Microsoft.SqlServer.Replication.ReplicationServer
    |
    +-- Write-Message (Verbose メッセージ)
    |
    +-- $replServer.DistributionPublishers (パブリッシャー取得)
    |
    +-- [パブリッシャーが存在する場合]
    |       +-- Add-Member (NoteProperty 追加)
    |
    +-- Select-DefaultView (出力整形)
```

### データフロー図

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

SqlInstance  ───+
                |
SqlCredential ──+──> Connect-DbaInstance ───> Server Object
                |
                +──> Get-DbaReplServer ─────> ReplicationServer Object
                |
                +──> DistributionPublishers ──> DistributionPublisher[]

DistributionPublisher[] ──> Add-Member ────────> 拡張DistributionPublisher
                            (NoteProperty追加)

拡張DistributionPublisher ──> Select-DefaultView ──> Pipeline Output
                              (Status, WorkingDirectory,
                               DistributionDatabase,
                               DistributionPublications,
                               PublisherType, Name)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaReplPublisher.ps1 | `public/Get-DbaReplPublisher.ps1` | ソース | パブリッシャー取得 |
| Enable-DbaReplPublishing.ps1 | `public/Enable-DbaReplPublishing.ps1` | ソース | パブリッシング有効化 |
| Disable-DbaReplPublishing.ps1 | `public/Disable-DbaReplPublishing.ps1` | ソース | パブリッシング無効化 |
| Get-DbaReplServer.ps1 | `public/Get-DbaReplServer.ps1` | ソース | レプリケーションサーバー取得（内部呼び出し） |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続処理 |
