# バッチ設計書 9-sp_DatabaseRestore

## 概要

本ドキュメントは、SQL Server First Responder Kitに含まれるsp_DatabaseRestoreストアドプロシージャのバッチ設計書です。sp_DatabaseRestoreは指定されたファイルパスからデータベースを復元するユーティリティツールです。

### 本バッチの処理概要

sp_DatabaseRestoreは、バックアップファイルのパスを指定するだけでデータベースの復元を自動化するストアドプロシージャです。Ola Hallengrenのメンテナンススクリプト（CommandExecute）と連携して動作します。

**業務上の目的・背景**：データベースの復元は、DRテスト、データマイグレーション、開発/テスト環境の構築など、様々な場面で必要になります。しかし、複数のバックアップファイル（フル、差分、ログ）を正しい順序で復元するコマンドを手動で作成するのは手間がかかり、エラーが発生しやすい作業です。sp_DatabaseRestoreは、バックアップフォルダのパスを指定するだけで、必要なバックアップファイルを自動的に特定し、正しい順序でRESTOREコマンドを生成・実行します。

**バッチの実行タイミング**：データベース復元が必要な際に随時実行。ログシッピングの設定、DRテスト、開発環境へのデータコピー時に使用されます。

**主要な処理内容**：
1. バックアップフォルダ内のファイル一覧を取得
2. ヘッダー情報（RESTORE HEADERONLY）を解析
3. 最新のフルバックアップを特定
4. 差分バックアップの特定（オプション）
5. ログバックアップの特定と適用順序の決定
6. RESTOREコマンドの生成
7. CommandExecuteを通じてコマンド実行

**前後の処理との関連**：Ola HallengrenのCommandExecuteストアドプロシージャが事前にインストールされている必要があります。バックアップはOla Hallengrenのバックアップソリューションで作成されたものを想定していますが、他のバックアップツールでも動作します。

**影響範囲**：データベース復元を実行するため、対象データベースの状態を変更します。既存のデータベースを上書きする場合は、@ExistingDBActionパラメータで制御します。

## バッチ種別

復元・ユーティリティ

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時 |
| 実行時刻 | 任意 |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | 手動 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| SQL Serverバージョン | SQL Server 2008以降 |
| 必要権限 | ALTER DATABASE、RESTORE DATABASE権限 |
| 依存オブジェクト | Ola Hallengren CommandExecuteストアドプロシージャ |

### 実行可否判定

- CommandExecuteが存在すること
- バックアップパスが有効でアクセス可能であること

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| @Database | NVARCHAR(128) | Yes | NULL | 復元するデータベース名 |
| @RestoreDatabaseName | NVARCHAR(128) | No | NULL | 復元先データベース名（異なる名前で復元する場合） |
| @BackupPathFull | NVARCHAR(260) | Yes | NULL | フルバックアップのパス |
| @BackupPathDiff | NVARCHAR(260) | No | NULL | 差分バックアップのパス |
| @BackupPathLog | NVARCHAR(260) | No | NULL | ログバックアップのパス |
| @MoveFiles | BIT | No | 1 | ファイルを移動するか |
| @MoveDataDrive | NVARCHAR(260) | No | NULL | データファイル移動先 |
| @MoveLogDrive | NVARCHAR(260) | No | NULL | ログファイル移動先 |
| @MoveFilestreamDrive | NVARCHAR(260) | No | NULL | FILESTREAMファイル移動先 |
| @MoveFullTextCatalogDrive | NVARCHAR(260) | No | NULL | フルテキストカタログ移動先 |
| @BufferCount | INT | No | NULL | バッファカウント |
| @MaxTransferSize | INT | No | NULL | 最大転送サイズ |
| @BlockSize | INT | No | NULL | ブロックサイズ |
| @TestRestore | BIT | No | 0 | テスト復元モード |
| @RunCheckDB | BIT | No | 0 | 復元後にDBCCを実行 |
| @RestoreDiff | BIT | No | 0 | 差分を復元 |
| @ContinueLogs | BIT | No | 0 | ログを継続適用 |
| @StandbyMode | BIT | No | 0 | スタンバイモードで復元 |
| @StandbyUndoPath | NVARCHAR(MAX) | No | NULL | スタンバイUndoファイルパス |
| @RunRecovery | BIT | No | 0 | RECOVERYを実行 |
| @ForceSimpleRecovery | BIT | No | 0 | 強制的にSIMPLEリカバリ |
| @ExistingDBAction | TINYINT | No | 0 | 既存DB処理（0=エラー/1=上書き/2=削除後復元） |
| @StopAt | NVARCHAR(14) | No | NULL | ポイントインタイムリカバリ |
| @OnlyLogsAfter | NVARCHAR(14) | No | NULL | 指定日時以降のログのみ |
| @SimpleFolderEnumeration | BIT | No | 0 | 単純フォルダ列挙 |
| @SkipBackupsAlreadyInMsdb | BIT | No | 0 | msdb履歴のバックアップをスキップ |
| @DatabaseOwner | sysname | No | NULL | DB所有者 |
| @SetTrustworthyON | BIT | No | 0 | TRUSTWORTHYをON |
| @FixOrphanUsers | BIT | No | 0 | 孤立ユーザーを修正 |
| @KeepCdc | BIT | No | 0 | CDCを保持 |
| @Execute | CHAR(1) | No | 'Y' | 実行するか（Y/N） |
| @FileExtensionDiff | NVARCHAR(128) | No | NULL | 差分ファイル拡張子 |
| @Debug | INT | No | 0 | デバッグモード |
| @Help | BIT | No | 0 | ヘルプ表示 |
| @Version | VARCHAR(30) | No | NULL | バージョン（OUTPUT） |
| @VersionDate | DATETIME | No | NULL | バージョン日付（OUTPUT） |
| @VersionCheckMode | BIT | No | 0 | バージョンチェックモード |
| @FileNamePrefix | NVARCHAR(260) | No | NULL | ファイル名プレフィックス |
| @RunStoredProcAfterRestore | NVARCHAR(260) | No | NULL | 復元後に実行するSP |
| @EnableBroker | BIT | No | 0 | Service Brokerを有効化 |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| バックアップフォルダ | ファイルシステム | バックアップファイル |
| RESTORE HEADERONLY | システム関数 | バックアップヘッダー |
| RESTORE FILELISTONLY | システム関数 | ファイルリスト |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| メッセージ | PRINT | 実行状況とコマンド |
| DBCC結果 | TABLE | @RunCheckDB=1時 |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | 該当なし |
| 出力先 | メッセージウィンドウ |
| 文字コード | - |
| 区切り文字 | - |

