• 締切
  • すぐに回答を!

バックアップの成功/失敗

  • 質問No.322791
  • 閲覧数317
  • ありがとう数2
  • 回答数1

お礼率 51% (16/31)

ASP上からデータベースのバックアップを行うページを作成しています。
データベースエンジンは、SQLサーバー7.0/2000です。

バックアップは、以下のような手順で行います。
Dim db
Set db = Server.CreateObject("ADODB.Connection")
db.Open DB_CONNECTION_STRING
db.Execute("BACKUP DATABASE [TEST] TO DISK = N'E:\全体.BAK' WITH INIT , NOUNLOAD , NAME = N'TEST バックアップ', SKIP , STATS = 10, NOFORMAT")

バックアップ自体はできるのですが、db.Execute() は、バックアップの終了を待たずして、戻ってきてしまいます。バックアップ開始後、バックアップの処理中・終了・成功・失敗などのステータスを確認したいのですが、どうすれば取得できるのでしょうか?

よろしくお願いいたします。

回答 (全1件)

  • 回答No.1

ベストアンサー率 42% (1231/2878)

@@ERRORで、実行結果を取得できませんか?
ちょろっと試した感じでは、とれてるような気が。

ただ、バックアップに時間がかかりすぎると、ASPの方が、スクリプトタイムアウトになってしまう恐れがあるのではないかしら。
EnterpriseManagerで保守計画を作成して、その実行結果レポートをチェックした方が、良いのでは。
補足コメント
isobeman

お礼率 51% (16/31)

ご回答有り難うございました。
@@ERRORでとれそうです。無知で申し訳ありませんでした。

スクリプトタイムアウトの方は、2時間から3時間以上に設定して、処理中に絶対にタイムアウトしないようにするつもりです。
また、非同期にバックアップを実行して、状態を見ながら逐一Webブラウザにメッセージを送ることで、ブラウザ側のタイムアウトも回避するつもりです。

ただ、非同期動作をテストしたところ、db.State で得られる値が、「5」という、意味不明な値を返しており、困惑しています。これは、以下のいずれかを返すと、いろいろな書籍に書かれており、5を返すという動作は、おかしいのです。私は、動作中は、4で、終わったら、1を返してくれることを期待していたのですが、、、

戻り値の意味(MSDNより抜粋):
値 説明
0 オブジェクトが閉じていることを示します。
1 オブジェクトが開いていることを示します。
2 オブジェクトが接続していることを示します。
4 オブジェクトがコマンドを実行中であることを示します。
8 オブジェクトの行が取得されていることを示します。

結果、0,1,2以外は、処理の終了を待つようにしようと思います。
また、結果は、処理終了後、エラーコレクション([ADODB.Connection].Errors)を参照すれば、できそうでした。@@ERRORを教えていただきましたが、SQL中でエラーを確認できても、どのようにしてASPまで戻すのかがわからなかったため、これの方が、簡単かなと思った次第です。

また、EnterpriseManagerにてバックアップを処理する件ですが、使用環境や、時間帯、将来的にMSDEでの使用も考えており、また、ユーザーにEnterprizeManagerを使わせたくない事もあり、また、外部メディアに保存して、物理的にバックアップデータを管理させたいため、このような方法になりました。

いろいろ勉強させていただきました。
有り難うございました。
投稿日時:2002/07/29 11:38
関連するQ&A
ページ先頭へ