- PR -

トランザクションログの復旧

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/06/20
投稿数: 3
投稿日時: 2007-06-20 17:09
お世話になります。

SQLServer2005でトランザクションログのRestoreについてご質問させていただきます。
復旧モデルを完全に設定しDBバックアップを1回とトランザクションログ2回
下記の順番でファイルに落としております。

----------
(1)DBバックアップ
「BACKUP DATABASE db1
 TO DISK = 'c:\\db1.bak'」

(2)トランザクションログ1
「BACKUP LOG db2
 TO DISK = 'c:\\db1_log1.bak'」

(3)トランザクションログ2
「BACKUP LOG db2
 TO DISK = 'c:\\db1_log2.bak'」
----------

(1)時の状態に戻すのは
「RESTORE DATABASE db1
 FROM DISK = 'c:\\db1.bak'
 WITH REPLACE」
で戻せるのは分かるのですが
(2)時または(3)時の状態にもどす構文をどのようにすれば
よいのか理解できておりません。

ご教示いただけますでしょうか。
宜しくお願い致します。


[ メッセージ編集済み 編集者: 未記入 編集日時 2007-06-22 15:03 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-06-21 10:58
RESTORE LOG で古い順にログを被せていくはずです。

SQL Server 2005 Books Onlineトランザクション ログ バックアップの適用
この辺から読んでみてはいかがでしょうか。
未記入
会議室デビュー日: 2007/06/20
投稿数: 3
投稿日時: 2007-06-21 17:00
かめたろ様
返信有難う御座います。

(1)の状態に戻したあと(2)時点に戻すため
「RESTORE LOG db2
 FROM DISK = 'c:\\db1_log1.bak'」
を流すと
『ロールフォワードできる状態のファイルがないので、
 ログまたは差分バックアップは復元できません。』
となり戻せません。

掲載頂いたmsdnなど調べていき
"BACKUP LOG"は"WITH NORECOVERY"を指定とあったので
(2)のところで
「BACKUP LOG TkwInvDb
 TO DISK = 'c:\\db1_log1.bak'
 WITH NORECOVERY」
を実施したところDB自体が復元中となってしまい
操作することができなくなってしまいました。
("BACKUP DATABASE"は可能でした。)

トランザクションログの出力のところで
誤りがあるようにおもうのですが
まだ理解に至っておりません。

よろしくお願い致します。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-06-22 14:01
気になる点としましては、
引用:

----------
(1)DBバックアップ
「BACKUP DATABASE db1
 TO DISK = 'c:\db1.bak'」

(2)トランザクションログ1
「BACKUP LOG db2
 TO DISK = 'c:\db1_log1.bak'」

(3)トランザクションログ2
「BACKUP LOG db2
 TO DISK = 'c:\db1_log2.bak'」
----------


(1)のデータベースと(2)(3)のデータベースが異なっています。(転記ミス?)
それゆえ、
引用:

『ロールフォワードできる状態のファイルがないので、
 ログまたは差分バックアップは復元できません。』


がでるのでは?私はこのエラー見たことないんでなんとも言い難いですが。

データベースもログも、同じ db1 からバックアップを取っているとしたら、
(1)RESTORE DATABASE db1 FROM DISK = N'c:\db1.bak' WITH NORECOVERY
(2)RESTORE LOG db1 FROM DISK = N'c:\db1_log1.bak' WITH NORECOVERY
(3)RESTORE LOG db1 FROM DISK = N'c:\db1_log2.bak' WITH RECOVERY
これで(3)まで復元すると思うんですけどねぇ。(2)まで復元したければ、まず(1)を実行し(2)を WITH RECOVERY で実行。(その後(3)をやってもエラーではじかれるはず。)

マネジメントスタジオでUIからバックアップや復元の操作をしてみて、それをプロファイラでトレースしてみると流れが分かっていいかもしれません。

引用:

「BACKUP LOG db2
 TO DISK = 'c:\db1_log1.bak'
 WITH NORECOVERY」 を実施したところDB自体が復元中となってしまい
操作することができなくなってしまいました。


ハイ。
NORECOVERY は復元中の状態のままにするオプションです。続けて次のBACKUPやRESTOREコマンドを実行したい場合に使います。RESTOREではなくBACKUPでNORECOVERYにするケースって、直近のログのバックアップをとってそのまま復元作業を続ける時ぐらいでしょうか。

あ、たいした復元経験はないので間違ってたらごめんなさい。

[ メッセージ編集済み 編集者: かめたろ 編集日時 2007-06-25 12:02 ]
未記入
会議室デビュー日: 2007/06/20
投稿数: 3
投稿日時: 2007-06-22 15:12
かめたろ様
返信有難う御座います。

おかげさまで少し理解が深まり
実質復元を行ったところしっかり指定した箇所まで
復元できることが確認できました。
有難う御座いました。
まだ理解が出来ていないところがありますが
もう少し自分で調べて見たいと思います。

また、指摘を頂いたDB名の不一致は転記ミスによるもので
(2)と(3)は実際のDB名をそのまま転記しておりました。
お手数をお掛けしました申し訳ありませんでした。

実際のDBを記載したままというのも気がかりなので
私が記述しましたところは全て'db2'に編集致しました。
もし差し支えなければ、かめたろ様が引用されております
箇所も'db2'に編集して頂ければ幸いです。

この度は、ご丁寧な対応有難う御座いました。


[ メッセージ編集済み 編集者: 未記入 編集日時 2007-06-22 15:12 ]
1

スキルアップ/キャリアアップ(JOB@IT)