## 処理フロー

### 処理シーケンス

```
1. パラメータ検証
   └─ CommandExecute存在チェック、パス修正
2. フルバックアップ取得
   └─ フォルダ内の最新フルバックアップを特定
3. 差分バックアップ取得（オプション）
   └─ @RestoreDiff=1の場合
4. ログバックアップ取得（オプション）
   └─ @BackupPathLog指定時
5. RESTOREコマンド生成
   └─ WITH MOVE、NORECOVERYオプション
6. CommandExecuteでコマンド実行
   └─ @Execute='Y'の場合
7. 後処理
   └─ DBCC CHECKDB、Recovery等
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[パラメータ検証]
    B --> C{CommandExecute存在?}
    C -->|No| D[エラー終了]
    C -->|Yes| E[フルバックアップ特定]
    E --> F{@RestoreDiff?}
    F -->|Yes| G[差分バックアップ特定]
    F -->|No| H{@BackupPathLog?}
    G --> H
    H -->|Yes| I[ログバックアップ特定]
    H -->|No| J[RESTOREコマンド生成]
    I --> J
    J --> K{@Execute='Y'?}
    K -->|Yes| L[CommandExecute実行]
    K -->|No| M[コマンド出力のみ]
    L --> N{@RunRecovery?}
    M --> O[バッチ終了]
    N -->|Yes| P[RECOVERY実行]
    N -->|No| Q{@RunCheckDB?}
    P --> Q
    Q -->|Yes| R[DBCC CHECKDB]
    Q -->|No| O
    R --> O
```

## データベース操作仕様

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

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| データベース復元 | 対象データベース | RESTORE | データベース全体の復元 |
| 整合性チェック | 対象データベース | SELECT（DBCC） | 復元後の検証 |

### テーブル別操作詳細

#### 対象データベース

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| RESTORE DATABASE | 全データ | バックアップからの復元 | 全オブジェクト |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | 依存エラー | CommandExecuteが存在しない | Ola Hallengrenスクリプトをインストール |
| - | パスエラー | バックアップパスが無効 | 正しいパスを指定 |
| - | バージョンエラー | SQL Server 2005以前 | サポートバージョンを使用 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0 |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

### 障害時対応

- 復元失敗時はエラーメッセージを確認
- バックアップファイルの整合性を確認

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | RESTORE操作単位 |
| コミットタイミング | 各RESTORE完了時 |
| ロールバック条件 | RESTORE失敗時 |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | - |
| 目標処理時間 | バックアップサイズ依存 |
| メモリ使用量上限 | @BufferCount、@MaxTransferSizeで制御 |

## 排他制御

- 対象データベースへの排他アクセスが必要
- @ExistingDBAction=1で既存接続をkill

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 進捗ログ | 各ステップ | 'Fixing @BackupPathFull to add...'等 |
| コマンドログ | 実行前 | 生成されたRESTOREコマンド |
| デバッグログ | @Debug=1時 | 詳細情報 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 該当なし | - | - |

## 備考

- バージョン: 8.29（2026年2月3日）
- ライセンス: MIT License
- 依存関係: Ola Hallengren CommandExecute (https://ola.hallengren.com)
- 特記事項:
  - @Execute='N'でコマンド出力のみ（ドライラン）
  - @StopAtでポイントインタイムリカバリ
  - @ContinueLogs=1でログシッピングの継続適用
  - @StandbyMode=1でスタンバイモード復元
  - カンマ区切りで複数パス指定可能（ストライプバックアップ対応）
