2005年09月16日

master データベースの再構築

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 を実行
posted by w@ko at 19:24|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

サーバー復旧手順 (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. ユーザーデータベースを復元
posted by w@ko at 19:22|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

SQL Server が起動しない原因

起動しないサービス 問題のあるデータベース
SQL Server サービス master または model
SQL Server エージェントサービス msdb
posted by w@ko at 19:22|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

ファイルまたはファイルグループバックアップからの復元


 
復元が行われていない部分との一貫性を保持するために、ファイル/ファイルグループ復元後そのバックアップ実行以降に作成された全トランザクションログを適用

 
インデックスが2つの別のファイルグループに存在する場合はこれらのファイルグループバックアップを1つのユニットとして復元

 
RESTORE DATABASE データベース名 {FILE = ファイル名|FILEGROUP = ファイルグループ名} FROM...
posted by w@ko at 19:20|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

特定時点への復元

(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 はマークまでに必要なリストア情報もトラッキング
分散トランザクションでは、すべてのログで一貫性のあるポイントにマーク
    → 復旧時はマークされるすべてのデータベースで更新が必要
マークを使用できないケース
  単純(シンプル)復旧モデル
  一括ログ記録復旧モデルで、一括操作(バルクオペレーション)がログバックアップ間で行われている
 
ログマーク付きトランザクションログはログ領域を消費
  データベース復旧計画で重要な役割を果たすトランザクションに対してのみ使用
posted by w@ko at 19:15|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

障害発生直前時点への復旧

障害発生直前時点への復旧条件
    = データファイル(*.mdf)が破損しても障害が発生する直前まで復旧できる条件
  復旧モデルがフル(完全復旧)モデル
  オンラインの完全バックアップが存在
  完全バックアップ以降にトランザクションログを切り捨てていない
  データファイル破損時にトランザクションログが残っている
posted by w@ko at 19:15|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

データベース破損時における復元前のタスク

まず先にトランザクションログのバックアップを行う
  失敗時には、ある程度のデータ損失を覚悟
    (DBCC オプションを駆使してある程度の復旧が可能?)
posted by w@ko at 19:14|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

異なるデータベースへの復元

復元オプションで既存のデータベースを異なるデータベースのバックアップで上書き可能
SQL Server 2000 のデータベースへの旧バージョンのデータベースのバックアップの復元は不可
posted by w@ko at 18:31|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

破損したユーザーデータベースの復元

RESTORE ステートメントまたは Enterprise Manager で既存データベース上に上書き
  破損した既存データベースを削除する必要なし ← 旧バージョンでは必要
  データベースファイルやオブジェクトは自動的に再作成
posted by w@ko at 18:30|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

未完了バックアップ復元時における動作

未完了トランザクションを未完了のまま(実行途中の状態で)バックアップ
  → 復旧時に未完了トランザクションをロールバック
posted by w@ko at 18:29|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

リストアコマンド

データベースからのリストア
 
 
 
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 データベースを使用

posted by w@ko at 18:29|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

バックアップセットの内容確認

Enterprise Manager
Transact-SQL
 
RESTORE HEADERONLY バックアップファイルまたはバックアップセットのヘッダ情報
  バックアップセット名、メディアの種類、バックアップ方法、日時、サイズ、シーケンス番号
  ⇒ RESTORE HEADERONLY FROM DISK='ファイルパス'
RESTORE FILELISTONLY バックアップセットに含まれたデータベースファイルとログファイル情報
  ログファイルの物理名/論理名、ファイルの種類、ファイルグループメンバーシップ、サイズ
RESTORE LABELONLY バックアップメディアに関する情報
RESTORE VERIFYONLY バックアップセット構成ファイルが完全か、読み取り可能かの確認
posted by w@ko at 18:28|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

復旧作業前のタスク

データベース接続の制限
  sysadmin、db_owner、dbcreator メンバーのみにアクセスを制限
    ※ シングルユーザーモードにしない → 特定ユーザーのみアクセス許可
 
最新のトランザクションログバックアップ
  復元時のデータベースの一貫性を保障
  BACKUP LOG...WITH NO_TRANCATE
    → データベースが壊れている場合でもバックアップ実行可
    → 非アクティブログ領域を削除しない
posted by w@ko at 18:28|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

復旧プロセスとアクティビティ

○ 復旧プロセス
トランザクションログの記録開始指示

 
前回のチェックポイント以降からシステム障害発生(またはシャットダウン)時点までのログを調査、データベースの整合性が保たれている状態に復旧
トランザクションログ内で、データベースに書き込みが行われないトランザクションの処理を行う
 
コミット済みトランザクション ロールフォワードしデータベースに変更を書き込み
未コミットトランザクション ロールバック
 
○アクティビティ
安全性のチェック
  復元先とバックアップデータの確認
  誤った上書き操作を防止
  復元先の既存データベース名/ファイルの確認、バックアップファイルの確認等
  データベース復元が実行されない状況
   
 
RESTORE DATABASE ステートメントで指定されたデータベースがすでに存在しているがバックアップファイルに記録されているデータベース名と異なる
   
 
サーバー上のデータベースファイルセットがバックアップセットに含まれたファイルセットと異なっている
      ※ ファイルサイズの違いは無視
    復元に必要なファイルが不完全
復元後、すべてのオブジェクトを自動的に再生成
 
○ 復旧プロセスの開始
自動開始 システム再起動後
手動開始 データベース復元時の復旧完了状態の指定オプション → RECOVERY
posted by w@ko at 18:27|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

ユーザーデータベースの復元手順

復旧モデル バックアップ種類 復元前のログバックアップ(NO_TRANCATE) 復旧元
フル(完全)モデル データベースバックアップ データベース
ファイルバックアップ データファイル
一括ログ記録モデル データベースバックアップ 不可 データベース
ファイルバックアップ 可(ログ期間中に一括操作が行われていない場合) データファイル
シンプル(単純)モデル   不可 データベース
posted by w@ko at 18:26|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

データベース復旧モデル変更時の考慮事項

変更前\変更後 フル(完全)モデル 一括ログ記録モデル シンプル(単純)モデル
フル(完全)モデル - 変更なし 変更後にデータベースバックアップ
一括ログ記録モデル 変更なし - 変更後にデータベースバックアップ
シンプル(単純)モデル 変更直前にログバックアップ 変更直前にログバックアップ -
  ※ フル ⇔ 一括ログ記録モデル間の変更にはバックアップ方針に変更なし
  ※ シンプルが絡んだ変更に注意が必要。ただし一般的ではない
posted by w@ko at 18:26|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

一括操作

一括ログ記録モデル、シンプル(単純)モデルでサポート
  フル(完全)完全モデルは非サポート
一括ログ記録モデルでのバックアップ時の動作
  一括操作の更新分をトランザクションログバックアップ時にエクステント単位でバックアップ
一括操作 (BULK 命令) … 一度に大量のデータを処理する操作命令
  SELECT...INTO ステートメント
  一括ロード操作 (bcpコマンド、BULK INSERT ステートメント) DTS も?
  インデックスの作成 (CREATE INDEX ステートメント)
  text 操作と image 操作 (WRITETEXT、UPDATETEXT ステートメント)
posted by w@ko at 18:25|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

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 復旧オプション
  ※ 復旧オプション
 
RECOVERY SIMPLE シンプル(単純)モデル
RECOVERY BULK_LOGGED 一括ログ記録モデル
RECOVERY FULL フル(完全)モデル

○ 設定確認方法 (Transact-SQL)

    SELECT DATABASEPROPERTYEX('データベース名','RECOVERY')

posted by w@ko at 19:38|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

データベース復旧モデルの概要

データバックアップの方法およびデータ消失に対する対策を指定
  各種バックアップによって構成
 
提供の目的
  復旧計画およびバックアップと復旧手順の簡略化
  パフォーマンスコストとデータ損失の明確なトレードオフ
    ← トランザクション損失の危険性
    ← ログスペースの消費
    ← 簡易性
 
一般的な運用シナリオでの変更を簡便化
  データの保護を維持
  可用性の維持
  保守手順分割の必要性の最小化
posted by w@ko at 19:37|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。