Поскольку более одного человека вмешивались в базу данных, мы потеряли файлы журнала транзакций и, как следствие, потеряли базу данных. К счастью, у нас есть файл MDF, который остался совершенно неповрежденным, и мы не беспокоимся о потерянных транзакциях, поскольку это были только транзакции «удаления».
Я провел небольшое исследование и обнаружил, что команда sp_attach_single_file_db в значительной степени предназначена для этого, и сервер sql был отключен до того, как файл был удален. Я использовал эту команду:
EXEC sp_attach_single_file_db @dbname = 'RecoveredDatabase',
@PhysName = 'E:\SQL Data\AerationBasinsTrend_data.mdf'
Где RecoveredDatabase - моя новая база данных, а E: \ SQL DATA \ AerationBasinsTrend_Data.mdf - это физический файл .mdf. Я получаю сообщение об ошибке при запуске. Сервер сообщает об этом:
Сервер: Msg 1813, уровень 16, состояние 2, строка 1
Не удалось открыть новую базу данных RecoveredDatabase. CREATE DATABASE прервано.
Ошибка активации устройства. Физическое имя файла «E: \ SQL Data \ AerationBasinsTrend_Log.LDF» может быть неправильным.
Ошибка активации устройства. Физическое имя файла «C: \ SQL Backup \ TransLog» может быть неправильным.
Насколько мне известно, эта команда должна создать новый файл ldf, если старого нет. Что мне не хватает?
Вы можете попробовать:
Создайте новую базу данных с тем же именем и теми же файлами MDF и LDF.
Остановите sql server и переименуйте существующий MDF в новый, скопируйте исходный MDF в это место и удалите файлы LDF.
Запустить SQL Server
Теперь ваша база данных будет помечена как подозрительная
Обновите системные базы данных, чтобы перейти в аварийный режим. Это не будет использовать файлы журнала при запуске
Sp_configure "allow updates", 1
go
Reconfigure with override
GO
Update sysdatabases set status = 32768 where name = "BadDbName"
go
Sp_configure "allow updates", 0
go
Reconfigure with override
GO
Перезагрузите сервер sql. теперь база данных будет в аварийном режиме
Теперь выполните недокументированный DBCC, чтобы создать файл журнала.
DBCC REBUILD_LOG (dbname, 'c: \ dbname.ldf') - Недокументированный шаг для создания нового файла журнала.
(замените имя базы данных и имя файла журнала в соответствии с вашими требованиями)
Выполнить процедуру sp_resetstatus
Перезапустите SQL-сервер и убедитесь, что база данных находится в оперативном режиме.