У меня в качестве тестовой среды стоит операционная система Windows 7. У меня установлен SQL Server EE с двумя экземплярами, названными test и production. Я сделал полную резервную копию базы данных AdventureWorks из тестового экземпляра и попытался восстановить его в производственном экземпляре:
RESTORE DATABASE [testikanta] FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\Backup\AdventureWorks.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
GO
Я получил сообщение об ошибке:
Msg 3634, Level 16, State 1, Line 1
The operating system returned the error '32(failed to retrieve text for this error. Reason: 15105)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\DATA\AdventureWorks_Data.mdf'.
Msg 3156, Level 16, State 8, Line 1
File 'AdventureWorks_Data' cannot be restored to 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\DATA\AdventureWorks_Data.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 3634, Level 16, State 1, Line 1
The operating system returned the error '32(failed to retrieve text for this error. Reason: 15105)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\DATA\AdventureWorks_Log.ldf'.
Msg 3156, Level 16, State 8, Line 1
File 'AdventureWorks_Log' cannot be restored to 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\DATA\AdventureWorks_Log.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 1
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Где проблема? Я запускаю эти экземпляры как администратор локального компьютера (службы SQL Server работают с той же учетной записью).
'32 (не удалось получить текст для этой ошибки. Причина: 15105) '
Основываясь на небольшом поиске, похоже, что SQL Server неправильно сообщает об ошибке ОС (Win32 API).
Ошибка 32: ERROR_SHARING_VIOLATION «Процесс не может получить доступ к файлу, потому что он используется другим процессом».
У чего-то еще есть файл, это может быть какое-то другое соединение или даже то, которое используется для восстановления, имеет открытый AdventureWorks.
В моем случае это было очень глупо. После многократной проверки я не понял, что начальная дата из SAS была неправильной «в будущем». В Мексике мы используем дд / мм / гггг, и проблема заключалась в том, что записанная дата была «мм / дд / гггг», а эта дата была в будущем. После обновления этой даты восстановление сработало.
В моей ситуации и .mdf, и .ldb были расположены в другом каталоге, чем каталог для восстановления. Так что также проверьте каталог.
Перейдите в C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQL2008TESTI \ MSSQL \ DATA \ Дайте вашему SQL Server разрешение на «запись» в эту папку. (например, большое разрешение на запись в СЕТЕВЫЕ УСЛУГИ)
У меня была точно такая же проблема. Изменение teh xxx.mdf на xxx2.mdf (и журнал) - то есть - просто изменение имени решило это. При восстановлении автоматически был удален файл xxx.mdf. Не знаю, что его держало в процессе ... Если вы действительно хотите, чтобы это был xxx.mdf, вы можете выполнить дополнительное восстановление, когда xxx2.mdf будет готов ... странно, но это работал без ошибок. так завершено -> с оригинальными именами xxx.mdf и xxx.ldf
восстановить базу данных ThedatebaseName
с диска = 'D: \ SQLbackup \ mybackup.bak'
С ПЕРЕМЕЩЕНИЕМ 'PhysicalName' К 'D: \ SQL \ xxx2.mdf',
ПЕРЕМЕСТИТЕ 'PhysicalName_log' В 'D: \ SQL \ xxx2.ldf',
ЗАМЕНИТЬ, СТАТИСТИКА
ИДТИ
Физическое имя - это то, которое вы видите, когда восстанавливаете вручную или используете:
восстановить только список файлов
с диска = 'D: \ SQLbackup \ mybackup.bak'
и он покажет имена. Удачи.