Произошла ошибка во время обработки журнала данных для базы данных

Если восстановление журнала с CONTINUE_AFTER_ERROR (либо со STOP_ON_ERROR)

RESTORE LOG [ka]
    FROM DISK = N'D:Tail.bak'
    WITH FILE = 1, CONTINUE_AFTER_ERROR, NORECOVERY
GO

завершается с ошибкой, после которой невозможно выполнить

RESTORE DATABASE [ka]
    WITH RECOVERY
GO

то можно попытаться восстановиться до какого-то LSN в журнале (максимально возможного), при котором RESTORE LOG ещё не вызывает ошибок.

Для этого читаем заголовки бэкапов БД и журнала

RESTORE HEADERONLY FROM DISK = N'C:2016.Bak'
RESTORE HEADERONLY FROM DISK = N'D:Tail.bak'

в которых сверяем значения столбцов FirstLSN и LastLSN (убеждаемся, что цепочка LSN не разорвана, и в журнале действительно есть дополнительная информация).

Допустим, получили:

C:2016.Bak
FirstLSN          LastLSN          
----------------- -----------------
64000000005600195 64000000017600001

D:Tail.bak
FirstLSN          LastLSN          
----------------- -----------------
64000000005600195 66000000025600001

сравниваем LSN: 64000000005600195 <= 64000000017600001 < 66000000025600001 — OK.

Значение LastLSN из заголовка БД (равное 64000000017600001) переводим из десятичного представления в двоичное (см. здесь, функция fn_convertnumericlsntobinary), получаем 00000040:000000B0:0001.

Теперь с помощью sys.fn_dump_dblog читаем последовательность LSN из дампа лога (можно отфильтровать только операции завершения транзакций Operation = 'LOP_COMMIT_XACT'):

select [Current LSN]
from sys.fn_dump_dblog(
    NULL, NULL, N'DISK', 1, N'D:Tail.bak',
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default)
where Operation = 'LOP_COMMIT_XACT';

Допустим, получили, следующий список:

Current LSN
-----------------------
00000040:000000a0:0002
00000040:000000b8:0001   <-- сначала восстанавливаем журнал к этой отметке
00000040:000000c8:000b   <-- потом к этой
00000040:000000d0:000a   <-- ...
00000040:000000d8:000a   <-- ...
00000040:000000e0:000a   <-- ...
00000040:000000e8:000a   <-- ...
00000040:000000f0:000b   <-- ...
00000040:000000f8:0010   <-- ...
00000040:000000f8:0021   <-- и т.д, пока не встретим ошибку
00000040:000000f8:0027   <-- ERROR
00000040:00000110:0017
00000040:00000130:001b
00000040:00000130:001d
00000040:00000140:000a

Заново инициализируем восстановление:

RESTORE DATABASE [ka]
    FROM DISK = N'D:2016.bak'
    WITH NORECOVERY, REPLACE
GO

Теперь берём из списка первое значение LSN, которое следует позднее, чем LastLSN в бэкапе БД (позднее чем 00000040:000000B0:0001) и делаем RESTORE LOG к этой отметке:

RESTORE LOG [ka]
    FROM DISK = N'D:Tail.bak'
    WITH FILE = 1, STOPATMARK = 'lsn:0x00000040:000000b8:0001', NORECOVERY
GO

Если операция прошла без ошибок, повторяем то же самое для следующей отметки, и т.д., пока не дойдём до отметки, восстановление к которой будет вызывать ошибку.

Если отметок много, то можно применить дихотомический поиск, учитывая, однако, что при движении вперёд достаточно выполнять лишь RESTORE LOG к новой отметке, но если необходимо вернуться назад, то цепочку восстановления нужно выполнять заново (RESTORE DATABASE ... WITH REPLACE ..., затем RESTORE LOG ... к нужной отметке).

После того как последняя не вызвавшая ошибку отметка определена, заново восстановим БД и журнал до этой отметки:

RESTORE DATABASE [ka]
    FROM DISK = N'D:2016.bak'
    WITH NORECOVERY, REPLACE
GO
RESTORE LOG [ka]
    FROM DISK = N'D:Tail.bak'
    WITH STOPATMARK = 'lsn:0x00000040:000000f8:0021', NORECOVERY
GO

После чего завершаем восстановление:

RESTORE DATABASE [ka]
    WITH RECOVERY
GO

SQL Server 2012 Enterprise SQL Server 2008 R2 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2014 Developer SQL Server 2014 Enterprise SQL Server 2014 Standard Еще…Меньше

Проблемы

Рассмотрим следующий сценарий.

  • У вас есть Microsoft SQL Server доставки журналов или резервное копирование и восстановление настройки между двумя серверами.

  • База данных-источник содержит его файл журнала транзакций (.ldf) хранится на диске с «Байт на каждый физический сектор» по 512 байт.

  • Выполнить транзакции резервных копий журналов базы данных, а затем повторите его восстановления с помощью перехода в ждущий режим на базу данных-получатель.

  • База данных-получатель журнала транзакций (.ldf) находится на диске, который содержит «Байт на каждый физический сектор» по 4096 байт.

В этом случае операция восстановления завершается неудачей и возвращает следующее сообщение об ошибке:

Ошибка: 9004, уровень серьезности: 16, состояние: 6.
Произошла ошибка во время обработки журнала для базы данных, имя базы данных. Если возможно восстановите из резервной копии. Если резервная копия недоступна, возможно, понадобится перестроить журнал.

После появления этой ошибки, база данных-получатель переходит в состояние SUSPECT установлено.

Решение

Накопительное обновление

Сначала эта проблема была исправлена в следующем накопительном обновлении SQL Server:

  • Накопительное обновление 2 для SQL Server SP1 2014 г

  • Накопительное обновление 7 для SQL Server 2012 с пакетом обновления 2

Примечание. После установки этого обновления для активации этого исправления необходимо включить флаг трассировки 3057. Чтобы включить флаг трассировки 3057, приведены в разделе Флаги трассировки (Transact-SQL) на веб-узле Microsoft Developer Network (MSDN).

Примечание Для экземпляров SQL Server 2008 R2 с пакетом обновления 3 необходимо обновить сервер до последнего обновления безопасности доступны на:

Загрузите обновление безопасности для SQL Server 2008 R2 с пакетом обновления 3

Исправление для SQL Server 2008 R2 с пакетом обновления 2Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте данное исправление только в тех системах, которые имеют данную проблему. Если исправление доступно для скачивания, имеется раздел «Пакет исправлений доступен для скачивания» в верхней части этой статьи базы знаний. Если этого раздела нет, отправьте запрос в службу технической поддержки для получения исправления. Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание посетите следующий веб-узел корпорации Майкрософт:

http://support.microsoft.com/contactus/?ws=supportПримечание. В форме «Пакет исправлений доступен для скачивания» отображаются языки, для которых доступно исправление. Если нужный язык не отображается, значит исправление для данного языка отсутствует.

Обходное решение

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе «Относится к». Для решения этой проблемы воспользуйтесь одним из следующих возможных решений.

  • Перемещение файла журнала транзакций в месте назначения на диске с «Байт на каждый физический сектор» по 512 байт. Примечание. Резервный файл можно по-прежнему находиться на диске с «Байт на каждый физический сектор» по 4096 байт.

  • Восстановите резервные копии журнала без использования перехода в ждущий режим. Переключатель режима ОЖИДАНИЯ используйте параметр WITH NORECOVERY во время операции восстановления.

Дополнительная информация

Для определения значения «Байт на каждый физический сектор» можно использовать программы командной строки Fsutil . Если этот параметр не отображается в выходных данных, необходимо применить исправление, указанное в KB982018. Чтобы проверить тип диска, у вас, выполните следующие действия.

  1. В командной строке с повышенными привилегиями выполните следующую команду:Fsutil fsinfo ntfsinfo x : Примечание. В этой команде < x > представляет диск, на котором выполняется проверка.

  2. Позволяет определить тип диска, у вас есть значения «Байт на сектор» и «Байт на каждый физический сектор». Чтобы сделать это, воспользуйтесь следующей таблицей.

    Значение «Байт в секторе»

    Значение «Байт на физический сектор»

    Тип диска

    4096

    4096

    4K в машинном коде

    512

    4096

    Расширенный формат (также известный как 512E)

    512

    512

    машинный код 512 байт

Нужна дополнительная помощь?

Если восстановление журнала с CONTINUE_AFTER_ERROR (либо со STOP_ON_ERROR)

RESTORE LOG [ka]
    FROM DISK = N'D:Tail.bak'
    WITH FILE = 1, CONTINUE_AFTER_ERROR, NORECOVERY
GO

завершается с ошибкой, после которой невозможно выполнить

RESTORE DATABASE [ka]
    WITH RECOVERY
GO

то можно попытаться восстановиться до какого-то LSN в журнале (максимально возможного), при котором RESTORE LOG ещё не вызывает ошибок.

Для этого читаем заголовки бэкапов БД и журнала

RESTORE HEADERONLY FROM DISK = N'C:2016.Bak'
RESTORE HEADERONLY FROM DISK = N'D:Tail.bak'

в которых сверяем значения столбцов FirstLSN и LastLSN (убеждаемся, что цепочка LSN не разорвана, и в журнале действительно есть дополнительная информация).

Допустим, получили:

C:2016.Bak
FirstLSN          LastLSN          
----------------- -----------------
64000000005600195 64000000017600001

D:Tail.bak
FirstLSN          LastLSN          
----------------- -----------------
64000000005600195 66000000025600001

сравниваем LSN: 64000000005600195 <= 64000000017600001 < 66000000025600001 — OK.

Значение LastLSN из заголовка БД (равное 64000000017600001) переводим из десятичного представления в двоичное (см. здесь, функция fn_convertnumericlsntobinary), получаем 00000040:000000B0:0001.

Теперь с помощью sys.fn_dump_dblog читаем последовательность LSN из дампа лога (можно отфильтровать только операции завершения транзакций Operation = 'LOP_COMMIT_XACT'):

select [Current LSN]
from sys.fn_dump_dblog(
    NULL, NULL, N'DISK', 1, N'D:Tail.bak',
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default)
where Operation = 'LOP_COMMIT_XACT';

Допустим, получили, следующий список:

Current LSN
-----------------------
00000040:000000a0:0002
00000040:000000b8:0001   <-- сначала восстанавливаем журнал к этой отметке
00000040:000000c8:000b   <-- потом к этой
00000040:000000d0:000a   <-- ...
00000040:000000d8:000a   <-- ...
00000040:000000e0:000a   <-- ...
00000040:000000e8:000a   <-- ...
00000040:000000f0:000b   <-- ...
00000040:000000f8:0010   <-- ...
00000040:000000f8:0021   <-- и т.д, пока не встретим ошибку
00000040:000000f8:0027   <-- ERROR
00000040:00000110:0017
00000040:00000130:001b
00000040:00000130:001d
00000040:00000140:000a

Заново инициализируем восстановление:

RESTORE DATABASE [ka]
    FROM DISK = N'D:2016.bak'
    WITH NORECOVERY, REPLACE
GO

Теперь берём из списка первое значение LSN, которое следует позднее, чем LastLSN в бэкапе БД (позднее чем 00000040:000000B0:0001) и делаем RESTORE LOG к этой отметке:

RESTORE LOG [ka]
    FROM DISK = N'D:Tail.bak'
    WITH FILE = 1, STOPATMARK = 'lsn:0x00000040:000000b8:0001', NORECOVERY
GO

Если операция прошла без ошибок, повторяем то же самое для следующей отметки, и т.д., пока не дойдём до отметки, восстановление к которой будет вызывать ошибку.

Если отметок много, то можно применить дихотомический поиск, учитывая, однако, что при движении вперёд достаточно выполнять лишь RESTORE LOG к новой отметке, но если необходимо вернуться назад, то цепочку восстановления нужно выполнять заново (RESTORE DATABASE ... WITH REPLACE ..., затем RESTORE LOG ... к нужной отметке).

После того как последняя не вызвавшая ошибку отметка определена, заново восстановим БД и журнал до этой отметки:

RESTORE DATABASE [ka]
    FROM DISK = N'D:2016.bak'
    WITH NORECOVERY, REPLACE
GO
RESTORE LOG [ka]
    FROM DISK = N'D:Tail.bak'
    WITH STOPATMARK = 'lsn:0x00000040:000000f8:0021', NORECOVERY
GO

После чего завершаем восстановление:

RESTORE DATABASE [ka]
    WITH RECOVERY
GO

Если восстановление журнала с CONTINUE_AFTER_ERROR (либо со STOP_ON_ERROR)

RESTORE LOG [ka]
    FROM DISK = N'D:Tail.bak'
    WITH FILE = 1, CONTINUE_AFTER_ERROR, NORECOVERY
GO

завершается с ошибкой, после которой невозможно выполнить

RESTORE DATABASE [ka]
    WITH RECOVERY
GO

то можно попытаться восстановиться до какого-то LSN в журнале (максимально возможного), при котором RESTORE LOG ещё не вызывает ошибок.

Для этого читаем заголовки бэкапов БД и журнала

RESTORE HEADERONLY FROM DISK = N'C:2016.Bak'
RESTORE HEADERONLY FROM DISK = N'D:Tail.bak'

в которых сверяем значения столбцов FirstLSN и LastLSN (убеждаемся, что цепочка LSN не разорвана, и в журнале действительно есть дополнительная информация).

Допустим, получили:

C:2016.Bak
FirstLSN          LastLSN          
----------------- -----------------
64000000005600195 64000000017600001

D:Tail.bak
FirstLSN          LastLSN          
----------------- -----------------
64000000005600195 66000000025600001

сравниваем LSN: 64000000005600195 <= 64000000017600001 < 66000000025600001 — OK.

Значение LastLSN из заголовка БД (равное 64000000017600001) переводим из десятичного представления в двоичное (см. здесь, функция fn_convertnumericlsntobinary), получаем 00000040:000000B0:0001.

Теперь с помощью sys.fn_dump_dblog читаем последовательность LSN из дампа лога (можно отфильтровать только операции завершения транзакций Operation = 'LOP_COMMIT_XACT'):

select [Current LSN]
from sys.fn_dump_dblog(
    NULL, NULL, N'DISK', 1, N'D:Tail.bak',
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default,
    default, default, default, default, default, default, default)
where Operation = 'LOP_COMMIT_XACT';

Допустим, получили, следующий список:

Current LSN
-----------------------
00000040:000000a0:0002
00000040:000000b8:0001   <-- сначала восстанавливаем журнал к этой отметке
00000040:000000c8:000b   <-- потом к этой
00000040:000000d0:000a   <-- ...
00000040:000000d8:000a   <-- ...
00000040:000000e0:000a   <-- ...
00000040:000000e8:000a   <-- ...
00000040:000000f0:000b   <-- ...
00000040:000000f8:0010   <-- ...
00000040:000000f8:0021   <-- и т.д, пока не встретим ошибку
00000040:000000f8:0027   <-- ERROR
00000040:00000110:0017
00000040:00000130:001b
00000040:00000130:001d
00000040:00000140:000a

Заново инициализируем восстановление:

RESTORE DATABASE [ka]
    FROM DISK = N'D:2016.bak'
    WITH NORECOVERY, REPLACE
GO

Теперь берём из списка первое значение LSN, которое следует позднее, чем LastLSN в бэкапе БД (позднее чем 00000040:000000B0:0001) и делаем RESTORE LOG к этой отметке:

RESTORE LOG [ka]
    FROM DISK = N'D:Tail.bak'
    WITH FILE = 1, STOPATMARK = 'lsn:0x00000040:000000b8:0001', NORECOVERY
GO

Если операция прошла без ошибок, повторяем то же самое для следующей отметки, и т.д., пока не дойдём до отметки, восстановление к которой будет вызывать ошибку.

Если отметок много, то можно применить дихотомический поиск, учитывая, однако, что при движении вперёд достаточно выполнять лишь RESTORE LOG к новой отметке, но если необходимо вернуться назад, то цепочку восстановления нужно выполнять заново (RESTORE DATABASE ... WITH REPLACE ..., затем RESTORE LOG ... к нужной отметке).

После того как последняя не вызвавшая ошибку отметка определена, заново восстановим БД и журнал до этой отметки:

RESTORE DATABASE [ka]
    FROM DISK = N'D:2016.bak'
    WITH NORECOVERY, REPLACE
GO
RESTORE LOG [ka]
    FROM DISK = N'D:Tail.bak'
    WITH STOPATMARK = 'lsn:0x00000040:000000f8:0021', NORECOVERY
GO

После чего завершаем восстановление:

RESTORE DATABASE [ka]
    WITH RECOVERY
GO

  

BlackMak

06.07.10 — 12:50

Ночью на сервере заглючил контроллер RAID-массива. Массив RAID5 перешел в состояние Degraded. Сейчас массив восстановлен (вроде бы, проверка целостности еще продолжается). На массиве находятся несколько баз SQL. Все, кроме одной, пережили инцидент нормально. Проблемная база — исчезла из списка баз SQL Server. При попытке подключения получаем сообщение:

ЗАГОЛОВОК: Microsoft SQL Server Management Studio

——————————

Действие Присоединить базу данных завершилось неудачно для объекта «Сервер» «DBS».  (Microsoft.SqlServer.Smo)

——————————

ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ:

При выполнении инструкции или пакета Transact-SQL возникло исключение. (Microsoft.SqlServer.ConnectionInfo)

——————————

Невозможно повторить запись журнала (418450:16:1) для идентификатора транзакции (0:33735178) на странице (1:173131) базы данных «VM» (идентификатор базы данных — 7). Страница: номер LSN = (418447:559:243), тип = 2. Журнал: OpCode = 3, контекст 19, PrevPageLSN: (418449:1401:20). Восстановите базу данных из резервной копии или исправьте базу данных.

Произошла ошибка во время обработки журнала для базы данных «VM». Если возможно, восстановите из резервной копии. Если резервная копия недоступна, возможно, понадобится перестроить журнал.

Произошла ошибка во время обработки журнала для базы данных «VM». Если возможно, восстановите из резервной копии. Если резервная копия недоступна, возможно, понадобится перестроить журнал.

При повторном выполнении запротоколированной операции в базе данных «VM» произошла ошибка в записи журнала с идентификатором (418450:16:1). Как правило, конкретный сбой предварительно протоколируется как ошибка в журнале событий Windows. Восстановите базу данных из полной резервной копии или исправьте базу данных.

Произошла ошибка во время обработки журнала для базы данных «VM». Если возможно, восстановите из резервной копии. Если резервная копия недоступна, возможно, понадобится перестроить журнал.

Невозможно открыть новую базу данных «VM». Операция CREATE DATABASE прервана. (Microsoft SQL Server, ошибка: 3456)

Если из списка присоединяемых файлов удалить файл журнала (т.е., предложить SQL Server перестроить его), то получаем тоже самое сообщение сообщение. Если ручками перед этим удалить файл журнала — получаме сообщение «Файл не найден».

SQL Server 2005 SP2, проблемная база была в Simple.

Восстанавливаться из резервной копии очень не хочется — теряем день. Есть еще какие-то варианты потрепыхаться или все, база умерла?

  

BlackMak

1 — 06.07.10 — 13:02

ап

  

leshikkam

2 — 06.07.10 — 13:05

1) Сделайте копии файла базы данных и файла журнала транзакций;
2) Попробуйте подцепить базу без LDF:
http://www.sql.ru/faq/faq_topic.aspx?fid=123

  

Umka2008

3 — 06.07.10 — 13:07

Восстанавливаться из резервной копии очень не хочется — теряем день. Это почему?
Загружал 23 гб — минут 15

  

Любитель XML

4 — 06.07.10 — 13:09

(3) данные за день потеряны будут.

  

Любитель XML

5 — 06.07.10 — 13:09

+(4) архив то вчерашний

  

Lionee

6 — 06.07.10 — 13:12

или есть что то , или ваще нет , нечего страшного бухам делать нечегозанового набьют докию(5)

  

Это_mike

7 — 06.07.10 — 13:13

ПОхоже, гикнулся только ldf. присоединюсь к (2)

  

BlackMak

8 — 06.07.10 — 13:13

(2) — пробую.

(3) — см. 4.

(6) — еще раз, плиз.

  

Любитель XML

9 — 06.07.10 — 13:14

(8) отпишись о результатах

  

Это_mike

10 — 06.07.10 — 13:14

(6) хм. есть разные предприятия. На некоторых и тысячи документов в день бывают…

  

vde69

11 — 06.07.10 — 13:14

(0) есть спецы по востановление, если нужно напиши письмо вечером скину контакты.

  

BlackMak

12 — 06.07.10 — 13:19

(9) — ок.

(10) — тут случай попроще, но документов все равно много.

(11) — спасибо, но если все будет плохо — проще все же вчерашний бэкап поднять.

  

Злой Бобр

13 — 06.07.10 — 13:22

(0) Протелепартирую — рейд был на 3 дисках и диск Hot Spare конечно же непользовался. И база видимо была не Full а Simple.

Скупой платит дважды. Экономия на рейде никогда ничего хорошего недавала. Ну а поскольку база не Full — восстанавливайте из бекапа и набивайте день снова.

  

BlackMak

14 — 06.07.10 — 13:22

(13) — неверно телепатируете — массив был на 4-х дисках.

  

Ёпрст

15 — 06.07.10 — 13:25

(14) жесть.. и кто вам советовал 5 рейд на 4 дисках ?

  

BlackMak

16 — 06.07.10 — 13:26

(15) — дела давно минувших дней. Все руки не доходят в RAID10 его превратить.

  

Это_mike

17 — 06.07.10 — 13:31

А в момент падения что с базой творилось?

  

BlackMak

18 — 06.07.10 — 13:32

(17) — точно не скажу, но думаю, что к ней был подключен 1 пользователь из 1С:Предприятия. Работы не велись (скорее всего).

  

МихаилМ

19 — 06.07.10 — 14:22

если делали архив раз в сутки  — значит готовы пожертвовать сутками.

  

BlackMak

20 — 06.07.10 — 18:23

(2) — Большое. Человеческое. Спасибо. Будете в Краснодаре — налью Вам кружечку хорошего пива :-)

(9) — отписываюсь — рекомендации по ссылке в (2) помогли. База поднялась. При проверке были найдены несколько некритичных ошибок (у одного документа была нарушена нумерация табличной части, несколько документов были не зарегистрированы в журналах).

  

leshikkam

21 — 06.07.10 — 18:31

(20) Рад что смог помочь. Буду в ваших краях обязательно воспользуюсь предложением

  

Любитель XML

22 — 06.07.10 — 18:38

(20) рад что получилось. А вот ссылочку пожалуй сохраню ))

  

BlackMak

23 — 06.07.10 — 18:45

(22) — да, ссылочка неплоха. Судя по комментариям, она уже у многих вызвала слезы счастья.

  

SMAlik

24 — 06.07.10 — 18:55

  • Remove From My Forums
  • General discussion

  • I am using SQL-Server 2000 . when i try to attach the mdf file it gives error message Error 9004: an error occurred while processing the log for database . please help  me out..

All replies

  • Refer this url.

    http://social.msdn.microsoft.com/Forums/sqlserver/en-US/48cf82c9-2179-46f3-b009-11416a90d248/attach-database-failed-error-9004


    Srinivasan

  • Its a known issue …try below:

    Create an empty SQL server database with same name & layout.
    Now shutdown the services of SQL server.
    Move the database file into newly created empty database file that you want to attach.
    Start the SQL server database.
    Probably, your database will go in suspect mode.
    Now ALTER your database and set database in emergency mode.
    Run DBCC CHECKDB command on your database with and repair clause, It will give you a repair clause and again run DBCC CHECKDB with repair_allow_data_loss. You will probably loose some data or records of your SQL server database.


    Please click the Mark as answer button and vote as helpful if this reply solves your problem

  • Remove From My Forums
  • General discussion

  • I am using SQL-Server 2000 . when i try to attach the mdf file it gives error message Error 9004: an error occurred while processing the log for database . please help  me out..

All replies

  • Refer this url.

    http://social.msdn.microsoft.com/Forums/sqlserver/en-US/48cf82c9-2179-46f3-b009-11416a90d248/attach-database-failed-error-9004


    Srinivasan

  • Its a known issue …try below:

    Create an empty SQL server database with same name & layout.
    Now shutdown the services of SQL server.
    Move the database file into newly created empty database file that you want to attach.
    Start the SQL server database.
    Probably, your database will go in suspect mode.
    Now ALTER your database and set database in emergency mode.
    Run DBCC CHECKDB command on your database with and repair clause, It will give you a repair clause and again run DBCC CHECKDB with repair_allow_data_loss. You will probably loose some data or records of your SQL server database.


    Please click the Mark as answer button and vote as helpful if this reply solves your problem

Мы используем доставку журналов и RESTORE WITH STANDBYна SQL Server 2012, чтобы восстановить базу данных в режиме только для чтения для целей отчетности. Однако настройка доставки журналов не работает после восстановления одной или двух резервных копий журналов. Доставка журналов прерывается только тогда, когда она работает как RESTORE WITH STANDBY; RESTORE WITH NORECOVERYне вызывает никаких проблем.

Моя единственная интуиция в том, что первичная база данных не так динамична. Поэтому, когда нет транзакций, это может вызвать проблемы с RESTOREпроцессом, может быть?

Есть идеи, известные исправления?

Я работал в течение нескольких дней, выполняя обычную работу, которая выполняет тяжелое обновление для двух таблиц. Когда задание перестало выполняться, настройка доставки журналов быстро завершилась неудачно, не удалось обработать файл .trn. Я сбросил доставку журналов и попытался выяснить, будет ли он продолжать работать, просто выполнив небольшое обновление, изменив значение одного столбца одной записи в таблице, независимо от того, что это все-таки не удалось.

Спасибо за все ваши ответы.

PS: выдержка из нашего журнала

25.02.2013 13: 00: 00, LSRestore_DBDB01-A_BulldogDB, Выполняется, 1, DBREPORTS, LSRestore_DBDB01-A_BulldogDB, шаг задания журнала восстановления доставки журналов. ,, 2013-02-25 13: 00: 12.31 *** Ошибка: Не удалось применить файл резервной копии журнала ' dbsan01  DBBackups  LSBackup_BulldogDB  BulldogDB_20130225180000.trn' к вторичной базе данных "BulldogDB". (Microsoft.SqlServer.Management.LogShipping) ***
2013-02-25 13: 00: 12.31 *** Ошибка: произошла ошибка при обработке журнала для базы данных «BulldogDB». Если возможно восстановить из резервной копии. Если резервная копия недоступна, может потребоваться перестроить журнал.
Во время восстановления произошла ошибка, препятствующая перезапуску базы данных BulldogDB (8: 0). Диагностируйте ошибки восстановления и исправляйте их или восстанавливайте из заведомо исправной резервной копии. Если ошибки не исправлены или ожидаются, обратитесь в службу технической поддержки.
RESTORE LOG завершается ненормально.
Обработано 0 страниц для базы данных «BulldogDB», файла «BulldogDB» для файла 1.
Обработано 1 страниц для базы данных «BulldogDB», файла «BulldogDB_log» в файле 1. (. Net SqlClient Data Provider) ***
2013-02-25 13: 00: 12.32 *** Ошибка: не удалось записать историю / сообщение об ошибке. (Microsoft.SqlServer.Management.LogShipping) ***
2013-02-25 13: 00: 12.32 *** Ошибка: ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто. (System.Data) ***
2013-02-25 13: 00: 12.32 Пропуск файла резервной копии журнала ' dbsan01  DBBackups  LSBackup_BulldogDB  BulldogDB_20130225180000.trn' для вторичной базы данных BulldogDB, так как файл не может быть проверен.
2013-02-25 13: 00: 12.32 *** Ошибка: не удалось записать историю / сообщение об ошибке. (Microsoft.SqlServer.Management.LogShipping) ***
2013-02-25 13: 00: 12.32 *** Ошибка: ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто. (System.Data) ***
2013-02-25 13: 00: 12.33 *** Ошибка: при восстановлении режима доступа к базе данных произошла ошибка (Microsoft.SqlServer.Management.LogShipping) ***
2013-02-25 13: 00: 12.33 *** Ошибка: ExecuteScalar требует открытого и доступного соединения. Текущее состояние соединения закрыто. (System.Data) ***
2013-02-25 13: 00: 12.33 *** Ошибка: не удалось записать историю / сообщение об ошибке (Microsoft.SqlServer.Management.LogShipping) ***
2013-02-25 13: 00: 12.33 *** Ошибка: ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто. (System.Data) ***
2013-02-25 13: 00: 12.33 *** Ошибка: при восстановлении режима доступа к базе данных произошла ошибка (Microsoft.SqlServer.Management.LogShipping) ***
2013-02-25 13: 00: 12.33 *** Ошибка: ExecuteScalar требует открытого и доступного соединения. Текущее состояние соединения закрыто. (System.Data) ***
2013-02-25 13: 00: 12.33 *** Ошибка: не удалось записать историю / сообщение об ошибке (Microsoft.SqlServer.Management.LogShipping) ***
2013-02-25 13: 00: 12.33 *** Ошибка: ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто. (System.Data) ***
2013-02-25 13: 00: 12.33 Удаление старых файлов резервных копий журнала. Основная база данных: 'BulldogDB'
2013-02-25 13: 00: 12.33 *** Ошибка: не удалось записать историю / сообщение об ошибке (Microsoft.SqlServer.Management.LogShipping) ***
2013-02-25 13: 00: 12.33 *** Ошибка: ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто. (System.Data) ***, 00: 00: 12,0,0 ,,,, 0

Содержание:

1.       Журнал транзакций в 1С

2.       Ошибка Журнал транзакций переполнен  

1.    Журнал транзакций в 1С

В данной статье будет описана возможная ошибка в системе 1С, а именно – в СУБД, которая связана с переполнением журнала транзакций в 1С. Далее будут приведены возможные методы устранения данной неполадки, среди которых уменьшение журнала транзакций для базы данных.

Сначала следует выяснить, что такое журнал транзакций в 1С. Журнал транзакций является одной из основных составляющих в базе данных. При помощи журнала транзакций для базы данных создаётся резервная копия, которая в случае сбоя системы вернёт базу в нужное состояние, которое изначально было согласовано.

При помощи журнала транзакций можно выполнить такие действия:

1.     Восстановление транзакций;

2.     Восстановление транзакций, которые не были окончены;

3.     Поддерживать повторения транзакций;

4.     Производить восстановление базы данных, из-за системного сбоя.  


2.    Ошибка Журнал транзакций переполнен

В СУБД 1С может появляться ошибка, которая содержит следующий текст: «Журнал транзакций для базы данных «zup» заполнен». Также, в тексте ошибки может приводиться столбец и таблица, к которым следует обратиться.

Такая ошибка возникает в тех случаях, когда в журнале транзакций находится слишком много данных, то есть, он переполнен.

Рассмотрим два возможных способа для устранения ошибки «Журнал транзакций для базы данных переполнен»:

·        В первом способе будем следовать такому алгоритму:

1.     Проверить наличие и величину свободного места на дисках, в случае, когда места нет – соответственно, нет места и для записи лога;

2.     Если место есть, то ошибка «Журнал транзакций для базы переполнен» является ошибкой MicrosoftSQLServer, то есть – лог с транзакциями был полностью заполнен, но не очищен. Это можно исправить при помощи очистки, которая является стандартной, но эта опция не всегда может помочь устранить неполадку. В случае, если она не сработала – стоит использовать следующий код SQLServer:

код SQLServer

В данном коде: 20 – это величина лога в Мб, а «myDataBase» — название нужной базы с данными.

·        Следующий способ – это сразу приступить к уменьшению размера журнала с транзакциями.

Так как с журналом транзакций в SQLServer часто проводится много довольно весомых манипуляций, которые связаны с модификацией данных в СУБД, то такие действия приводят к увеличению размеров файловых данных внутри журнала с транзакциями. В данном случае очень важно вовремя удалять не нужные записи из журнала транзакций SQL, в связи с созданием более актуальных. Если не проводить удаления вовремя, то прошлые файлы в журнале транзакций начинают заполнять всё место на диске и далее станет невозможно работать с СУБД.

Так что, в своём роде, данный способ – это предотвращение ошибки «Журнал транзакций переполнен» в 1С.

В таком случае, удаляем те записи, которые больше не нужны, при помощи команды «BACKUPLOG», следующий шаг – это сделать меньше файл из журнала транзакций MSSQL– при помощи команды «DBCCSHRINKFILE». Таким образом, нужный нам код, для предотвращения ошибки, будет выглядеть таким образом:

Предотвращение ошибки Журнал транзакций переполнен

В данной статье были приведены общие данные о том, что такое журнал транзакций, а также проведена диагностика ошибки «Журнал транзакций переполнен» в 1С. Далее было описано, как устранить данную ошибку и дан способ для предотвращения данной неполадки.

Специалист компании «Кодерлайн»

Айдар Фархутдинов

SQL Server 2008 полная обработка журнала транзакций

  • Описание ошибки
  • Причина ошибки
    • Введение в журналы транзакций
    • Устранить неполадки журнала полны
  • Решения
    • Способ 1: сжать логи в режиме интерфейса
      • Шаг первый: Настройте модель восстановления
      • Шаг 2: Уменьшите файл журнала
        • Описание варианта
      • Шаг 3: Настройте режим восстановления
    • Способ второй: сжать журнал из командной строки
  • Смотрите также

Описание ошибки

Описание ошибки: журнал транзакций базы данных заполнен. Чтобы выяснить, почему пространство в журнале нельзя использовать повторно, см. Столбец log_reuse_wait_desc в sys.databases.

Причина ошибки

Введение в журналы транзакций

Официальная документация имеет следующие инструкции:

Особенности журнала транзакций ядра СУБД SQL Server:
Журнал транзакций реализован в виде отдельного файла или группы файлов в базе данных. Кэш журналов управляется отдельно от буферного кэша страниц данных, поэтому простой, быстрый и мощный код может быть сгенерирован в ядре базы данных SQL Server. Для получения дополнительной информации см. Физическая архитектура журнала транзакций.
Формат записей журнала и страниц не обязательно должен соответствовать формату страницы данных.
Журнал транзакций может быть реализован в нескольких файлах. Эти файлы могут быть определены для автоматического расширения путем установки значения FILEGROWTH журнала. Это уменьшает вероятность нехватки места в журнале транзакций и снижает административные издержки. Для получения дополнительной информации см. Параметры файла ALTER DATABASE (Transact-SQL) и файловой группы.
Механизм повторного использования пространства в файлах журналов быстр и оказывает минимальное влияние на пропускную способность транзакций.

Усечение журнала освобождает место в файле журнала для повторного использования журналом транзакций. Журнал транзакций должен периодически обрезаться, чтобы предотвратить выделение выделенного пространства. Несколько факторов могут задержать усечение журнала, поэтому важно следить за размером журнала. Некоторые операции могут быть записаны с минимальным количеством журналов, чтобы уменьшить их влияние на размер журнала транзакций.
Усечение журнала удаляет неактивные файлы виртуального журнала (VLF) из журнала логических транзакций базы данных SQL Server, освобождая пространство в логическом журнале, чтобы журнал физических транзакций мог повторно использовать это пространство. Если журнал транзакций никогда не усекается, он в конечном итоге заполнит все дисковое пространство, выделенное для физического файла журнала.
Чтобы избежать нехватки места, если усечение журнала по какой-либо причине не отложено, оно будет усечено автоматически после следующих событий:
В простом режиме восстановления происходит после контрольной точки.
В режиме полного восстановления или в режиме массового восстановления журнала, если с момента последнего резервного копирования была создана контрольная точка, усечение выполняется после резервного копирования журнала (если только это не резервная копия только для журнала).

Усечение журнала не уменьшает размер физического файла журнала. Чтобы уменьшить физический размер физического файла журнала, необходимо сжать файл журнала. Информацию об уменьшении размера файлов физического журнала смотрите в разделе Управление размером файлов журнала транзакций. Однако имейте в виду факторы, которые могут задержать усечение журнала. Если после сжатия журнала требуется место для хранения, журнал транзакций будет снова увеличен, что приведет к снижению производительности во время операции увеличения журнала.

Когда записи журнала активны в течение длительного времени, усечение журнала транзакций задерживается, и журнал транзакций может заполниться.
На самом деле усечение журнала может быть отложено по ряду причин. Запросите столбцы log_reuse_wait и log_reuse_wait_desc в представлении каталога sys.databases, чтобы увидеть, какие факторы, если таковые имеются, препятствуют усечению журнала. В следующей таблице описаны значения этих столбцов.

значение log_reuse_wait значение log_reuse_wait_desc описание
0 NOTHING В настоящее время существует один или несколько повторно используемых файлов виртуальных журналов (VLF).
1 CHECKPOINT Контрольные точки не были созданы с момента последнего усечения журнала, или заголовок журнала не был перемещен в файл виртуального журнала (VLF). (Все модели восстановления) Это частая причина задержек усечения журнала. Для получения дополнительной информации см. Контрольная точка базы данных (SQL Server).
2 LOG_BACKUP Перед усечением журнала транзакций требуется резервная копия журнала. (Только модель полного восстановления или модель массового восстановления) После завершения резервного копирования следующего журнала некоторое пространство журнала может быть использовано повторно.
3 ACTIVE_BACKUP_OR_RESTORE Выполняется резервное копирование или восстановление данных (все модели восстановления). Если резервные копии данных препятствуют усечению журнала, отмена операции резервного копирования может помочь решить проблему, непосредственно вызванную резервным копированием.
4 ACTIVE_TRANSACTION Транзакция активна (все модели восстановления): в начале резервного копирования журнала может существовать длительная транзакция. В этом случае может потребоваться другая резервная копия журнала, чтобы освободить место. Обратите внимание, что длительные транзакции предотвратят усечение журналов во всех моделях восстановления, включая простую модель восстановления, где журналы транзакций обычно усекаются на каждой автоматической контрольной точке. Отложенные транзакции. «Отложенная транзакция» является допустимой активной транзакцией, поскольку некоторые ресурсы недоступны и ее откат заблокирован. Сведения о том, что вызывает задержки транзакций и как вывести их из отложенного состояния, см. В разделе Отложенные транзакции (SQL Server). Длительные транзакции могут также заполнять журнал транзакций tempdb. Tempdb неявно используется пользовательскими транзакциями для внутренних объектов, таких как рабочие таблицы для сортировки, рабочие файлы для хеширования, рабочие таблицы курсоров и управление версиями строк. Даже если пользовательская транзакция включает только чтение данных (запросы SELECT), внутренние объекты могут создаваться и использоваться в имени пользовательской транзакции, а затем заполняется журнал транзакций tempdb.
5 DATABASE_MIRRORING Зеркальное отображение базы данных приостановлено, или в высокопроизводительном режиме зеркальная база данных значительно отстает от основной базы данных. (Только модель полного восстановления). Дополнительные сведения см. В разделе Зеркалирование базы данных (SQL Server).
6 REPLICATION Во время репликации транзакций связанные с публикацией транзакции еще не были переданы в базу данных распространителя. (Только модель полного восстановления). Сведения о репликации транзакций см. В разделе Репликация SQL Server.
7 DATABASE_SNAPSHOT_CREATION Создание снимка базы данных. (Все модели восстановления) Это частая причина задержек усечения журнала, и часто она является основной причиной.
8 LOG_SCAN Произошло сканирование журнала. (Все модели восстановления) Это частая причина задержек усечения журнала, и часто она является основной причиной.
9 AVAILABILITY_REPLICA Вторичная копия группы доступности применяет ведение журнала транзакций для этой базы данных к соответствующей вторичной базе данных. (Модель полного восстановления) Дополнительные сведения см. В разделе: Обзор группы доступности AlwaysOn (SQL Server).
10 Только для внутреннего использования
11 Только для внутреннего использования
12 Только для внутреннего использования
13 OLDEST_PAGE Если база данных настроена на использование косвенных контрольных точек, самые ранние страницы в базе данных могут быть раньше, чем порядковый номер журнала контрольных точек (LSN). В этом случае самая ранняя страница может задержать усечение журнала. (Все модели восстановления). Сведения о косвенных контрольных точках см. В разделе Контрольные точки базы данных (SQL Server).
14 OTHER_TRANSIENT Это значение в настоящее время не используется.

Устранить неполадки журнала полны

Официальная документация:Разрешение полного журнала транзакций (ошибка SQL Server 9002)

Решения

В SQL 2008 очистка журнала должна выполняться в простом режиме, а после завершения операции очистки она переводится обратно в полный режим (в противном случае база данных не поддерживает резервное копирование на определенный момент времени)

- Просмотр статуса файла журнала
 use dbname
 dbcc shrinkfile('logname')  --like  XXXX_log

Способ 1: сжать логи в режиме интерфейса

Шаг первый: Настройте модель восстановления

Выберите База данных-Свойства-Параметры-Режим восстановления-Простой выбор

В режиме полного восстановления все массовые операции полностью записываются. Однако вы можете свести к минимуму записи журнала для набора массовых операций, временно переключив базу данных на модель восстановления массового журнала для массовых операций. Минимальное ведение журнала более эффективно, чем полное ведение журнала, и уменьшает вероятность крупномасштабных массовых операций, заполняющих доступное пространство журнала транзакций во время массовых транзакций. Однако, если база данных повреждена или потеряна во время минимального ведения журнала, ее невозможно восстановить до точки сбоя.

Шаг 2: Уменьшите файл журнала

Выберите файл базы данных задач

Описание варианта

«База данных»
отображает имя выбранной базы данных.

Тип файла
Выберите тип файла для файла. Доступные опции включают файлы данных и журналов. Опция по умолчанию — Данные. Выберите другой тип файловой группы, и параметры в других полях изменятся соответственно.

Файловая группа
Выберите файловую группу в списке файловых групп, связанных с выбранным выше «типом файла». Выберите другую группу файлов, и параметры в других полях изменятся соответственно.

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

расположение
отображает полный путь к выбранному в данный момент файлу. Этот путь не может быть отредактирован, но может быть скопирован в буфер обмена.

В настоящее время выделено пространство
Для файлов данных отображается текущее выделенное пространство. Для файлов журнала отображается выделенное в настоящее время пространство, рассчитанное на основе вывода DBCC SQLPERF (LOGSPACE).

Свободное пространство
Для файлов данных отображается текущее свободное пространство, рассчитанное на основе вывода SHOWFILESTATS (fileid). Для файлов журнала отображается текущее свободное пространство, рассчитанное на основе выходных данных DBCC SQLPERF (LOGSPACE).

Освободить неиспользуемое пространство
Освобождает неиспользуемое пространство в любом файле для операционной системы и сжимает файл до последней выделенной области, поэтому вы можете уменьшить размер файла без перемещения каких-либо данных. Строки не перемещаются на нераспределенные страницы.

Реорганизовать страницы перед освобождением неиспользуемого пространства
эквивалентно выполнению DBCC SHRINKFILE, который определяет размер целевого файла. Если выбран этот параметр, пользователь должен указать размер файла назначения в поле «Сжать файл в».

«Сжать файл до»
Укажите размер файла назначения для операции сжатия. Это значение размера не должно быть меньше текущего выделенного пространства или больше размера всего экстента, выделенного для файла. Если введенное значение превышает минимальное или максимальное значение, оно вернется к минимальному или максимальному значению после изменения фокуса или нажатия кнопки на панели инструментов.

Очистите файлы, перенеся данные в другие файлы в той же файловой группе
Перенос всех данных из указанного файла. Эта опция позволяет удалять файлы с помощью оператора ALTER DATABASE. Эта опция эквивалентна выполнению DBCC SHRINKFILE с опцией EMPTYFILE.

Шаг 3: Настройте режим восстановления

Выберите База данных-Свойства-Параметры-Режим восстановления-Простой выбор

Способ второй: сжать журнал из командной строки

Этот метод не практичен

USE [master]
	GO 
	ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
	GO
	ALTER DATABASE DNName SET RECOVERY SIMPLE- простой режим
	GO
	USE DNName
	GO
	DBCC SHRINKFILE(N'DNName_Log',11,TRUNCATEONLY)
	GO
	USE [master]
	GO
	ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
	GO
	ALTER DATABASE DNName SET RECOVERY FULL- вернуться в полный режим
	GO

Смотрите также

Руководство по архитектуре и управлению журналом транзакций SQL Server
Управление размером файлов журнала транзакций
Журнал транзакций
Сжать файл
Исследование в файлах виртуального журнала SQL Server
Sql2008r2 файл журнала проблем сокращения базы данных не становится меньше

   BlackMak

06.07.10 — 12:50

Ночью на сервере заглючил контроллер RAID-массива. Массив RAID5 перешел в состояние Degraded. Сейчас массив восстановлен (вроде бы, проверка целостности еще продолжается). На массиве находятся несколько баз SQL. Все, кроме одной, пережили инцидент нормально. Проблемная база — исчезла из списка баз SQL Server. При попытке подключения получаем сообщение:

ЗАГОЛОВОК: Microsoft SQL Server Management Studio

——————————

Действие Присоединить базу данных завершилось неудачно для объекта «Сервер» «DBS».  (Microsoft.SqlServer.Smo)

——————————

ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ:

При выполнении инструкции или пакета Transact-SQL возникло исключение. (Microsoft.SqlServer.ConnectionInfo)

——————————

Невозможно повторить запись журнала (418450:16:1) для идентификатора транзакции (0:33735178) на странице (1:173131) базы данных «VM» (идентификатор базы данных — 7). Страница: номер LSN = (418447:559:243), тип = 2. Журнал: OpCode = 3, контекст 19, PrevPageLSN: (418449:1401:20). Восстановите базу данных из резервной копии или исправьте базу данных.

Произошла ошибка во время обработки журнала для базы данных «VM». Если возможно, восстановите из резервной копии. Если резервная копия недоступна, возможно, понадобится перестроить журнал.

Произошла ошибка во время обработки журнала для базы данных «VM». Если возможно, восстановите из резервной копии. Если резервная копия недоступна, возможно, понадобится перестроить журнал.

При повторном выполнении запротоколированной операции в базе данных «VM» произошла ошибка в записи журнала с идентификатором (418450:16:1). Как правило, конкретный сбой предварительно протоколируется как ошибка в журнале событий Windows. Восстановите базу данных из полной резервной копии или исправьте базу данных.

Произошла ошибка во время обработки журнала для базы данных «VM». Если возможно, восстановите из резервной копии. Если резервная копия недоступна, возможно, понадобится перестроить журнал.

Невозможно открыть новую базу данных «VM». Операция CREATE DATABASE прервана. (Microsoft SQL Server, ошибка: 3456)

Если из списка присоединяемых файлов удалить файл журнала (т.е., предложить SQL Server перестроить его), то получаем тоже самое сообщение сообщение. Если ручками перед этим удалить файл журнала — получаме сообщение «Файл не найден».

SQL Server 2005 SP2, проблемная база была в Simple.

Восстанавливаться из резервной копии очень не хочется — теряем день. Есть еще какие-то варианты потрепыхаться или все, база умерла?

   BlackMak

1 — 06.07.10 — 13:02

ап

   leshikkam

2 — 06.07.10 — 13:05

1) Сделайте копии файла базы данных и файла журнала транзакций;
2) Попробуйте подцепить базу без LDF:
http://www.sql.ru/faq/faq_topic.aspx?fid=123

   Umka2008

3 — 06.07.10 — 13:07

Восстанавливаться из резервной копии очень не хочется — теряем день. Это почему?
Загружал 23 гб — минут 15

   Любитель XML

4 — 06.07.10 — 13:09

(3) данные за день потеряны будут.

   Любитель XML

5 — 06.07.10 — 13:09

+(4) архив то вчерашний

   Lionee

6 — 06.07.10 — 13:12

или есть что то , или ваще нет , нечего страшного бухам делать нечегозанового набьют докию(5)

   Это_mike

7 — 06.07.10 — 13:13

ПОхоже, гикнулся только ldf. присоединюсь к (2)

   BlackMak

8 — 06.07.10 — 13:13

