КАК ВОССТАНОВИТЬ БАЗУ ИЗ MDF И LOG ФАЙЛОВ? – Технологии – Базы данных
Восстановление базы MS SQL после удаления файла логов _log.ldf
Мы столкнулись с неприятной ситуацией когда «случайно» был удален файл логов базы данных MS SQL dbname_log.ldf. А работоспособность базы нужно восстанавливать, потому как актуальных резервных копий нет… Конечно не излишне будет повториться, что актуальные резервные копии важных баз, как впрочем и любой другой информации, должны быть всегда и лучше в избытке)
Первое, что было сделано — служба SQL Server была остановлена, и скопирован оставшийся файл данных базы.
После база была удалена и было испробовано приаттачить файл с данными к новой базе dbname без файла логов
На что была получена ошибка
Сообщение 5120, уровень 16, состояние 101, строка 1
Не удалось открыть физический файл «E:SQLLOGdbname_log.ldf». Ошибка операционной системы 32: «32(Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.)».
Сбой при активации файла. Возможно, физическое имя файла «E:SQLLOGdbname_log.ldf» неправильное.
Не удается перестроить журнал, поскольку во время завершения работы базы данных существовали открытые транзакции или подключенные пользователи, для базы данных отсутствуют контрольные точки либо она доступна только для чтения. Эта ошибка может возникать, если журнал транзакций был удален вручную или оказался потерян в результате сбоя оборудования или аварии.
Сообщение 1813, уровень 16, состояние 2, строка 1
Невозможно открыть новую базу данных «dbname». Операция CREATE DATABASE прервана.
Второе, что было сделано. Была создана новая, одноименная с удаленной, база данных dbname. Служба SQL Server была остановлена и вновь созданный с базой файл данных dbname.mdf был заменен на прежний. Служба сервера запущена.
Далее выполняем запрос
Видим длинный лог, который оканчивается
CHECKDB обнаружил 0 ошибок размещения и 0 ошибок согласованности в базе данных «dbname».
Выполнение DBCC завершено. Если DBCC выдает сообщения об ошибках, обратитесь к системному администратору.
То есть мы имеем работоспособную базу MS SQL. Далее было сделано следующее. Поскольку эта база являлась базой программы 1С, из самой 1С был выполнен экспорт «Выгрузить информационную базу…» который прошел успешно. SQL база была удалена, создана одноименная новая, подключена к 1С. В 1С был выполнен импорт через «Загрузить информационную базу…».
Завершающим шагом стала настройка регулярного резервного копирования.
More In DB
Установка Apache, php, mysql
Предварительно проверяем обновления # yum update Устанавливаем пакеты # yum install httpd mod_ssl php php-common php-gd php-mysql php-xml mysql mysql-server Конфигурируем на свой вкус /etc/httpd/conf/httpd.conf – настройки…read more →
Как установить, изменить, сбросить пароль root в MySQL
Очень часто, при работе с MySQL, нужно установить, сбросить или изменить пароль root. Для всех этих случаев нужно воспользоваться командой mysqladmin Установка пароля root Чтобы впервые…read more →
Создание дампа базы MySQL из командной строки
Очень часто, перед внесением каких либо изменений, требуется сделать резервную копию базы данных MySQL или просто перенести базу на другой сервер. Самый простой способ сделать…read more →
Как восстановить базу данных из MDF в SQL Server 2005?
У меня есть файл MDF и нет файлов LDF для базы данных, созданной в MS SQL Server 2005. Когда я пытаюсь прикрепить файл MDF к другому SQL Server, я получаю следующее сообщение об ошибке.
The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.
Я хотел бы выполнить один из следующих вариантов:
- прикрепите базу данных без потери данных (маловероятно, но сэкономит мне некоторое время).
- прикрепите базу данных с потерей данных (независимо от того, какие транзакции были открыты растеряться.)
- восстановить только схему (без данных) из файла MDF.
какие команды SQL я могу попытаться снова запустить свою базу данных?
8 ответов
Я нашел следующий документ о Эксперты Обмен.
patrikt: У вас будет потеря данных, но это можно сделать.
вот детали, которые охватывают части 2) и 3) в случае повторного создания журнала не работает, что может произойти, если файл MDF поврежден.
вы можете восстановить данные и структуру, только прочитав файл MDF с помощью стороннего инструмента, который может декодировать то, что написано как двоичные данные, но даже с такими инструментами вы не всегда можете выполнить эту работу полностью.
в таких случаях можно попробовать Восстановление ApexSQL. Из того, что я знаю, это единственный инструмент, который может выполнять такую работу но это довольно дорого.
гораздо лучше попытаться восстановить их из любых старых резервных копий, если они у вас есть.
из поста на форумах SQL Server прикреплять MDF без LDF:
Если вы хотите прикрепить MDF без LDF, то вы можете следовать шагами ниже Он протестирован и работает нормально
создайте новую базу данных с тем же именем и теми же файлами MDF и LDF
остановите sql server и переименуйте существующий MDF в новый, скопируйте исходный MDF в это место и удалите LDF файлы.
запустить SQL Server
теперь ваша база данных будет помечена как suspect 5. Обновление системной обновить в аварийный режим. Это не будет использовать файлы журнала в start up
перезапустите sql server. теперь база данных будет находиться в аварийном режиме
теперь выполните недокументированный DBCC для создания файла журнала
DBCC REBUILD_LOG(dbname,’c:dbname – . ldf’) — недокументированный шаг к создайте новый файл журнала.
(замените имя dbname и имя файла журнала на основе требования ur)
перезапустите SQL server и посмотрите, что база данных находится в сети.
обновление: DBCC REBUILD_LOG не существует SQL2005 и выше. Это должно сработать:
вы пытались игнорировать ldf и просто прикрепить mdf:
процедура sp_attach_single_file_db [ @значение dbname = ] ‘имя_бд’ , [ @physname = ] ‘параметр physical_name’
Я не знаю точно, что произойдет с вашими открытыми транзакциями (возможно, просто потеряно), но это может вернуть ваши данные в интернет.
просто у меня была эта проблема, но ни один из вышеперечисленных ответов не работал для меня.
но вместо этого я нашел это, которое сработало, и поэтому я подумал, что поделюсь этим для всех остальных:
нашел другой способ, который работает полностью:
- создайте новую базу данных с тем же именем в расположении базы данных по умолчанию.
- остановить SQL server.
- скопируйте старый файл mdf, чтобы перезаписать вновь созданный файл mdf и удалить новый файл ldf
- запустите SQL Server, база данных будет в аварийном режиме
- отсоединить базу данных аварийного режима
- скопируйте исходный файл ldf в расположение базы данных по умолчанию (где новый файл LDF как созданный и удалили в шаге 3 выше.
- прикрепите файл MDF базы данных.
Я получил рабочую базу данных после попытки всего вышеперечисленного, что не удалось для меня.
Я надеюсь, что это легко сделать так,
- открыть SQL Server
- Нажмите Кнопку Создать Запрос
выполните следующий запрос
sp_attach_single_file_db @dbname= ‘dbname’,@physname=’C:Databasedbname – . MDF’
здесь dbname – вы хотите показать в Обозревателе объектов, где @physname – это локальное расположение файла mdf.
надеюсь, это поможет кто-то, я сделал выше, получил как структуру, так и данные.
протестировано в Sql Server 2000 и 2008. В Sql Server 2000 он не работает, но отлично работает в 2008 году.
КАК ВОССТАНОВИТЬ БАЗУ ИЗ MDF И LOG ФАЙЛОВ? – Технологии – Базы данных
Вопрос
Ответы
ну тогда молитесь 🙂 т.к. документированного способа нет. но можно попробовать:
1) создать новую БД с именем вашей БД
2) подсунуть копию ldf-файла (именно копию. сам файл не загубите 🙂 )
3) в случаи успешного рестарта, снять бэкап лога
4) поднять ваш старый полный бэкап, попробовать накатить бэкап лога
ЗЫ: Все системные администраторы делятся на две категории: на тех кто не делает бэкапы и тех кто их уже делает
- Помечено в качестве ответа Руслан Абдрахимов 25 февраля 2014 г. 13:33
Все ответы
А файлы mdf(ndf) есть? Есть бэкап лога?
А каким образом у вас остался файл .ldf и при этом нет файла .mdf? Ведь БД может существовать только если есть, как минимум оба этих файла. Вы уверены, что этот файл вообще рабочий и от вашей БД?
ну тогда молитесь 🙂 т.к. документированного способа нет. но можно попробовать:
1) создать новую БД с именем вашей БД
2) подсунуть копию ldf-файла (именно копию. сам файл не загубите 🙂 )
3) в случаи успешного рестарта, снять бэкап лога
4) поднять ваш старый полный бэкап, попробовать накатить бэкап лога
ЗЫ: Все системные администраторы делятся на две категории: на тех кто не делает бэкапы и тех кто их уже делает
- Помечено в качестве ответа Руслан Абдрахимов 25 февраля 2014 г. 13:33
Лог получилось подменить, тока при создание бэкапа лога не удается создать