Базы данных SQL Server иногда переходят в режим “Восстановление”, что часто может застать администраторов баз данных врасплох. Этот статус возникает во время перезапуска, восстановления базы данных или неожиданного выключения, когда SQL Server воспроизводит или отменяет незавершенные транзакции для поддержания целостности данных. Хотя этот процесс обычно автоматический, иногда он может занять больше времени, чем ожидалось, или даже казаться застрявшим, оставляя администраторов в нерешительности относительно дальнейших действий.
Если вы столкнулись с этой проблемой, не волнуйтесь. Эта статья поможет вам понять, что происходит за кулисами, и научит, как реагировать. Вот краткий обзор того, что вы узнаете:
- Что означает режим “Восстановление” — Почему ваша база данных попадает в этот режим и что делает SQL Server в фоновом режиме.
- 3 Фазы восстановления — Подробное описание фаз Анализа, Пересдачи и Отмены, которые SQL Server выполняет во время восстановления.
- Частые причины задержек — От больших журналов транзакций до избыточного количества виртуальных журнальных файлов (VLF) — посмотрите, что может замедлять процесс.
- Как вернуться в онлайн — Узнайте практические шаги для восстановления вашей базы данных в согласованное состояние, от простого ожидания до использования инструментов восстановления SQL.
- Когда обратиться за продвинутой помощью — Что делать, если процесс восстановления кажется застрявшим и нет никакого прогресса.
К концу этого руководства вы будете иметь крепкое представление о процессе восстановления SQL Server и инструментах, которые можно использовать для быстрого возвращения вашей базы данных в онлайн.
Понимание режима “Восстановление” в SQL Server
Когда SQL Server перезапускается или база данных восстанавливается из резервной копии, она входит в режим “Восстановление”, чтобы обеспечить целостность данных. В этой фазе SQL Server воспроизводит или отменяет незавершенные транзакции для предотвращения повреждения данных и обеспечения транзакционной согласованности.
После перезапуска SQL Server база данных переходит в режим “Восстановление”. Вы также можете увидеть базу данных SQL Server в состоянии восстановления при ее запуске или во время восстановления из резервной копии.
Рисунок 1 – Режим базы данных SQL “Восстановление”
Состояние “восстановление” базы данных означает, что база данных выполняет процесс восстановления и автоматически станет онлайн, как только процесс будет завершен. Однако вы можете столкнуться с тем, что восстановление идет медленно, и база данных застревает в состоянии восстановления. Ваша база данных может все еще находиться в состоянии восстановления, поскольку SQL-базы данных проходят три фазы восстановления, которые могут занять время в зависимости от размера ваших файлов базы данных.
3 Фазы восстановления SQL-базы данных
Обычно, когда база данных не была правильно выключена при перезапуске SQL Server, она проходит процесс восстановления после сбоя, обеспечивая согласованность БД. Существуют три фазы восстановления, через которые должна пройти SQL-БД:
Фаза 1: Анализ
Этот этап начинается с “последней контрольной точки до конца журнала транзакций.” Создается таблица ‘Dirty Page Table’ (DPT), которая помогает определить все грязные страницы на момент сбоя. Кроме того, создается таблица ‘Active Transaction Table’ (ATT), чтобы определить незафиксированные транзакции в момент остановки SQL Server.
Этап 2: Переделка
На этом этапе SQL Server восстанавливает все изменения, произошедшие после контрольной точки и до сбоя. По сути, на этапе переделки все транзакции, которые зафиксированы, но еще не записаны в файл данных SQL (.mdf/.ldf) через контрольную точку, должны быть восстановлены.
Этап 3: Отмена
Если были какие-либо незафиксированные транзакции на момент восстановления базы данных, их необходимо откатить на этапе отмены, чтобы привести БД к согласованному состоянию.
Что делать, если ваша база данных застряла в режиме восстановления?
Проверьте журнал ошибок SQL Server, чтобы увидеть первое сообщение в базе данных, которое может выглядеть примерно так:
Starting up database ‘DatabaseName’
Это означает, что файлы БД открыты, и начат процесс восстановления. Некоторое время спустя вы должны увидеть, как SQL Server проходит 3 этапа восстановления. Если вам нужна помощь по резервному копированию и восстановлению базы данных, ознакомьтесь с этим руководством по резервному копированию и восстановлению баз данных Azure SQL.
Ниже показан 1 этап восстановления базы данных:
Recovery of database ‘DatabaseName’ (9) is 0% complete (approximately 95 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
Recovery of database ‘DatabaseName’ (9) is 3% complete (approximately 90 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
После завершения фазы 1 SQL Server пройдет фазы 2 и 3 восстановления:
Recovery of database ‘DatabaseName’ (9) is 5% complete (approximately 85 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required…
Recovery of database ‘DatabaseName’ (9) is 95% complete (approximately 40 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.
Phase 3 of 3. This is an informational message only. No user action is required.
После завершения фаз 2 и 3 вы увидите что-то подобное:
3807 transactions rolled forward in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
0 transactions rolled back in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery is writing a checkpoint in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery completed for database DatabaseName (database ID 9) in 30 second(s) (analysis 1289 ms, redo 29343 ms, undo 72 ms.) This is an informational message only. No user action is required.
В журнале ошибок обратите внимание на сообщение “не требуется пользовательского вмешательства”. Это указывает на то, что база данных находится в режиме восстановления. Однако восстановление может занять больше времени, чем ожидалось, и база данных может застрять в режиме восстановления.
Причины застревания SQL-базы данных в режиме “Восстановление”
Вот причины, которые могут вызвать застревание SQL-базы данных в режиме восстановления:
- Длительная транзакция откатывается
- Размер файла журнала транзакций огромен
- Слишком много виртуальных файлов журнала (VLF) находится в журнале транзакций базы данных
- Была ошибка в SQL Server, которая сейчас исправлена.
Что можно сделать, чтобы вернуть базу данных в согласованное состояние?
Обходное решение 1: Подождите завершения восстановления базы данных
Самым очевидным решением для восстановления базы данных в онлайн-режиме является терпение и ожидание завершения процесса восстановления; это может занять несколько часов или дней. Если восстановление занимает слишком много времени для БД в SQL Server 2008 или 2008 R2, применение исправлений Microsoft может помочь.
Примечание: Избегайте выполнения команды RESTORE для приведения БД в онлайн-состояние в согласованном состоянии, так как SQL Server уже пытается выполнить ту же задачу. А выполнение ‘RESTORE with..Recovery’ означает, что БД пройдет через те же шаги снова.
Решение 2: Используйте профессиональный инструмент для восстановления SQL базы данных
Если восстановление завершено, но не удалось привести базу данных в согласованное состояние, использование специализированного инструмента для восстановления SQL может помочь восстановить БД в ее исходное состояние.
- Stellar Repair for MS SQL — Специализированный инструмент, который помогает восстановить SQL базы данных в их исходное состояние после повреждения или сбоя.
- ApexSQL Recover — Этот инструмент помогает восстанавливать удаленные, усеченные или поврежденные данные базы данных SQL Server.
- dbForge SQL Complete — Хотя в первую очередь является расширением IDE, он предлагает полезные функции обработки ошибок и устранения неполадок.
- Redgate SQL Data Recovery — Redgate предлагает ряд инструментов для SQL Server, включая функции восстановления данных.
- SysTools SQL Recovery Tool — Известен восстановлением поврежденных или испорченных файлов базы данных SQL (.MDF и .NDF) и возвращением их в работоспособное состояние.
- Kernel for SQL Database Recovery — Этот инструмент может восстанавливать и восстанавливать базы данных SQL Server как от повреждений, так и от неожиданных завершений работы.
- Aryson SQL Database Recovery — Еще один инструмент, который может восстанавливать и восстанавливать файлы MDF и NDF в SQL Server.
Заключение
В этой статье мы рассмотрели, что означает, когда SQL база данных застряла в режиме ‘Восстановление’, три критических этапа восстановления (Анализ, Повторение и Отмена) и что вы можете сделать, чтобы вернуть базу данных в онлайн. Мы также обсудили возможные причины, от больших журналов транзакций до слишком большого количества виртуальных файлов журналов (VLF).
Если ваша SQL база данных все еще застряла в режиме восстановления, помните, что терпение – это ключ. Избегайте выполнения команды RESTORE, так как это перезапускает процесс восстановления. При серьезных проблемах, когда ручное вмешательство не помогает, рассмотрите возможность использования профессионального инструмента для ремонта SQL базы данных для восстановления ваших данных.
Если вы нашли это руководство полезным, поделитесь им с вашей командой или оставьте комментарий о вашем опыте восстановления SQL.
Source:
https://dzone.com/articles/resolving-sql-database-stuck-in-recovery-mode