(2) — пробую.

(3) — см. 4.

(6) — еще раз, плиз.

   Любитель XML

9 — 06.07.10 — 13:14

(8) отпишись о результатах

   Это_mike

10 — 06.07.10 — 13:14

(6) хм. есть разные предприятия. На некоторых и тысячи документов в день бывают…

   vde69

11 — 06.07.10 — 13:14

(0) есть спецы по востановление, если нужно напиши письмо вечером скину контакты.

   BlackMak

12 — 06.07.10 — 13:19

(9) — ок.

(10) — тут случай попроще, но документов все равно много.

(11) — спасибо, но если все будет плохо — проще все же вчерашний бэкап поднять.

   Злой Бобр

13 — 06.07.10 — 13:22

(0) Протелепартирую — рейд был на 3 дисках и диск Hot Spare конечно же непользовался. И база видимо была не Full а Simple.

Скупой платит дважды. Экономия на рейде никогда ничего хорошего недавала. Ну а поскольку база не Full — восстанавливайте из бекапа и набивайте день снова.

   BlackMak

14 — 06.07.10 — 13:22

(13) — неверно телепатируете — массив был на 4-х дисках.

   Ёпрст

15 — 06.07.10 — 13:25

(14) жесть.. и кто вам советовал 5 рейд на 4 дисках ?

   BlackMak

16 — 06.07.10 — 13:26

(15) — дела давно минувших дней. Все руки не доходят в RAID10 его превратить.

   Это_mike

17 — 06.07.10 — 13:31

А в момент падения что с базой творилось?

   BlackMak

18 — 06.07.10 — 13:32

(17) — точно не скажу, но думаю, что к ней был подключен 1 пользователь из 1С:Предприятия. Работы не велись (скорее всего).

   МихаилМ

19 — 06.07.10 — 14:22

если делали архив раз в сутки  — значит готовы пожертвовать сутками.

   BlackMak

20 — 06.07.10 — 18:23

(2) — Большое. Человеческое. Спасибо. Будете в Краснодаре — налью Вам кружечку хорошего пива :-)

(9) — отписываюсь — рекомендации по ссылке в (2) помогли. База поднялась. При проверке были найдены несколько некритичных ошибок (у одного документа была нарушена нумерация табличной части, несколько документов были не зарегистрированы в журналах).

   leshikkam

21 — 06.07.10 — 18:31

(20) Рад что смог помочь. Буду в ваших краях обязательно воспользуюсь предложением

   Любитель XML

22 — 06.07.10 — 18:38

(20) рад что получилось. А вот ссылочку пожалуй сохраню ))

   BlackMak

23 — 06.07.10 — 18:45

(22) — да, ссылочка неплоха. Судя по комментариям, она уже у многих вызвала слезы счастья.

  

SMAlik

24 — 06.07.10 — 18:55

I am trying to set up a database for development purposes on my PC’s local SQL Server Developer Edition 12.0.2000.8. I’ve got a full database backup and separate transaction-log-only backup files available which were sent to me over the network.

When trying to restore from full backup, after some time (~1 hour maybe, the database is ~270 GB in size), I’m getting an error :

System.Data.SqlClient.SqlError: An error occurred while processing the
log for database ‘database name’. If possible, restore from backup.
If a backup is not available, it might be necessary to rebuild the
log. (Microsoft.SqlServer.SmoExtended)

After this, the db is in ‘Restoring..’ state.

I wanted to run something like (got it from this question)

ALTER DATABASE recovery_test_2 SET EMERGENCY;
ALTER DATABASE recovery_test_2 SET SINGLE_USER;

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;

against it, but naturally I can’t as the database is in ‘Restoring..» state.
Restarting the restore process on it leads to the same error message, dropping and restoring again didn’t help too.

How do I get the db up and working? Transactional consistency doesn’t matter to me.

The SSMS auto-generated restore script :

  USE [master]
  RESTORE DATABASE [database_name] FROM  DISK = N'D:database_name.bak' WITH  FILE = 1,
  MOVE N'database_name' TO N'D:MSSQLMSSQL12.MSSQLSERVERMSSQLDATAdatabase_name.mdf',
  MOVE N'database_name_index' TO N'D:MSSQLMSSQL12.MSSQLSERVERMSSQLDATAdatabase_name_index.ndf',
  MOVE N'database_name_log' TO N'D:MSSQLMSSQL12.MSSQLSERVERMSSQLDATAdatabase_name_log.ldf',
  NOUNLOAD,
  STATS = 5

  GO

The result of query suggested by @Craig Efrein

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.

               

Дополнительные базы данных не удалось с сервером «MyDB». (Microsoft.sqlserver.smo)

Исключение произошло во время оператора Transact-SQL или пакета. (Microsoft.sqlserver.connectionInfo)

Произошла ошибка при обработке журнала журнала «MyDB». Если возможно, восстановите из резервного копирования. Если нет доступной резервной копии, вам может потребоваться восстановить журнал.

Невозможно открыть новую базу данных mydb ‘. Создать базу данных прервана. (Microsoft SQL Server, ошибка: 9004)

Причина ошибки:

В файле базы данных база данных существует ненормальная ситуация, которая может быть вызвана плохим районом жесткого диска.

Решение:

Предположим, что имя базы данных: MYDB

Пожалуйста, выполните следующие шаги в порядке:

1. Переименуйте имя файла: mydb.mdf базы данных mydb_1.mdf;

2, новая база данных: MYDB;

3. Выключите службу SQL Server;

4, удалить mydb.mdb и будетMydb_1.mdf переименованMyDB.mdf;

5, запускSQL Server Service;

6, сделайте следующий код:

alter database MyDB set EMERGENCYGoalter database MyDB set single_user with rollback IMMEDIATEGouse masterGoalter database MyDB Rebuild Log on (name = MyDB_log, filename = 'K:DataBaseMyDB_log.ldf')alTER database MyDB set Multi_USER

Если следующие подсказки говорят, что есть файл журнала, найдите файл журнала mydb_log.ldf и удалить его, а затем повторно выполнить шаг 6

Сообщение 5025, уровень 16, штат 1, линия 2
Файл ‘k: База данных mydb_log.ldf уже существует. Он должен быть переименован или удалить его, чтобы вы могли создать новый файл журнала.
Сообщение 5028, Уровень 16, Состояние 2, Цепочка 2
Система не может активировать достаточно баз данных, чтобы восстановить журнал.


7, сделайте следующий код:

ALTER database MyDB set single_user with rollback IMMEDIATEGodbcc checkdb(MyDB, REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(MyDB, REPAIR_REBUILD)alter database MyDB set Multi_USER

Реализация может быть предложена во время выполнения и т. Д. …

8, повторно обновите базу данных, желаю вам удачи!

           

  • Произошла ошибка во время обновления зоны
  • Произошла ошибка во время копирования установочных файлов виндовс
  • Произошла ошибка во время конфигурации wifi polaris
  • Произошла ошибка во время кодировки записи obs
  • Произошла ошибка во время запроса гас правосудие