Я некоторое время искал эту проблему и не могу найти решение, если ее нет.
Каждую неделю мы получаем новые базы данных от клиентов. Я разработал инструмент для восстановления наших собственных баз данных, чтобы все базы данных оставались вместе с клиентскими.
Инструмент работает для некоторых баз данных, но в других я получаю некоторые ошибки из-за файлов журнала.
Мой скрипт для восстановления базы данных следующий
USE [master]
ALTER DATABASE[MyDataBase] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE[MyDataBase]
FROM DISK = N'MyDataBase.bak'
WITH NOUNLOAD,
REPLACE, STATS = 5
ALTER DATABASE[MyDataBase] SET MULTI_USER
Я знаю, что если я использую команду MOVE, я смогу справиться со своей проблемой, дело в том, что у меня нет возможности узнать файлы заранее, то есть я не могу написать какой-либо специальный код для восстановления баз данных.
Углубившись немного глубже, я обнаружил, что могу распечатать все мои файлы журналов из базы данных с помощью следующей команды
SELECT
DB_NAME([database_id]) [database_name]
, [file_id]
, [type_desc] [file_type]
, [name] [logical_name]
, [physical_name]
FROM sys.[master_files]
WHERE [database_id] IN (DB_ID('MyDataBase'))
ORDER BY [type], DB_NAME([database_id]);
но файлы, представленные там, имеют совершенно отличные имена от тех, с которыми я получаю сообщение об ошибке.
Еще одна важная вещь, на которую следует обратить внимание: если я восстановлю базу данных, а затем попытаюсь восстановить через tsql, я смогу выполнить восстановление, но у меня есть задание агента сервера, которое переименовывает файлы, чтобы сохранить их в чистоте, и после запуска я невозможно восстановить базу данных снова, выдавая те же ошибки, что и перед восстановлением вручную.
Я понятия не имею, достижимо ли то, чего я пытаюсь достичь, и если да, то как этого достичь. Если бы кто-нибудь мог дать мне немного света, это было бы удивительно