# 画面設計書 77-レプリケーションサーバー

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおける「レプリケーションサーバー」機能の設計書です。SQL Server レプリケーション構成の取得およびサーバー設定のエクスポートを行うコマンド群について記述します。

### 本画面の処理概要

本機能は、SQL Server のレプリケーショントポロジにおける各インスタンスの役割（ディストリビューター、パブリッシャー）と構成情報を取得する機能を提供します。

**業務上の目的・背景**：SQL Server レプリケーション環境の管理において、各インスタンスがレプリケーショントポロジでどのような役割を担っているかを把握することは重要です。本機能により、どのサーバーがディストリビューターとして構成されているか、どのサーバーがパブリッシャーとして機能しているか、ディストリビューションデータベースの場所はどこかを迅速に確認できます。これは、レプリケーション問題のトラブルシューティング、環境ドキュメント作成、災害復旧計画の策定に役立ちます。

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

**主要な操作・処理内容**：
1. `Get-DbaReplServer`: レプリケーションサーバー構成情報の取得（ディストリビューター/パブリッシャー状態）
2. `Export-DbaReplServerSetting`: レプリケーションサーバー設定のエクスポート

**画面遷移**：本機能はCLIコマンドのため画面遷移は存在しません。`Get-DbaReplServer` の出力を `Get-DbaReplDistributor` や `Get-DbaReplPublisher` にパイプラインで渡すことで、詳細情報を取得できます。

**権限による表示制御**：レプリケーション情報の取得には、distribution データベースへのアクセス権限または sysadmin 権限が必要です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 448 | Get-DbaReplServer | 主機能 | レプリケーションサーバー設定の取得 |
| 442 | Export-DbaReplServerSetting | 補助機能 | レプリケーションサーバー設定のエクスポート |

## 画面種別

一覧（レプリケーションサーバー構成の取得）

## URL/ルーティング

PowerShellコマンド:
- `Get-DbaReplServer`
- `Export-DbaReplServerSetting`

## 入出力項目

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

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

## 表示項目

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

| プロパティ名 | 型 | 説明 |
|-------------|-----|------|
| ComputerName | string | SQL Serverインスタンスのコンピュータ名 |
| InstanceName | string | SQL Serverインスタンス名 |
| SqlInstance | string | 完全なSQL Serverインスタンス名 |
| IsDistributor | bool | ディストリビューターとして構成されているか |
| IsPublisher | bool | パブリッシャーとして構成されているか |
| DistributionServer | string | ディストリビューターサーバー名 |
| DistributionDatabase | string | ディストリビューションデータベース名 |

## イベント仕様

### 1-Get-DbaReplServer実行

1. Add-ReplicationLibrary でレプリケーションライブラリを読み込み
2. Connect-DbaInstance を使用してSQL Serverに接続
3. Microsoft.SqlServer.Replication.ReplicationServer オブジェクトを作成
4. ConnectionContext を設定
5. NoteProperty（ComputerName, InstanceName, SqlInstance）を追加
6. Select-DefaultView で出力を整形

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

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| Get-DbaReplServer実行 | msdb.dbo.MSdistributors | SELECT | ディストリビューター情報の取得 |
| Get-DbaReplServer実行 | distribution.dbo.* | SELECT | ディストリビューションDB情報の取得 |

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

本機能はデータベースの更新を行いません（読み取り専用）。

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|---------------|---------|
| MSG-001 | エラー | Failure | SQL Server接続失敗時 |

## 例外処理

| 例外種別 | 発生条件 | 処理内容 |
|---------|---------|---------|
| ConnectionError | SQL Serverへの接続失敗 | Stop-Function で処理を停止 |
| ReplicationNotConfigured | レプリケーションが構成されていない | IsDistributor/IsPublisher が False として返却 |

## 備考

- ReplicationDatabases プロパティは、レプリケーションが有効化されたデータベースを取得するが、実際にレプリケートされているとは限らない
- 追加プロパティ（DistributorInstalled, DistributorAvailable, WorkingDirectory等）は Select-Object * で取得可能
- SMO ReplicationServer オブジェクトをベースとしている

---

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

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

### 推奨読解順序

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

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

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

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaReplServer.ps1 | `public/Get-DbaReplServer.ps1` | param ブロック（行77-82）とレプリケーションオブジェクト作成（行90-96） |

**主要処理フロー**:
1. **行84**: Add-ReplicationLibrary でライブラリ読み込み
2. **行87**: Test-FunctionInterrupt でキャンセルチェック
3. **行90**: Connect-DbaInstance による接続
4. **行91**: ReplicationServer オブジェクト作成
5. **行92**: ConnectionContext の設定
6. **行93-95**: NoteProperty の追加
7. **行97**: Select-DefaultView で出力整形

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

```
Get-DbaReplServer
    |
    +-- Add-ReplicationLibrary (レプリケーションライブラリ読み込み)
    |
    +-- Test-FunctionInterrupt (キャンセルチェック)
    |
    +-- Connect-DbaInstance (SQL Server 接続)
    |
    +-- New-Object Microsoft.SqlServer.Replication.ReplicationServer
    |
    +-- ConnectionContext 設定
    |       +-- $server.ConnectionContext
    |
    +-- Add-Member (NoteProperty 追加)
    |       +-- ComputerName
    |       +-- InstanceName
    |       +-- SqlInstance
    |
    +-- Select-DefaultView (出力整形)
```

### データフロー図

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

SqlInstance  ───+
                |
SqlCredential ──+──> Connect-DbaInstance ───> Server Object
                |
                +──> New ReplicationServer ──> ReplicationServer Object
                |    ConnectionContext設定
                |
                +──> Add-Member ────────────> 拡張ReplicationServer

拡張ReplicationServer ──> Select-DefaultView ──> Pipeline Output
                          (IsDistributor,
                           IsPublisher,
                           DistributionServer,
                           DistributionDatabase)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaReplServer.ps1 | `public/Get-DbaReplServer.ps1` | ソース | レプリケーションサーバー取得 |
| Export-DbaReplServerSetting.ps1 | `public/Export-DbaReplServerSetting.ps1` | ソース | 設定エクスポート |
| Get-DbaReplDistributor.ps1 | `public/Get-DbaReplDistributor.ps1` | ソース | ディストリビューター取得 |
| Get-DbaReplPublisher.ps1 | `public/Get-DbaReplPublisher.ps1` | ソース | パブリッシャー取得 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続処理 |
