# 画面設計書 244-OLE DBプロバイダー

## 概要

本ドキュメントは、dbatools PowerShellモジュールの `Get-DbaOleDbProvider` コマンドに関する画面設計書です。SQL Serverに登録されているOLE DBプロバイダーの設定情報を取得する機能を提供します。

### 本画面の処理概要

`Get-DbaOleDbProvider` コマンドは、SQL Serverインスタンスに登録されているOLE DBプロバイダーの構成情報（リンクサーバーや分散クエリで使用可能なプロバイダー）を取得する機能を提供します。

**業務上の目的・背景**：リンクサーバーのセットアップ、分散クエリ（OPENROWSET、OPENDATASOURCE）の設計、外部データソースへの接続トラブルシューティングにおいて、利用可能なOLE DBプロバイダーとその設定を把握することは重要です。AllowInProcess、DisallowAdHocAccessなどのセキュリティ設定は、SQL Serverがプロバイダーをどのように使用できるかを制御するため、接続問題の診断に役立ちます。本コマンドは、これらの情報を一括で取得し、環境の監査と問題解決を支援します。

**画面へのアクセス方法**：PowerShellコンソールまたはPowerShell ISEから `Get-DbaOleDbProvider` コマンドを直接実行します。SqlInstanceパラメータでターゲットを指定し、必要に応じてProviderパラメータで特定のプロバイダーをフィルタリングします。

**主要な操作・処理内容**：
1. SQL Serverインスタンスへの接続
2. SMO経由でOleDbProviderSettings一覧取得
3. Providerパラメータによるフィルタリング（オプション）
4. 各プロバイダーにインスタンス情報を付加
5. Select-DefaultViewで表示プロパティを選択して出力

**画面遷移**：CLIコマンドのため画面遷移はありません。出力を他のコマンドにパイプラインで渡すことが可能です。

**権限による表示制御**：SQL Serverへの接続権限が必要です。OLE DBプロバイダー設定の読み取りに特別な権限は不要です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 134 | Get-DbaOleDbProvider | 主機能 | OLE DBプロバイダーの取得 |
| - | Connect-DbaInstance | 補助機能 | SQL Serverインスタンスへの接続 |
| - | Get-DbaLinkedServer | 関連機能 | リンクサーバーの取得（OLE DBプロバイダー使用） |

## 画面種別

CLI（コマンドラインインターフェース）/ 一覧取得系

## URL/ルーティング

PowerShellコマンド: `Get-DbaOleDbProvider`

## 入出力項目

### 入力パラメータ

| パラメータ名 | 型 | 必須 | パイプライン | 説明 |
|-------------|----|----|-------------|------|
| SqlInstance | DbaInstanceParameter[] | Yes | Yes | 対象SQL Serverインスタンス |
| SqlCredential | PSCredential | No | No | SQL Server認証用の資格情報 |
| Provider | string[] | No | No | 特定のプロバイダー名でフィルタリング |
| EnableException | switch | No | No | 例外を詳細表示するフラグ |

## 表示項目

### 出力オブジェクト（Microsoft.SqlServer.Management.Smo.OleDbProviderSettings + 拡張プロパティ）

#### デフォルト表示項目

| 項目名 | 型 | 説明 |
|--------|----|----|
| ComputerName | string | SQL Serverホストのコンピュータ名 |
| InstanceName | string | SQL Serverサービス名 |
| SqlInstance | string | 完全修飾SQL Serverインスタンス名 |
| Name | string | OLE DBプロバイダー名（例: SQLNCLI11, MSDASQL, SSISOLEDB） |
| Description | string | プロバイダーの説明 |
| AllowInProcess | bool | プロバイダーがSQL Serverプロセス内で実行可能か |
| DisallowAdHocAccess | bool | アドホックアクセス（OPENROWSET等）が禁止されているか |
| DynamicParameters | bool | 動的パラメータをサポートするか |
| IndexAsAccessPath | bool | インデックスをアクセスパスとして使用可能か |
| LevelZeroOnly | bool | レベル0（テーブルレベル）操作のみ許可か |
| NestedQueries | bool | ネストされたクエリをサポートするか |
| NonTransactedUpdates | bool | 非トランザクション更新をサポートするか |

#### 追加プロパティ（Select-Object * で取得可能）

| 項目名 | 型 | 説明 |
|--------|----|----|
| Parent | Server | 親サーバーオブジェクトへの参照 |
| Urn | string | プロバイダーオブジェクトのUniform Resource Name |
| Properties | PropertyCollection | プロパティコレクション |
| State | SqlSmoState | SMOオブジェクトの状態 |
| Uid | string | プロバイダー設定の一意識別子 |

## イベント仕様

### 1-コマンド実行

コマンド実行時の処理フロー:

