Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как пересоздать лог файл в MSSQL 2012?  [new]
Сергей84
Member

Откуда: Мурманск
Сообщений: 27465
есть база, но нет лог файла
никак не удается ее развернуть

при попытке create database for attach_rebuild_log или sp_attach_single_db
получаю ошибку, что поключить невозможно, т.к. была открыта транзакция и требуется файл журнала

DBCC REBUILD_LOG поменял синтаксис, на MSDN что-то про него никак не могу найти внятной статьи :(

базу подрубил путем подмены файла данных при остановке скула

но при попытке выполнить DBCC CHECKDB - получаю сообщение, что журнал не тот - проверка неудалась

в общем все упирается в журнал
подксажите плиз как быть
1 мар 13, 15:44    [13999721]     Ответить | Цитировать Сообщить модератору
 Re: как пересоздать лог файл в MSSQL 2012?  [new]
Сергей84
Member

Откуда: Мурманск
Сообщений: 27465
CREATE DATABASE optdev_dr ON
(FILENAME = 'd:\data\optdev_dr.mdf')
FOR ATTACH_REBUILD_LOG

Сбой при активации файла. Возможно, физическое имя файла "D:\data\OptDev_DR_1.LDF" неправильное.
Не удается перестроить журнал, поскольку во время завершения работы базы данных существовали открытые транзакции или подключенные пользователи, для базы данных отсутствуют контрольные точки либо она доступна только для чтения. Эта ошибка может возникать, если журнал транзакций был удален вручную или оказался потерян в результате сбоя оборудования или аварии.
Сообщение 1813, уровень 16, состояние 2, строка 3
Невозможно открыть новую базу данных "optdev_dr". Операция CREATE DATABASE прервана.

каталог D:\data\ доступен

почему не прокатывает - нипонятно ><"
1 мар 13, 16:38    [14000150]     Ответить | Цитировать Сообщить модератору
 Re: как пересоздать лог файл в MSSQL 2012?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ATTACH_REBUILD_LOG для 2012
1 мар 13, 16:39    [14000155]     Ответить | Цитировать Сообщить модератору
 Re: как пересоздать лог файл в MSSQL 2012?  [new]
Сергей84
Member

Откуда: Мурманск
Сообщений: 27465
если положить файл транзакций на место
CREATE DATABASE optdev_dr ON
(FILENAME = 'd:\data\optdev_dr.mdf')
FOR ATTACH_REBUILD_LOG

то получаем

Сообщение 1813, уровень 16, состояние 2, строка 3
Невозможно открыть новую базу данных "optdev_dr". Операция CREATE DATABASE прервана.
Сообщение 9004, уровень 21, состояние 1, строка 3
Произошла ошибка во время обработки журнала для базы данных "optdev_dr". Если возможно, восстановите из резервной копии. Если резервная копия недоступна, возможно, понадобится перестроить журнал.
1 мар 13, 16:41    [14000164]     Ответить | Цитировать Сообщить модератору
 Re: как пересоздать лог файл в MSSQL 2012?  [new]
Сергей84
Member

Откуда: Мурманск
Сообщений: 27465
чета какая-то ерунда непонятная
кому я указываю ATTACH_REBUILD_LOG не понятно, т.к. ошибки сервер выдает как будто его и нет
1 мар 13, 16:43    [14000174]     Ответить | Цитировать Сообщить модератору
 Re: как пересоздать лог файл в MSSQL 2012?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
нет 12 чтоб погонять под рукой ,НО
если вдруг есть бекап - то можно порбовать следуещее
стопаеш сервер
копируеш мдф
поднимаеш сервер
разворачиваеш бекап БД
стопаеш сервер
подменяеш мдф
пробуеш запустить сервер
может и будет тебе хотя бы емердженси мод
1 мар 13, 16:47    [14000189]     Ответить | Цитировать Сообщить модератору
 Re: как пересоздать лог файл в MSSQL 2012?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Сергей84
чета какая-то ерунда непонятная
кому я указываю ATTACH_REBUILD_LOG не понятно, т.к. ошибки сервер выдает как будто его и нет

Потому что (BOL -> CREATE DATABASE):
автор
FOR ATTACH_REBUILD_LOG requires the following:
  • A clean shutdown of the database.
  • All data files (MDF and NDF) must be available.

  • Раз у вас болтается открытая транзакция, ни о каком clean shutdown речи не идёт.
    1 мар 13, 16:49    [14000205]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104760
    Сергей84
    чета какая-то ерунда непонятная
    кому я указываю ATTACH_REBUILD_LOG не понятно, т.к. ошибки сервер выдает как будто его и нет

    BOL - CREATE DATABASE

    If the log files are available, the Database Engine will use those files instead of rebuilding the log files.
    1 мар 13, 16:54    [14000224]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Сергей84
    Member

    Откуда: Мурманск
    Сообщений: 27465
    Maxx,

    был бы бэкап - не было бы вопроса :)

    Гость333,
    тогда какие еще варианты можно попробывать?

    вроде сервер новее, а процедуры, что делались на 2008 легко и непринужденно теперь ставатяся непонятно зачем раком
    1 мар 13, 16:54    [14000225]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Сергей84
    Member

    Откуда: Мурманск
    Сообщений: 27465
    Glory
    Сергей84
    чета какая-то ерунда непонятная
    кому я указываю ATTACH_REBUILD_LOG не понятно, т.к. ошибки сервер выдает как будто его и нет

    BOL - CREATE DATABASE

    If the log files are available, the Database Engine will use those files instead of rebuilding the log files.

    читайте выше
    файл я переносил в другое место, чтобы он не был доступен - но это не помогло
    или как еще он должен быть недоступен?
    1 мар 13, 16:57    [14000235]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104760
    Сергей84
    Glory
    пропущено...

    BOL - CREATE DATABASE

    If the log files are available, the Database Engine will use those files instead of rebuilding the log files.

    читайте выше
    файл я переносил в другое место, чтобы он не был доступен - но это не помогло
    или как еще он должен быть недоступен?

    Я то как раз все читаю - "если положить файл транзакций на место"
    1 мар 13, 16:58    [14000239]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Сергей84
    Member

    Откуда: Мурманск
    Сообщений: 27465
    Glory
    Сергей84
    пропущено...

    читайте выше
    файл я переносил в другое место, чтобы он не был доступен - но это не помогло
    или как еще он должен быть недоступен?

    Я то как раз все читаю - "если положить файл транзакций на место"

    а до этого я написал, что без файла транзакций базу полдцеплять сервер не хочет
    1 мар 13, 18:38    [14000663]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104760
    Сергей84
    Glory
    пропущено...

    Я то как раз все читаю - "если положить файл транзакций на место"

    а до этого я написал, что без файла транзакций базу полдцеплять сервер не хочет

    Ну так там и сообщение об ошибке другое.
    Вы их читаете кстати ?
    1 мар 13, 18:50    [14000703]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Сергей84
    Member

    Откуда: Мурманск
    Сообщений: 27465
    в общем весь вопрос сводиться к тому
    как мне подключить БД и получить к ней доступ, чтобы можно было попробывать ее вылечить или выдернуть необходмые данные, если работа с БД была завершена аварийно и файл транзакций поврежден в 2000\2005\2008 MSSQL это было возможно, как это сделать в 2012?
    1 мар 13, 18:51    [14000705]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Сергей84
    Member

    Откуда: Мурманск
    Сообщений: 27465
    Glory
    Сергей84
    пропущено...

    а до этого я написал, что без файла транзакций базу полдцеплять сервер не хочет

    Ну так там и сообщение об ошибке другое.
    Вы их читаете кстати ?

    читал, и читал BOL по ним и гуглил и у яндекса спрашивал, но так и не нашел ответа на мой вопрос, который я озвучил постом выше
    1 мар 13, 18:53    [14000711]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Maxx
    Member [скрыт]

    Откуда:
    Сообщений: 24290
    создать пустую БД с таким же именем и потом подменить мдф ? Пробовали ?
    1 мар 13, 19:14    [14000810]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9279
    Сергей84
    если работа с БД была завершена аварийно и файл транзакций поврежден в 2000\2005\2008 MSSQL это было возможно, как это сделать в 2012
    Для перестроения журнала необходимо чистое завершение работы с БД, т.е. отсутствие активных транзакций и выполненный checkpoint. В противном случае БД находится в несогласованном состоянии. Это справедливо и для 2000\2005\2008, и для 2012.
    1 мар 13, 19:16    [14000817]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Сергей84
    Member

    Откуда: Мурманск
    Сообщений: 27465
    Maxx,

    конечно пробывал

    при попытке

    DBCC CHECKDB('optdev_sp', REPAIR_ALLOW_DATA_LOSS)

    Сообщение 5173, уровень 16, состояние 1, строка 1
    Один или несколько файлов не соответствуют основному файлу базы данных. Если предпринимается попытка присоединить базу данных, повторно выполните операцию с использованием правильных файлов. Если такая база данных существует, файл может быть поврежден и должен быть восстановлен из резервной копии.
    Файл журнала "D:\data\optdev_sp_1.ldf" не соответствует первичному файлу. Возможно, он принадлежит другой базе данных, либо этот журнал был ранее перестроен.
    Результаты DBCC для "optdev_sp".
    CHECKDB обнаружил 0 ошибок размещения и 0 ошибок согласованности в базе данных "optdev_sp".
    Сообщение 824, уровень 24, состояние 2, строка 1
    SQL Server обнаружил логическую ошибку ввода-вывода, связанную с согласованностью: неверный идентификатор страницы (ожидаемый 1:3190; фактический 17970:496910943). Она произошла при прочитать страницы (1:3190) в базе данных с идентификатором 5 по смещению 0x000000018ec000 файла "D:\data\optdev_sp.mdf". Дополнительные сведения см. в журнале ошибок SQL Server и журнале системных событий. Это серьезная ошибка, которая угрожает целостности базы данных и должна быть немедленно исправлена. Выполните полную проверку базы данных на согласованность (DBCC CHECKDB). Эта ошибка может быть вызвана многими причинами; дополнительные сведения см. в электронной документации по SQL Server.
    Сообщение 7909, уровень 20, состояние 1, строка 1
    Аварийное восстановление завершилось неудачно. Требуется восстановление из резервной копии.

    а инструкция
    DBCC REBUILD_LOG('optdev_sp','D:\data\optdev_sp_1.ldf')
    уже не поддерживается

    Сообщение 2526, уровень 16, состояние 3, строка 1
    Неправильная инструкция DBCC. Правильный синтаксис и список параметров DBCC см. в документации.

    вот и получается, с какой стороны не зайди, а как журнал ребулднуть непонятно
    1 мар 13, 20:16    [14000976]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Сергей84
    Member

    Откуда: Мурманск
    Сообщений: 27465
    invm
    Сергей84
    если работа с БД была завершена аварийно и файл транзакций поврежден в 2000\2005\2008 MSSQL это было возможно, как это сделать в 2012
    Для перестроения журнала необходимо чистое завершение работы с БД, т.е. отсутствие активных транзакций и выполненный checkpoint. В противном случае БД находится в несогласованном состоянии. Это справедливо и для 2000\2005\2008, и для 2012.

    в 2000\2005\2008 я мог запустить REBULD_LOG и пренебречь несогласованостью

    а что делать в 2012 - кроме как атачить с перестроением ничего не нашел
    1 мар 13, 20:18    [14000980]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9279
    Сергей84
    в 2000\2005\2008 я мог запустить REBULD_LOG и пренебречь несогласованостью
    Начиная с версии 2005 и выше DBCC REBUILD_LOG не поддерживается.

    http://ru.scribd.com/doc/12755951/SQL-Server-2008-Tips1
    When the database is in EMERGENCY mode and SINGLE_USER mode, and DBCC CHECKDB is run with the REPAIR_ALLOW_DATA_LOSS option, the following steps are taken:
    1. Force recovery to run on the transaction log (if it exists).This is essentially recovery with CONTINUE_AFTER_ERROR, in a similar vein to using CONTINUE_AFTER_ERROR with either BACKUPor RESTORE. The idea behind this is that the database is already inconsistent because either the transaction log is corrupt orsomething in the database is corrupt in such a way that recovery cannot complete.Given that the database is inconsistent and the transaction log is about to be rebuilt, it makes sense to salvage as muchtransactional information as possible from the log before it is discarded and a new one is created.This recovery with CONTINUE_AFTER_ERROR functionality is possible only from within DBCC CHECKDB.
    2. Rebuild the transaction log if it is corrupt.
    3. Run the full set of consistency checks on the database with the REPAIR_ALLOW_DATA_LOSS option.
    1 мар 13, 21:19    [14001187]     Ответить | Цитировать Сообщить модератору
    Между сообщениями интервал более 1 года.
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Stilet
    Member

    Откуда: УФА, БАШКОРТОСТАН
    Сообщений: 411
    Попал в подобную ситуацию. Нашел буржуйское решение, пока не проверил
    https://www.mssqltips.com/sqlservertip/3579/how-to-attach-a-sql-server-database-without-a-transaction-log-and-with-open-transactions/

    на всякий случай сама статья
    Модератор: вырезана. Ибо нефиг репостить стены текста, кому надо и по ссылке пройдут.


    Сообщение было отредактировано: 1 июл 17, 15:55
    1 июл 17, 13:09    [20605156]     Ответить | Цитировать Сообщить модератору
     Re: как пересоздать лог файл в MSSQL 2012?  [new]
    Stilet
    Member

    Откуда: УФА, БАШКОРТОСТАН
    Сообщений: 411
    Указанный ниже блок кода проверен для восстановления лог файла SQL 2014

    USE master
    GO

    DBCC TRACEON(3604)
    GO

    ALTER DATABASE TestDB_Repair SET EMERGENCY
    GO

    ALTER DATABASE TestDB_Repair SET SINGLE_USER
    GO

    DBCC CHECKDB('TestDB_Repair', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS
    GO

    ALTER DATABASE TestDB_Repair SET MULTI_USER
    GO
    2 июл 17, 08:04    [20606440]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить