Как вывести базу sql из режима Recovery Pending

1. VickWood 08.04.22 16:16 Сейчас в теме
Добрый день! Столкнулась с такой проблемой: одна из баз (повезло, что она тестовая) ночью перешла в режим Recovery Pending. Причины такой трансформации мне пока что не понятны. Однако все мои попытки вывести из этого состояния ее завершаются неудачно, поскольку результат sql-запросов возвращает мне текст ошибки, будто файл mdf и файл логов не найдены и указывает к ним путь совершенно не тот, по которому база реально расположена. Файл базы и ее логов физически присутствует, но при выполнении действий по восстановлению этой базы, она ищется по другому пути. Свойства этой базы посмотреть не возможно, т.к. не активно это меню((

Подскажите, пожалуйста, как можно выйти из данной ситуации? Хочется разобраться, чтобы в дальнейшем не допустить такого с боевыми базами.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. mqlochink 7 11.04.22 08:21 Сейчас в теме
ALT ER DATABASE [DBName] SET EMERGENCY;
GO

ALT ER DATABASE [DBName] set single_user
GO

DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
GO

ALT ER DATABASE [DBName] set multi_user
GO
4. VickWood 11.04.22 10:27 Сейчас в теме
(3) смысл проблемы не в этом, все эти команды выполнены. База перешла в аварийный режим, а дальше выдает ошибки вот такие:
Msg 5120, Level 16, State 101, Line 1
Unable to open the physical file "E:\DB no active\temp6.mdf". Operating system error 2: "2(The system cannot find the file specified.)".
Msg 945, Level 14, State 2, Line 1
Database 'temp6' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.
Msg 5120, Level 16, State 101, Line 1
Unable to open the physical file "E:\DB no active\temp6.mdf". Operating system error 2: "2(The system cannot find the file specified.)".

думаю, что проблема в том, что все эти запросы по какой-то причине ищут файл базы и логов не в той папке и даже не на том диске (физически база действительно находится в другом месте, а не на диске Е, как указано в тексте ошибки).
Как указать верный путь к базе?
17. tetraren 26 11.04.22 19:30 Сейчас в теме
(4) Первым делом, предоставьте права на доступ к файлам и папке E:\DB no active\ пользователю NT SERVICE\MSSQLSERVER или тому, под кем запущена служба MSSQL. Если не уверены, предоставьте права для Everyone.
18. user1203706 13 11.04.22 19:34 Сейчас в теме
(17)
Автор же утверждает , что сами файлы по другому пути, хотя по какому, не говорит.
А так да, можно было бы и по пути, который скуль предполагает хранение их туды поместить, для проверки.

Один хрен, системное хранение не даст поменять просто так с-ходу.
19. tetraren 26 11.04.22 19:45 Сейчас в теме
(18) Прошу прощения, был невнимателен.

Тогда да, самое простое решение - сделать этот путь и поместить туда файлы. Easy peasy.
5. user1203706 13 11.04.22 10:49 Сейчас в теме
(4) недостаточно памяти или места на диске ... ошибка же такая.
6. VickWood 11.04.22 11:02 Сейчас в теме
(5) хватает там места на диске, в том то и дело... 76.7 Гб еще свободно
7. user1203706 13 11.04.22 11:06 Сейчас в теме
(6) дезатач базы проходит хоть?
8. VickWood 11.04.22 11:18 Сейчас в теме
(7) нет, на все попытки что-то сделать, выдает сообщение, что не найдет файл на диске Е, но база находится не там.
9. user1203706 13 11.04.22 11:19 Сейчас в теме
(8) создай новую базу с тем же именем, подсунь мдф и лдф
10. user1203706 13 11.04.22 11:22 Сейчас в теме
И для начала, посмотри где пути к файлам в мастере:

use master
sel ect name,physical_name fr om sys.master_files
go
13. VickWood 11.04.22 11:37 Сейчас в теме
(10) а вот сейчас странный момент - он эту базу вообще не отобрал в выборку...
11. user1203706 13 11.04.22 11:22 Сейчас в теме
Попробуй тупо там запись поменять
14. VickWood 11.04.22 11:38 Сейчас в теме
12. user1203706 13 11.04.22 11:25 Сейчас в теме
Ну и посмотри, где твоя база щас:

exec sp_helpdb @dbname='temp6';
Go
15. VickWood 11.04.22 12:10 Сейчас в теме
(12)

exec sp_helpdb @dbname='temp6';
Go

выводит пустую выборку((( он ее почему-то не видит эту базу(
16. VickWood 11.04.22 12:13 Сейчас в теме
(12) вот какое сообщение он написал: Нет разрешения на доступ к базе данных «temp6».
20. пользователь 12.04.22 08:16
Сообщение было скрыто модератором.
...
21. G_115047268181418619099 19.05.22 07:31 Сейчас в теме
Состояние ожидания восстановления: Если SQL Server знает, что восстановление базы данных должно быть запущено, но что-то препятствует его запуску, сервер помечает базу данных в состоянии 'Recovery Pending'. Это состояние отличается от состояния SUSPECT, поскольку нельзя сказать, что восстановление не удастся - оно просто еще не началось.

Причины состояния ожидания восстановления в SQL Server
Некоторые из причин, вызывающих такую проблему, следующие:

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

Проверьте эти ссылки:
https://stackoverflow.com/questions/52325737/how-to-fix-recovery-pending-state-in-sql-server-database
https://www.stellarinfo.com/blog/fix-sql-database-recovery-pending-state-issue/
VickWood; +1 Ответить
23. VickWood 26.05.23 11:02 Сейчас в теме
(21), благодарю за дельный ответ, действительно, база ушла в такое состояние после моих экспериментов с журналом регистрации, благо база тестовая.
Обязательно посмотрю, почитаю статьи по вашим ссылкам, как только появится на это время, сейчас это вопрос уже не горящий, но все равно интересно самой разобраться с этой проблемой, чтобы иметь представление на будущее, как это решается.
22. ilyam23 16 26.05.23 08:41 Сейчас в теме
Был в такой ситуации - при замене оборудования, не подключил диск с ldf. Когда сервер загрузился, SQL, не найдя ldf баз, создала их рядом с файлами mdf. При этом все такие базы ушли в Recovery Pending.
Помогла остановка SQL и копирование новых ldf по старым путям.
После этого все базы были в штатном режиме.
VickWood; +1 Ответить
24. VickWood 26.05.23 11:03 Сейчас в теме
(22) база тестовая, ради нее нет смысла останавливать SQL, но спасибо за ответ, за то что поделились опытом.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот