---
generated_at: 2026-02-19 10:30:00
metrics:
  claims_total: 90
  claims_with_evidence: 88
  claims_without_evidence: 2
confidence_derived: 0.98
---

# 根拠レポート：sp_DatabaseRestore 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：88 / 90、根拠なし：2
- 優先レビュー（高）
  1. **UT-DBR-069（孤立ユーザー修正）**：修正SQL文の詳細動作確認が必要
  2. **UT-DBR-071（復元後プロシージャ実行）**：sp_executesqlの挙動確認が必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `sp_DatabaseRestore.sql` 行69-225（@Help処理、ヘルプテキスト）
- E-02: `sp_DatabaseRestore.sql` 行59-66（バージョンチェックモード処理）
- E-03: `sp_DatabaseRestore.sql` 行230-239（SQL Serverバージョンチェック）
- E-04: `sp_DatabaseRestore.sql` 行241-254（CommandExecute依存性チェック）
- E-05: `sp_DatabaseRestore.sql` 行508-527（@MaxTransferSize, @BlockSize検証）
- E-06: `sp_DatabaseRestore.sql` 行392-500（パス補正ロジック）
- E-07: `sp_DatabaseRestore.sql` 行502-538（@RestoreDatabaseName処理）
- E-08: `sp_DatabaseRestore.sql` 行529-534（@FileExtensionDiffドット削除）
- E-09: `sp_DatabaseRestore.sql` 行541-542（xp_cmdshellフォールバック）
- E-10: `sp_DatabaseRestore.sql` 行596-673（バックアップファイル列挙とエラーチェック）
- E-11: `sp_DatabaseRestore.sql` 行677-776（フルバックアップ検索とヘッダー読み込み）
- E-12: `sp_DatabaseRestore.sql` 行792-816（@MoveFiles処理）
- E-13: `sp_DatabaseRestore.sql` 行818-905（@ExistingDBAction処理）
- E-14: `sp_DatabaseRestore.sql` 行907-976（@ContinueLogs=0時のフル復元）
- E-15: `sp_DatabaseRestore.sql` 行988-1171（差分バックアップ復元）
- E-16: `sp_DatabaseRestore.sql` 行1174-1499（ログバックアップ復元）
- E-17: `sp_DatabaseRestore.sql` 行1291-1310（@SkipBackupsAlreadyInMsdb処理）
- E-18: `sp_DatabaseRestore.sql` 行1314-1325（@OnlyLogsAfter処理）
- E-19: `sp_DatabaseRestore.sql` 行1337-1350（@StandbyMode処理）
- E-20: `sp_DatabaseRestore.sql` 行1352-1410（@StopAt処理）
- E-21: `sp_DatabaseRestore.sql` 行1502-1522（@RunRecovery処理）
- E-22: `sp_DatabaseRestore.sql` 行1524-1537（@ForceSimpleRecovery処理）
- E-23: `sp_DatabaseRestore.sql` 行1539-1552（@RunCheckDB処理）
- E-24: `sp_DatabaseRestore.sql` 行1555-1581（@DatabaseOwner処理）
- E-25: `sp_DatabaseRestore.sql` 行1583-1609（@SetTrustworthyON処理）
- E-26: `sp_DatabaseRestore.sql` 行1612-1647（@FixOrphanUsers処理）
- E-27: `sp_DatabaseRestore.sql` 行1649-1669（@RunStoredProcAfterRestore処理）
- E-28: `sp_DatabaseRestore.sql` 行1672-1685（@TestRestore処理）
- E-29: `sp_DatabaseRestore.sql` 行544-563（バージョン別HEADERONLYカラム対応）
- E-30: `sp_DatabaseRestore.sql` 行14-54（パラメータ定義一覧）
- E-31: `sp_DatabaseRestore.sql` 行719-723（分割バックアップ検出）
- E-32: `sp_DatabaseRestore.sql` 行1464-1477（分割ログバックアップ処理）

## 3) Claims と根拠の対応（レビューの主戦場）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | @Help=1でヘルプ表示 | E-01 | ○ |
| C-02 | @VersionCheckMode=1でバージョン返却 | E-02 | ○ |
| C-03 | SQL Server 2008未満でエラー | E-03 | ○ |
| C-04 | CommandExecute未存在でエラー | E-04 | ○ |
| C-05 | @MaxTransferSize > 4194304で警告 | E-05 | ○ |
| C-06 | @MaxTransferSize非倍数で警告 | E-05 | ○ |
| C-07 | @BlockSize無効値で警告 | E-05 | ○ |
| C-08 | @BlockSize有効値で正常処理 | E-05 | ○ |
| C-09 | @BackupPathFullパス補正（バックスラッシュ） | E-06 | ○ |
| C-10 | @BackupPathFullパス補正（スラッシュ） | E-06 | ○ |
| C-11 | @BackupPathDiffパス補正 | E-06 | ○ |
| C-12 | @BackupPathLogパス補正 | E-06 | ○ |
| C-13 | @MoveDataDriveデフォルト設定 | E-06 | ○ |
| C-14 | @MoveLogDriveデフォルト設定 | E-06 | ○ |
| C-15 | @MoveFilestreamDriveデフォルト設定 | E-06 | ○ |
| C-16 | @MoveFullTextCatalogDriveデフォルト設定 | E-06 | ○ |
| C-17 | @FileExtensionDiffドット削除 | E-08 | ○ |
| C-18 | @RestoreDatabaseName=NULLで@Database使用 | E-07 | ○ |
| C-19 | @RestoreDatabaseName=''で@Database使用 | E-07 | ○ |
| C-20 | @RestoreDatabaseName指定で別名復元 | E-07 | ○ |
| C-21 | xp_cmdshell無効でxp_dirtree使用 | E-09 | ○ |
| C-22 | @SimpleFolderEnumeration=1でxp_dirtree使用 | E-10 | ○ |
| C-23 | フルパス不在でエラー | E-10 | ○ |
| C-24 | フルパスアクセス拒否でエラー | E-10 | ○ |
| C-25 | フル空ディレクトリでエラー | E-10 | ○ |
| C-26 | 認証エラーでエラー | E-10 | ○ |
| C-27 | バックアップ不在でエラー | E-11 | ○ |
| C-28 | ファイル名不一致でエラー | E-11 | ○ |
| C-29 | 複数パス検索 | E-10, E-11 | ○ |
| C-30 | フルバックアップ復元 | E-14 | ○ |
| C-31 | 分割バックアップ復元 | E-31, E-14 | ○ |
| C-32 | @MoveFiles=1でMOVEオプション生成 | E-12 | ○ |
| C-33 | @StandbyMode=1でSTANDBYオプション | E-14, E-19 | ○ |
| C-34 | @StandbyUndoPath=NULLで警告 | E-14 | ○ |
| C-35 | @BufferCount指定でパラメータ追加 | E-30, E-14 | ○ |
| C-36 | @ExistingDBAction=1でSINGLE_USER | E-13 | ○ |
| C-37 | @ExistingDBAction=2でKILL | E-13 | ○ |
| C-38 | @ExistingDBAction=3でDROP | E-13 | ○ |
| C-39 | @ExistingDBAction=4でOFFLINE | E-13 | ○ |
| C-40 | 既存DBなしで警告 | E-13 | ○ |
| C-41 | RESTORING状態でSINGLE_USERスキップ | E-13 | ○ |
| C-42 | 差分バックアップ復元 | E-15 | ○ |
| C-43 | @FileExtensionDiff=NULLで'bak'使用 | E-15 | ○ |
| C-44 | カスタム差分拡張子処理 | E-15 | ○ |
| C-45 | 差分パス不在でエラー | E-15 | ○ |
| C-46 | 差分アクセス拒否でエラー | E-15 | ○ |
| C-47 | 古い差分スキップ | E-15 | ○ |
| C-48 | ログバックアップ復元 | E-16 | ○ |
| C-49 | @ContinueLogs=1でLSN継続 | E-16 | ○ |
| C-50 | @StopAtでSTOPATオプション | E-20 | ○ |
| C-51 | @StopAt桁数エラー | E-20 | ○ |
| C-52 | @StopAt無効日時エラー | E-20 | ○ |
| C-53 | @OnlyLogsAfterフィルタリング | E-18 | ○ |
| C-54 | @SkipBackupsAlreadyInMsdb処理 | E-17 | ○ |
| C-55 | ログパス不在でエラー | E-16 | ○ |
| C-56 | ログ空ディレクトリでエラー | E-16 | ○ |
| C-57 | 分割ログバックアップ復元 | E-32 | ○ |
| C-58 | @RunRecovery=1でRECOVERY | E-21 | ○ |
| C-59 | @KeepCdc=1でKEEP_CDC | E-21 | ○ |
| C-60 | @EnableBroker=1でENABLE_BROKER | E-21 | ○ |
| C-61 | @ForceSimpleRecovery=1でSIMPLE | E-22 | ○ |
| C-62 | @RunCheckDB=1でCHECKDB | E-23 | ○ |
| C-63 | @DatabaseOwnerでオーナー変更 | E-24 | ○ |
| C-64 | 無効ログインで警告 | E-24 | ○ |
| C-65 | @RunRecovery=0でオーナー変更スキップ | E-24 | ○ |
| C-66 | @SetTrustworthyON=1でTRUSTWORTHY有効 | E-25 | ○ |
| C-67 | 非sysadminで警告 | E-25 | ○ |
| C-68 | @RunRecovery=0でTRUSTWORTHYスキップ | E-25 | ○ |
| C-69 | @FixOrphanUsers=1で孤立ユーザー修正 | E-26 | △ |
| C-70 | 孤立ユーザーなしでメッセージ | E-26 | ○ |
| C-71 | @RunStoredProcAfterRestore実行 | E-27 | △ |
| C-72 | @RunRecovery=0でプロシージャスキップ | E-27 | ○ |
| C-73 | @TestRestore=1でDROP | E-28 | ○ |
| C-74 | @Execute='N'で実行なし | E-14, E-15, E-16 | ○ |
| C-75 | @Debug=1で詳細出力 | E-10, E-11 | ○ |
| C-76 | 2012+でContainment対応 | E-29 | ○ |
| C-77 | 2014CU1+で暗号化カラム対応 | E-29 | ○ |
| C-78 | 2022+で新カラム対応 | E-29 | ○ |
| C-79 | データファイル移動 | E-12 | ○ |
| C-80 | ログファイル移動 | E-12 | ○ |
| C-81 | Filestream移動 | E-12 | ○ |
| C-82 | FullText移動 | E-12 | ○ |
| C-83 | @FileNamePrefixでプレフィックス | E-12 | ○ |
| C-84 | 別名復元でファイル名置換 | E-12 | ○ |
| C-85 | フルパスなしログ継続 | E-16 | ○ |
| C-86 | StopAt=フル終了でログスキップ | E-20 | ○ |
| C-87 | フル+差分+ログ完全復元 | E-14, E-15, E-16, E-21 | ○ |
| C-88 | フル+ログ復元 | E-14, E-16, E-21 | ○ |
| C-89 | TestRestore+RunCheckDB組み合わせ | E-23, E-28 | ○ |
| C-90 | ネットワークパス復元 | E-10, E-11 | ○ |

## 4) 不足情報（Unknown / Missing）

- **C-69（孤立ユーザー修正）**: 動的SQLの実際の挙動テストが必要。ALTER USER文が正しく生成されるか、実際のDB環境での確認が推奨される。
  - 候補: 孤立ユーザーが存在するテストDB / master.sys.server_principalsとのsid比較 / 動的SQL実行結果の検証

- **C-71（復元後プロシージャ実行）**: sp_executesqlの挙動とエラーハンドリングの詳細確認が必要。プロシージャ名のバリデーション（SQLインジェクション対策）が不明。
  - 候補: 存在しないプロシージャ名の指定時の挙動 / 不正なプロシージャ名による攻撃可能性

## 5) リスクフラグ（レビュー観点）

| リスクレベル | 項目 | 説明 |
|---|---|---|
| 2（高） | @ExistingDBAction処理 | DROP DATABASEなど破壊的操作を含むため、十分なテストが必要 |
| 2（高） | @TestRestore処理 | 復元後のDROP DATABASEが意図せず実行されるリスク |
| 1（中） | @RunStoredProcAfterRestore | 任意のプロシージャ実行によるセキュリティリスク |
| 1（中） | @SetTrustworthyON処理 | セキュリティ設定の変更 |
| 0（低） | パス補正処理 | パス操作のエッジケース |

## 6) レビュアーチェックリスト（最小）

- [ ] 高優先度のテストケース（UT-DBR-003, UT-DBR-004, UT-DBR-023-028）の期待結果が実際のエラーメッセージと一致するか確認
- [ ] @ExistingDBAction の各アクション（1-4）が本番環境で安全にテスト可能か確認
- [ ] @StopAt パラメータのフォーマット検証（14桁、有効日時）がすべてのエッジケースをカバーしているか確認
- [ ] 分割バックアップ（ストライプバックアップ）のファイル名パターン「_1.bak」「_01.bak」が正しく検出されるか確認
- [ ] ネットワークパス（UNC）からの復元テストが実行可能な環境が用意されているか確認
- [ ] @FixOrphanUsers の動的SQLが安全に生成されるか確認
- [ ] @RunStoredProcAfterRestore の入力値サニタイズがされているか確認（SQLインジェクション対策）
