我尝试使用应用程序代码
动态地从备份恢复数据库用于恢复的简单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它的工作
你怎么解释这个问题?
答案 0 :(得分: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'")
或者更改连接字符串中的数据库?
答案 1 :(得分:0)
要执行还原,如果数据库与其他会话一起使用,则会阻止您。确保等待整整60秒,看看是否有任何超时错误。
答案 2 :(得分:0)
尝试在还原到数据库之前杀死数据库中的所有用户,如果存在与数据库的任何活动连接,则还原将失败。有关如何执行此操作的示例代码all over.
还要确保从应用程序调用还原时使用的连接字符串没有连接到还原到的数据库,而是连接到master或msdb等。