Восстановление sql не стреляет - PullRequest
1 голос
/ 02 апреля 2009

Я пытаюсь восстановить базу данных из резервной копии динамически с кодом приложения

простая команда 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 из sql profiler, его работы

как вы можете объяснить эту проблему?

Ответы [ 3 ]

1 голос
/ 02 апреля 2009

Я полагаю, соединение, которое вы используете для блокировки базы данных, не может быть восстановлено. Когда вы запускаете его напрямую, вы этого не делаете.

А как насчет этого?

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'")

Или изменить базу данных в строке подключения?

0 голосов
/ 02 апреля 2009

Попробуйте убить всех пользователей в базе данных, в которую вы восстанавливаете, перед запуском восстановления, восстановление завершится неудачей, если будут какие-либо активные соединения с БД. Существует пример кода, как это сделать во всем.

Также убедитесь, что строка подключения, используемая при вызове восстановления из приложения, не подключается к базе данных, к которой вы восстанавливаете, а подключается к чему-то вроде master или msdb.

0 голосов
/ 02 апреля 2009

Для восстановления вы заблокированы, если база данных используется с другими сеансами. Убедитесь, что вы подождали целых 60 секунд и посмотрите, есть ли ошибки тайм-аута.

...