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

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

解決済みの質問

データベースの復元におけるエラーについて

初歩的なことで悩んでおり、2点程質問があります。
(1)DBの復元時に「タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。」というエラーが発生する時があります。これが発生するのは復元するDBのサイズが大きいときであり、タイムアウト値を長くすることで解決は出来たのですが、これ以外での解決策は無いのでしょうか?(復元するDBのサイズは運用形態により変わる為、固定値にするのは危険?)
(2)(1)のエラーが発生した後、再度DBの復元を行おうとすると(厳密にはDBのオープン時)、「Database 'DB名' cannot be opened. It is in the middle of a restore.」というエラーが発生します(Enterprise Managerでは:「読込んでいます」と表記)。このエラーの修復方法が分からず悩んでいます。出来れば(1)のエラーが発生したときに(2)の状態にならないのが理想です。
以下に復元時の主な流れを明記します。
1.DBオープン(server=(local);uid=sa;pwd='パスワード';database='DB名';Connect Timeout= 500)
2.シングルユーザ設定(ALTER DATABASE 'DB名' SET SINGLE_USER WITH ROLLBACK IMMEDIATE)
3.DBの復元(RESTORE DATABASE 'DB名'" FROM DISK = 'バックアップDB' WITH RECOVERY)
4.マルチユーザ設定

長々と申し訳ありませんが宜しくお願い致します。

投稿日時 - 2005-09-26 18:59:35

QNo.1674920

すぐに回答ほしいです

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

なるほど、VBを使用する場合ですか・・・それですと、タイムアウトを大きくする以外にはなさそうですね。

逆に、タイムアウトは大きくせず(通常のトランザクションを流すのと同じ程度に設定し)、タイムアウトが発生したらある程度の時間間隔を置いて再接続を試みるという方法もあります。

2.の現象が発生している原因が判明し、その原因を取り除くことができるようであれば、この方法でも良いのではないかと思います。

投稿日時 - 2005-09-27 16:30:39

補足

度々有難うございます。
やっぱりタイムアウトを大きくするしかないですか。
一応、リストアの時だけ、タイムアウトを通常より大きくして対応しようかなと考えています。
2.については、リストアを失敗すると、必ず「リストア中」のまま保持されるようなので、発生しても別のDBをリストアできるように対応します。(テスト的に試したらできそうだったので・・・)
本当に助かりました。

投稿日時 - 2005-09-27 18:30:58

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

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

回答(2)

ANo.1

1. タイムアウトを設定する以上はどうしようもないかと思います。別の方法として、クエリアナライザからSQLを発行する方法があります。

2. エラー発生後、再度のコマンド発行時にまだリストアを行っている途中であれば、そのエラーメッセージが表示されるのは自然です。そうではない場合、

http://support.microsoft.com/kb/319701/en-us/



http://support.microsoft.com/kb/822852/en-us/

に記述された現象が発生しているのかもしれません。

投稿日時 - 2005-09-26 22:51:40

補足

早速のご回答ありがとうございます。
2.については掲示のHPの内容にて修復できました。
1.の「クエリアナライザからSQLの発行」とありますが、これと同じことをVB.netから出来るのでしょうか?
初心者なもので、見当違いな質問をしていたらすみません。

投稿日時 - 2005-09-27 13:23:09

あなたにオススメの質問