SSブログ

SQL Server のバックアップ の基礎 [BACKUP]

まずはこの辺りから始めないと以降わからなくなりそうなので…
SQL Server のバックアップです。
何はともあれ SQL Server が無いと始まりません。
SQL Server 2005 (英語版ですが…)です。
その管理ツール SQL Server Management Studio です。

適当なユーザデータベースが作られていて、適当なデータが入ってます。

SQL Server のバックアップは SQL Server Management Studio から実行します。
SQL Server Management Studio でデータベースを選択して、右クリックして Tasks - Backup
初回のバックアップはデータベース全体をバックアップする Full でバックアップします。
Full -- データベース全体のバックアップ
Diffalential -- Fullバックアップからの変更差分のバックアップ
Transaction Log -- データベース内のデータの変更,追加,削除といった操作をログとして記録されたもののバックアップ
トランザクションログはデータベースをリカバリする時に必要になります。
差分もトランザクションログもそのベースとなるフルバックアップが無いとバックアップ出来ません。
フルバックアップを戻した後に差分やトランザクションログを適用します。
バックアップ先はテープ装置かディスクです。
今回はテープ装置を繋げていないのでディスクにバックアップします。

フルバックアップを取った後に、そこからの差分としてトランザクションログをバックアップします。
差分というだけなら差分バックアップでもよいのですが、トランザクションログだと、フルバックアップ以降の任意の時間に戻す事が可能なのでリカバリという点では重要になります。
ちなみに、分かり易い様にフルバックアップとは別のファイルでバックアップしてます。

二種類のバックアップを取ると、バックアップ履歴では↓の様に見えます。この辺りは2000の方が分かり易かった気がしますが、フルバックアップがあってそれを元にしたトランザクションログバックアップが繋がります。
ちなみにこの画面はリストアの画面で、SQL Server Management Studio でデータベースを選択して、右クリックして Tasks - Restore - Database で出てきます。

完全に戻す場合は、両方選択してOKするとフルバックアップに続いてトランザクションログも1アクションで戻ります。
フルバックアップだけ戻す場合は、Full だけ選んでリストアします。

しかし、フルバックアップのリストア後に個別でトランザクションログを戻したい場合はフルバックアップのリストア時に、RESTORE WITH NORECOVERY を選んでおかないと戻した後でトランザクションログを適用出来ません。
Generalタブで選択したもの以降は戻さない場合は RESTORE WITH RECOVERY で戻します。

RESTORE WITH NORECOVERY で戻すと、データベースは Ristoring モードになります。
ちなみにこの状態ではデータベースへアクセスしてデータを見る事は出来ません。
RESTORE WITH RECOVERY の場合は続けてトランザクションログの適用は出来ませんが、通常にアクセス出来る通常の状態になります。

Ristoring モードだと、続けてフルバックアップ以降のトランザクションログをリストア出来ます。

この時も RESTORE WITH NORECOVERY または RECOVERY が選べますが、この先戻すものが無い(バックアップがない)場合に RESTORE WITH NORECOVERY を選んでいた場合、データベースは Ristoring モードになってしまい使えません。

この場合はマニュアルで RECOVERY して Ristoring モードを解除する必要があります。
以下の Query を実行してリカバリます。

以上でデータベースのリストアとリカバリが完了してデータベースにアクセス出来る様になります。

そもそも、戻す時にフルバックアップとトランザクションログを別々に戻す必要がなんであるのか!?
そんな事するからマニュアルでリカバリする羽目になるんだ!
とか思うでしょうが、そんな事があるんです。


nice!(2)  コメント(6)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 2

コメント 6

56

めっちゃ助かりました。
休日に職場から電話がかかってきてあわててWebで調べて
このサイトに行き着きました。

誤って復元モードに入ってしまったらしく、

RESTORE DATABASE DB WITH RECOVERY

のコマンドで窮地を脱しました。

ほんまにありがとうございます。
by 56 (2008-12-23 13:34) 

aki-aoki

56 さんコメントありがとうございます。
restor が ristor だったり erstor だったりしますが許して下さい。
自分もあせった事があるので、どこかに残したかったのです。
お役に立ててなによりです。
by aki-aoki (2008-12-24 00:45) 

conana

はじめまして。conanaと申します。

SQLServerについて、悩んでおり、WEBで調べていたら、
こちらに辿り着きました。

早速で申し訳ないのですが、1点質問です。

リカバリを行う時ですが、
フルバックアップ→最新の差分バックアップ
と言うのが、通常の流れのようですが、
フルバックアップ
→差分バックアップ(前々日)
→最新の差分バックアップ(前日)
とした場合、問題ありますでしょうか。

ちなみに、この方法で試験を行ったところ、
動作的には、問題なかった様に感じておりますが、
今ひとつ、なぜ問題ないのかをビシッとお客様に説明できる理由が
見当たらなくて・・・。

どうか教えてください。
お願い致します。
by conana (2009-01-06 15:14) 

aki-aoki

conana さんコメントありがとうございます。
SQLServer の差分はフルバックアップからの差分なので、途中の差分を戻す必要はありません。2回目の差分は1回目の差分を含んでいます。
Oracleの差分増分ではなく累積差分がSQLServerの差分です。

途中の差分を戻しても、戻るでしょうが最後の差分で上書きされるだけで時間の無駄かと思います。
戻したい時は急ぎたいでしょうし…もっともあわてて戻してもいいことありませんが…。
by aki-aoki (2009-01-07 20:28) 

conana

ご返答ありがとうございました。
私の返信が遅くなり、申し訳ありませんでした。

仰るとおり、2回目の差分は、1回目のものを含んでいる為、
1回目のものをやる必要はありませんでした。

マクロソフトに確認してみたところ、1回目のものをやって、
2回目のものをすぐ乗せた場合でも問題ないのは、
あとのものが上書きされる為だとの回答でした。

お手数お掛け致しました。ありがとうございました。
by conana (2009-01-16 14:44) 

merrymore

だいぶ前の記事へのコメントで恐縮ですが、私も復旧状態のままリストアしてしまったため、大変助かりました。
ありがとうございました。
by merrymore (2014-01-07 15:32) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。