1

アプリケーションコードを使用して、バックアップからデータベースを動的に復元しようとしています

復元のための単純な SQL コマンド

con.execute("RESTORE FILELISTONLY FROM DISK='c:\old.bak' " & vbcrlf &_
        "RESTORE DATABASE newdb " & vbcrlf &_
        "FROM DISK='c:\old.bak' " & vbcrlf &_
        "WITH MOVE 'newdb' TO 'c:\newdb.mdf', " & vbcrlf &_
        "MOVE 'newdb_log' TO 'c:\newdb_log.ldf'")

しかし、それは起動しません。エラーはありませんでした。SQLプロファイラでチェックして、正しく見てください

RESTORE FILELISTONLY FROM DISK='c:\old.bak' 
RESTORE DATABASE newdb 
FROM DISK='c:\old.bak' 
WITH MOVE 'newdb' TO 'c:\newdb.mdf', 
MOVE 'newdb_log' TO 'c:\newdb_log.ldf'

SQLプロファイラーからSQLを実行すると、その作品

この問題をどのように説明できますか?

4

3 に答える 3

1

データベースのロックとして使用している接続を推測しているため、復元できません。直接実行すると、そうではありません。

これはどうですか?

con.execute("USE master" & vbcrlf &_
        "RESTORE FILELISTONLY FROM DISK='c:\old.bak' " & vbcrlf &_
        "RESTORE DATABASE newdb " & vbcrlf &_
        "FROM DISK='c:\old.bak' " & vbcrlf &_
        "WITH MOVE 'newdb' TO 'c:\newdb.mdf', " & vbcrlf &_
        "MOVE 'newdb_log' TO 'c:\newdb_log.ldf'")

または、接続文字列でデータベースを変更しますか?

于 2009-04-02T10:54:45.853 に答える
0

復元を実行する前に、復元先のデータベース内のすべてのユーザーを強制終了してみてください。データベースへのアクティブな接続がある場合、復元は失敗します。これを行う方法のサンプルコードがあります

また、アプリケーションから復元を呼び出すときに使用する接続文字列が、復元先のデータベースに接続せず、masterやmsdbなどに接続することを確認してください。

于 2009-04-02T12:14:07.173 に答える
0

データベースが他のセッションで使用されている場合、復元を実行するためにブロックされます。60 秒間完全に待機し、タイムアウト エラーがないかどうかを確認してください。

于 2009-04-02T09:29:56.617 に答える