→ | master データベース再構築ユーティリティ (rebuildm ツール:SQL Server 7.0 以降) | ||
・ | ¥Program Files¥Microsoft SQL Server¥80¥Tools¥Binn¥rebuildm.exe | ||
・ | CD Drive:¥x86¥Binn¥rebuildm.exe | ||
※ | データソースを直接 CD-ROM とした場合に問題が出る可能性あり | ||
【参照】 マイクロソフト 技術情報 273572 | |||
→ | 1. | SQL Server のキット(¥x86¥Data)をローカルドライブへコピー | |
→ システムデータベースのテンプレートファイル | |||
rebuildm.exe を実行することで、環境に合わせてシステムデータベースを構築 | |||
2. | コピーしたファイルの読み取り専用属性をはずす | ||
3. | SQL Server 関連のツールをすべて閉じる | ||
4. | rebuildm.exe を実行 |
2005年09月16日
master データベースの再構築
サーバー復旧手順 (SQL Server 7.0 以降)
※ | SQL Server サービスが起動できる場合は通常の復元操作を行う | |
1. | SQL Server 再インストールまたは rebuildm でシステムデータベースを初期化 | 2. | SQL Server サービスを停止 |
3. | シングルユーザーモードで起動 | |
⇒ | sqlservr.exe -c -m | |
4. | master データベースをバックアップから復元 | |
バックアップがない場合は次のいずれかを使用して master データベース保存情報を手動再作成 | ||
・ | Enterprise Manager | |
・ | master データベースの更新を伴うオリジナルスクリプト | |
− ユーザーデータベース | ||
− データベースファイル | ||
− バックアップデバイス | ||
− SQL Server ログインまたはサーバーのセキュリティロール | ||
5. | SQL Server サービスを開始 | |
6. | msdb、model データベースをバックアップから復元 | |
※ | master データベース再構築後は msdb の内容が失われる | |
※ | msdb 復元時は SQL Server エージェントサービスを停止 | |
7. | ユーザーデータベースを復元 |
SQL Server が起動しない原因
起動しないサービス | 問題のあるデータベース |
---|---|
SQL Server サービス | master または model |
SQL Server エージェントサービス | msdb |
ファイルまたはファイルグループバックアップからの復元
・
|
復元が行われていない部分との一貫性を保持するために、ファイル/ファイルグループ復元後そのバックアップ実行以降に作成された全トランザクションログを適用 |
・
|
インデックスが2つの別のファイルグループに存在する場合はこれらのファイルグループバックアップを1つのユニットとして復元 |
⇒
|
RESTORE DATABASE データベース名 {FILE = ファイル名|FILEGROUP = ファイルグループ名} FROM... |
特定時点への復元
・ | (Transact-SQL) STOPAT オプション | |
− | リスクの高い操作を実行するとき等に使用 | |
⇒ RESTORE LOG...WITH STOPAT='YYYY/MM/DD HH:MM AM|PM' | ||
※ | STOPAT オプションは復旧完了状態が RECOVERY のときのみ実行可 | |
・ | ログマークへの復元 | |
− | 指定(マーク付き)トランザクションへ復元 | |
※ あらかじめマーク付きトランザクションを作成しておく必要あり | ||
− | 復元操作でマーク付きトランザクションを含むかまたは除外するかを指定 | |
⇒ RESTORE LOG...WITH STOPATMARK = 'マーク名' 〔→ 含む〕 | ||
⇒ RESTORE LOG...WITH STOPBEFOREMARK = 'マーク名' 〔→ 除外〕 | ||
※ AFTER 日時 指定をつけることで指定日時以降の最初のマークで復旧が停止 | ||
指定しない場合は指定の名前の最初のマークで停止 | ||
【参照】 SQL Server 2000 Books Online 「指定のトランザクションへの復旧」
「関連するデータベースのバックアップと復旧」 |
☆ ログマーク
・ | トランザクション開始時にログマークを指定(マーク付きトランザクション) | |
⇒ BEGIN TRANSACTION...WITH MARK | ||
・ | マークはトランザクションがコミットされた場合に挿入、msdb..logmarkhistory に記録 | |
− | 再利用可能 | |
− | msdb はマークまでに必要なリストア情報もトラッキング | |
・ | 分散トランザクションでは、すべてのログで一貫性のあるポイントにマーク | |
→ 復旧時はマークされるすべてのデータベースで更新が必要 | ||
・ | マークを使用できないケース | |
− | 単純(シンプル)復旧モデル | |
− | 一括ログ記録復旧モデルで、一括操作(バルクオペレーション)がログバックアップ間で行われている | |
※ | ログマーク付きトランザクションログはログ領域を消費 | |
→ | データベース復旧計画で重要な役割を果たすトランザクションに対してのみ使用 |
障害発生直前時点への復旧
○ | 障害発生直前時点への復旧条件 | |
= データファイル(*.mdf)が破損しても障害が発生する直前まで復旧できる条件 | ||
・ | 復旧モデルがフル(完全復旧)モデル | |
・ | オンラインの完全バックアップが存在 | |
・ | 完全バックアップ以降にトランザクションログを切り捨てていない | |
・ | データファイル破損時にトランザクションログが残っている |
データベース破損時における復元前のタスク
★ | まず先にトランザクションログのバックアップを行う | |
※ | 失敗時には、ある程度のデータ損失を覚悟 | |
(DBCC オプションを駆使してある程度の復旧が可能?) |
異なるデータベースへの復元
○ | 復元オプションで既存のデータベースを異なるデータベースのバックアップで上書き可能 |
★ | SQL Server 2000 のデータベースへの旧バージョンのデータベースのバックアップの復元は不可 |
破損したユーザーデータベースの復元
・ | RESTORE ステートメントまたは Enterprise Manager で既存データベース上に上書き | |
→ | 破損した既存データベースを削除する必要なし ← 旧バージョンでは必要 | |
→ | データベースファイルやオブジェクトは自動的に再作成 |
未完了バックアップ復元時における動作
・ | 未完了トランザクションを未完了のまま(実行途中の状態で)バックアップ |
→ 復旧時に未完了トランザクションをロールバック |
リストアコマンド
○ | データベースからのリストア | |
⇒
|
RESTORE DATABASE データベース名[ FROM デバイス名] [ WITH[ FILE = ファイル番号][ [,] MOVE '論理ファイル名' TO '物理ファイル名'][[,] REPLACE][[, ]{NORECOVERY|RECOVERY|STANDBY}][[, ] STATS]][[.] RESTART] | |
・ | RESTORE DATABASE データベース名 FROM DISK='ファイルパス' 〔← ディスク〕 | |
※ REPLACE … 同名のデータベースがあるときは置き換え | ||
・ | RESTORE DATABASE データベース名 FROM TAPE='¥¥.¥テープ名'... 〔← テープ〕 | |
○ | ログからのリストア | |
⇒
|
RESTORE LOG データベース名[ FROM デバイス名] [WITH [FILE = ファイル番号 ] [{NORECOVERY|RECOVERY|STANDBY}][[, ] STOPAT = 復元日時][[, ]STOPBEFOREMARK = マーク名[ AFTER 日時]][[, ] STOPATMARK = マーク名[ AFTER 日時][[,] STATS]] | |
○ | 復旧完了状態 | |
・ | 既定で RECOVERY | |
・ | 復旧完了状態を RECOVERY にし忘れた場合の変更方法 | |
⇒ RESTORE DATABASE データベース名 WITH RECOVERY | ||
○ | FILE オプション | |
・ | 複数のバックアップを含むバックアップファイルから特定のバックアップを選択 | |
※ ファイル番号 = バックアップセット番号 | ||
○ | RESTART オプション | |
・ | 中断された復元操作を中断された時点から復旧を再開 | |
○ | MOVE...TO オプション | |
・ | バックアップ時とは異なる場所にファイルを復元する場合に復元先を指定 | |
− 別ディスクドライブ、サーバー、スタンバイ SQL Server 等 | ||
※ | アタッチで代用可 | |
○ | REPLACE オプション | |
・ | 既存データベースを異なるデータベースバックアップで上書き → 安全性チェックは行わない | |
○ | STATS オプション | |
・ | 復元プロセスの進捗状況を表示 |
☆ クエリまたはコマンドから復元作業を行う際は master データベースを使用
バックアップセットの内容確認
・ | Enterprise Manager | ||||||||||||||||||
・ | Transact-SQL | ||||||||||||||||||
|
復旧作業前のタスク
・ | データベース接続の制限 | |
− | sysadmin、db_owner、dbcreator メンバーのみにアクセスを制限 | |
  | ※ シングルユーザーモードにしない → 特定ユーザーのみアクセス許可 | |
・ | 最新のトランザクションログバックアップ | |
− | 復元時のデータベースの一貫性を保障 | |
⇒ | BACKUP LOG...WITH NO_TRANCATE | |
→ データベースが壊れている場合でもバックアップ実行可 | ||
→ 非アクティブログ領域を削除しない |
復旧プロセスとアクティビティ
○ 復旧プロセス
・ | トランザクションログの記録開始指示 | ||||||
・
|
前回のチェックポイント以降からシステム障害発生(またはシャットダウン)時点までのログを調査、データベースの整合性が保たれている状態に復旧 | ||||||
・ | トランザクションログ内で、データベースに書き込みが行われないトランザクションの処理を行う | ||||||
|
|||||||
○アクティビティ
・ | 安全性のチェック | |||
− | 復元先とバックアップデータの確認 | |||
− | 誤った上書き操作を防止 | |||
− | 復元先の既存データベース名/ファイルの確認、バックアップファイルの確認等 | |||
→ | データベース復元が実行されない状況 | |||
‥
|
RESTORE DATABASE ステートメントで指定されたデータベースがすでに存在しているがバックアップファイルに記録されているデータベース名と異なる | |||
‥
|
サーバー上のデータベースファイルセットがバックアップセットに含まれたファイルセットと異なっている | |||
※ ファイルサイズの違いは無視 | ||||
‥ | 復元に必要なファイルが不完全 | |||
・ | 復元後、すべてのオブジェクトを自動的に再生成 | |||
○ 復旧プロセスの開始
自動開始 | システム再起動後 |
手動開始 | データベース復元時の復旧完了状態の指定オプション → RECOVERY |
ユーザーデータベースの復元手順
復旧モデル | バックアップ種類 | 復元前のログバックアップ(NO_TRANCATE) | 復旧元 |
---|---|---|---|
フル(完全)モデル | データベースバックアップ | 可 | データベース |
ファイルバックアップ | 可 | データファイル | |
一括ログ記録モデル | データベースバックアップ | 不可 | データベース |
ファイルバックアップ | 可(ログ期間中に一括操作が行われていない場合) | データファイル | |
シンプル(単純)モデル | 不可 | データベース |
データベース復旧モデル変更時の考慮事項
変更前\変更後 | フル(完全)モデル | 一括ログ記録モデル | シンプル(単純)モデル |
---|---|---|---|
フル(完全)モデル | - | 変更なし | 変更後にデータベースバックアップ |
一括ログ記録モデル | 変更なし | - | 変更後にデータベースバックアップ |
シンプル(単純)モデル | 変更直前にログバックアップ | 変更直前にログバックアップ | - |
※ フル ⇔ 一括ログ記録モデル間の変更にはバックアップ方針に変更なし |
※ シンプルが絡んだ変更に注意が必要。ただし一般的ではない |
一括操作
・ | 一括ログ記録モデル、シンプル(単純)モデルでサポート | |
※ | フル(完全)完全モデルは非サポート | |
・ | 一括ログ記録モデルでのバックアップ時の動作 | |
→ | 一括操作の更新分をトランザクションログバックアップ時にエクステント単位でバックアップ | |
・ | 一括操作 (BULK 命令) … 一度に大量のデータを処理する操作命令 | |
− | SELECT...INTO ステートメント | |
− | 一括ロード操作 (bcpコマンド、BULK INSERT ステートメント) DTS も? | |
− | インデックスの作成 (CREATE INDEX ステートメント) | |
− | text 操作と image 操作 (WRITETEXT、UPDATETEXT ステートメント) |
2005年09月09日
データベース復旧モデル
○ 旧バージョンとの比較
SQL Server 7.0 | SQL Server 2000 | 動作 | ログ切り捨てタイミング | |
---|---|---|---|---|
チェックポイント時のログ切り捨てオプション | Select Into/BulkCopy オプション | 復旧モデル | ||
trunc. Log on chkpt. | select into/ bulkcopy | |||
FALSE | FALSE | フル(完全)モデル | 完全バックアップ | バックアップ時 |
FALSE | TRUE | 一括ログ記録モデル | 一括操作をログに記録しない ※ | |
TRUE | TRUE | シンプル(単純)モデル | トランザクションログ切り捨て | チェックポイント時 |
TRUE | FALSE |
※ 一括操作は結果のみ記録 → パフォーマンス向上 |
【参照】 SQL Server 2000 Books Online
「SQL Server 2000 と SQL Server Version 7.0」 |
○ デフォルトの復旧モデル
フル(完全)モデル | 新規作成データベース 〔Enterprise Edition/Standard Edition〕
model 〔各エディション共通〕 |
シンプル(単純)モデル | 新規作成データベース 〔Personal Edition/Desktop Engine (MSDE)〕
master、msdb、tempdb、pubs、Northwind 〔各エディション共通〕 |
※ Personal Edition、MSDE での新規作成データベースは model データベースの設定を引き継がない |
※ システムデータベースでは更新頻度がそれほど高くないためシンプルモデルになっている |
【参照】 SQL Server 2000 Books Online 「復旧モデルの使用」 |
○ 設定方法 (Transact-SQL)
・ | 下位バージョン互換コマンド | ||||||
exec sp_dboption 'データベース名 ','select into/ bulkcopy'.'{TRUE|FALSE}' | |||||||
exec sp_dboption 'データベース名 ','trunc. log on chkpt.','{TRUE|FALSE}' | |||||||
※ SQL Server 2000 では非推奨 | |||||||
※ SQL Server 2000 では、どちらかを変更するともう一方も連動して変更 | |||||||
・ | SQL Server 2000 独自コマンド | ||||||
CREATE DATABASE データベース名 SET 復旧オプション | |||||||
ALTER DATABASE データベース名 SET 復旧オプション | |||||||
※ 復旧オプション | |||||||
|
○ 設定確認方法 (Transact-SQL)
SELECT DATABASEPROPERTYEX('データベース名','RECOVERY')
データベース復旧モデルの概要
・ | データバックアップの方法およびデータ消失に対する対策を指定 | |
− | 各種バックアップによって構成 | |
・ | 提供の目的 | |
− | 復旧計画およびバックアップと復旧手順の簡略化 | |
− | パフォーマンスコストとデータ損失の明確なトレードオフ | |
← トランザクション損失の危険性 | ||
← ログスペースの消費 | ||
← 簡易性 | ||
・ | 一般的な運用シナリオでの変更を簡便化 | |
− | データの保護を維持 | |
− | 可用性の維持 | |
− | 保守手順分割の必要性の最小化 |
サードパーティ製品を利用したバックアップソリューション
・ | 分割ミラーバックアップ |
・ | スナップショットバックアップ |
【参照】 TechNet SQL Server 2000 高可用性シリーズ プランニング 第3章
「データベースバックアップを使用してデータセンターを復旧する」