みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MSDE 一括リストアについて

今までMSDE を動かしていたサーバーが壊れてしまいました、今までのデータは
osqlコマンドを使いバックアップファイルは出来ています。

新規PCにMSDEをインストールして運用できる状態にあります、次に以前のバックアップデータをリストアしたいと考えています。

バックアップデータが300個以上ありそれらを一括でリストアしたいのですがやり方をお教え願えれば有難です。

今までのバックアップファイルがひとつのフォルダの中に”事業所xxxx.bak"事業所vvvv.bak"という感じで拡張子が.bakという名前で300以上在ります、


”事業所”という文字は全てのバックアップファイルに共通です。
そしてリスア後は事業所xxxxと拡張子のbakだけを除いた名前で再現させたいと考えています。

ひとつのバックアップファイル単体でのリストアなら
RESTORE DATABASE xxxx FROM DISK='xxxxxx' WITH REPLACE
このようにすれば出来るのですが、

今回は350以上もデータがあり今後リストアの自動化も考えていますので、
フォルダ内のバックアップファイルを自動で全てリストアする方法を探しています


出来ればWindowsのタスクで実行して自動化できればベストです、

何卒皆様のお知恵を拝借させて頂きたく存じます
よろしくお願い致します。

投稿日時 - 2009-01-15 19:14:11

QNo.4632787

暇なときに回答ください

質問者が選んだベストアンサー

先日バックアップの方で書き込みをしましたが、バックアップファイル名が違うところを見ると、別のMSDEですか?
(まさか300個以上もあるとは思わなかったですが、全DBのバックアップで負荷がかかりすぎて壊れたなんてことはないことを祈ります)

個人的にはリストアの自動化という発想自体はあまりお勧めできないです。。リスクが高すぎますから。
とはいえ。今回はそうも言ってられないと思いますので、また懲りずにコメントします。

バックアップのときは、MSDE内にあるデータベースの一覧に基づいて処理をするということで、全部データベース側でやらせましたが、
今回のはMSDE内にはまだデータベースはなく、ファイルのみがあるということなので、方法は2つです。
1) xp_cmdshellを使って、データベース側でファイルリストを読みだし、ループしてリストアコマンドを生成し実行する
2) Windowsコマンドで先にスクリプトを作成してしまい、まとめて実行する

xp_cmdshellは管理方針によっては嫌がられることも多いので、2)のサンプルです(バッチファイル)。
---------------------------------------------------------------------------------------------------------
@ECHO OFF
SET WORKLOC=(ワーク用のフォルダのフルパス)
SET BACKUPLOC=(バックアップファイルを置いたフォルダのフルパス)

DIR /B %BACKUPLOC% > %WORKLOC%\FILELIST.txt
TYPE nul > %WORKLOC%\COMMAND.sql
FOR /F "tokens=1 delims=." %%i IN (%WORKLOC%\FILELIST.txt) DO ECHO RESTORE DATABASE [%%i] FROM DISK='%BACKUPLOC%\%%i.bak' WITH REPLACE >> %WORKLOC%\COMMAND.sql & ECHO GO >> %WORKLOC%\COMMAND.sql

osql -E -S(サーバ名) -i%WORKLOC%\COMMAND.sql > %WORKLOC%\RESTORE.log

SET WORKLOC=
SET BACKUPLOC=
---------------------------------------------------------------------------------------------------------
バッチコマンドなので、見ればお分かりかと思いますが、
RESTORE DATABASE [xxxxxx] FROM DISK='xxxxxx.bak' WITH REPLACE
GO
というコマンドをバックアップファイル数分生成してスクリプトファイルに書き出し、それを実行しているだけです。
osqlを実行している行だけREMでコメントアウトすれば、実行前に生成したスクリプトを確認できます。

繰り返しになりますが、リストアは慎重にテストしてください。

投稿日時 - 2009-01-15 21:15:11

お礼

jamshid6様

返事が遅れてすみませんでした、
jamshid6様の公開されたスクリプトをしようする事で
希望通りの事が出来ました。

今回もお知恵をお借りできてホントに助かりました
有難うございます。

投稿日時 - 2009-01-20 22:36:52

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問