1. **接続処理**: `Connect-DbaInstance` でSQL Serverに接続
2. **プロバイダー取得**: `$server.Settings.OleDbProviderSettings` でプロバイダー一覧取得
3. **フィルタリング**: Providerパラメータ指定時に名前でフィルタ
4. **情報付加**: 各プロバイダーオブジェクトにComputerName, InstanceName, SqlInstanceを追加
5. **結果出力**: Select-DefaultViewで指定プロパティを表示

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

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| コマンド実行 | - | SELECT | データベースへの書き込みなし（読み取り専用） |

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

本コマンドはデータベースへの更新を行いません。SMOを介してサーバー設定を取得するのみです。

## メッセージ仕様

| メッセージID | レベル | メッセージ内容 | 発生条件 |
|-------------|--------|--------------|----------|
| - | Error | Failure | SQL Server接続に失敗した場合 |
| - | Verbose | Getting startup procedures for {servername} | プロバイダー取得処理開始時 |

## 例外処理

| 例外種別 | 発生条件 | 処理内容 |
|---------|---------|---------|
| 接続エラー | SQL Serverへの接続失敗 | Stop-Functionでエラー記録、次のインスタンスへ続行 |

## 備考

- SQL ServerがサポートするOLE DBプロバイダーの一覧を取得
- 一般的なプロバイダー例: SQLNCLI11（SQL Server Native Client）、MSDASQL（Microsoft OLE DB Provider for ODBC）、SSISOLEDB（SSIS用）
- AllowInProcess=Trueのプロバイダーはパフォーマンスが良いが、クラッシュ時にSQL Serverプロセスに影響
- DisallowAdHocAccess=Trueのプロバイダーはセキュリティ上OPENROWSETでの使用が禁止される

---

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

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

### 推奨読解順序

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

出力オブジェクトの構造を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaOleDbProvider.ps1 | `public/Get-DbaOleDbProvider.ps1` | 39-65行目: .OUTPUTSセクションで出力プロパティ定義 |
| 1-2 | Get-DbaOleDbProvider.ps1 | `public/Get-DbaOleDbProvider.ps1` | 105行目: Select-DefaultViewで表示プロパティ指定 |

**読解のコツ**: SMO OleDbProviderSettingsオブジェクトに`Add-Member`で拡張プロパティを追加している点に注目。

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

処理の起点となる関数の構造を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaOleDbProvider.ps1 | `public/Get-DbaOleDbProvider.ps1` | 77-84行目: パラメータ定義 |
| 2-2 | Get-DbaOleDbProvider.ps1 | `public/Get-DbaOleDbProvider.ps1` | 85-107行目: processブロックのメインロジック |

**主要処理フロー**:
1. **86-91行目**: Connect-DbaInstanceでSQL Server接続
2. **92行目**: Verboseメッセージ出力
3. **94行目**: `$server.Settings.OleDbProviderSettings` でプロバイダー取得
4. **96-98行目**: Providerパラメータでフィルタリング
5. **100-105行目**: 各プロバイダーに拡張プロパティ追加と出力

#### Step 3: プロバイダー設定の理解

OLE DBプロバイダー設定の各プロパティの意味を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaOleDbProvider.ps1 | `public/Get-DbaOleDbProvider.ps1` | 105行目: 表示される全プロパティの列挙 |

**主要プロパティの意味**:
- **AllowInProcess**: Trueの場合、プロバイダーはSQL Serverと同じプロセスで実行（高速だがリスクあり）
- **DisallowAdHocAccess**: Trueの場合、OPENROWSET/OPENDATASOURCEでの使用を禁止
- **DynamicParameters**: Trueの場合、パラメータ化クエリをサポート

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

```
Get-DbaOleDbProvider
    │
    ├─ Connect-DbaInstance
    │      └─ SQL Server接続確立
    │
    └─ $server.Settings.OleDbProviderSettings
           │
           ├─ Where-Object Name -in $Provider (フィルタリング)
           │
           └─ foreach ($oledbprovider)
                  │
                  ├─ Add-Member (ComputerName, InstanceName, SqlInstance)
                  │
                  └─ Select-DefaultView (出力プロパティ選択)
```

### データフロー図

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

SqlInstance ───▶ Connect-DbaInstance ───▶ $server オブジェクト
Provider ───▶                                     │
                                                  ▼
                    $server.Settings.OleDbProviderSettings
                                      │
                                      ▼
                         Provider パラメータでフィルタリング
                                      │
                                      ▼
              各 OleDbProviderSettings オブジェクトに拡張プロパティ追加
                                      │
                                      ▼
                            Select-DefaultView
                                      │
                                      ▼
              Microsoft.SqlServer.Management.Smo.OleDbProviderSettings
                                + 拡張プロパティ
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaOleDbProvider.ps1 | `public/Get-DbaOleDbProvider.ps1` | ソース | メインコマンド実装 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続 |
| Select-DefaultView.ps1 | `internal/functions/Select-DefaultView.ps1` | ソース | 表示プロパティ制御 |
