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 profiler 检查并正确查看

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 profiler 运行 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

如果数据库正在与其他会话一起使用,则要执行还原,您将被阻止。确保等待整整 60 秒,然后查看是否有任何超时错误。

于 2009-04-02T09:29:56.617 回答
0

在运行还原之前尝试杀死要还原到的数据库中的所有用户,如果有任何活动连接到数据库,还原将失败。有如何从头到尾执行此操作的示例代码

还要确保从应用程序调用还原时使用的连接字符串不会连接到还原到的数据库,而是连接到 master 或 msdb 之类的东西。

于 2009-04-02T12:14:07.173 回答