Ситуация, когда в тестовую базу данных 1С поверх актуальных доработок восстанавливают старую или рабочую копию, является критической для разработчика. Проблема заключается в том, что в системе управления базами данных SQL Server команда RESTORE является деструктивной — она перезаписывает существующие файлы данных. Рассмотрим подробнее, есть ли шансы на спасение информации, если «традиционных» бэкапов не осталось, и какие шаги необходимо предпринять в первую очередь.
Сразу определим главный технический аспект: штатной функции «Undo Restore» или «Откатить восстановление» в Microsoft SQL Server не существует. Как только процесс восстановления завершен, старые данные в файлах .mdf и .ldf считаются замененными новыми блоками данных. Однако, прежде чем опускать руки, проанализируем инфраструктурные и программные лазейки, которые могли оставить «следы» вашей работы.
Первым делом проверим состояние операционной системы на сервере баз данных. Если база располагалась на диске, где включена служба Volume Shadow Copy Service (VSS), у нас есть шанс. Разберем алгоритм действий:
.mdf и .ldf).Если служба теневого копирования была настроена, мы сможем восстановить файлы базы в их состоянии на момент последнего снимка (например, сегодняшнее утро или вчерашний вечер). Это позволит вернуть базу целиком вместе со всеми конфигурационными изменениями.
Проанализируем среду развертывания. В современных корпоративных сетях SQL-серверы чаще всего работают внутри виртуальных машин (VMware, Hyper-V). Проверим наличие автоматических снапшотов. Системы резервного копирования уровня инфраструктуры, такие как Veeam Backup & Replication, часто создают временные снимки перед выполнением заданий или по расписанию. Выясним у системного администратора, не создавался ли снапшот всей виртуальной машины за последние несколько часов.
Если восстановление производилось «поверх» старых файлов, но при этом база была предварительно удалена или файлы были пересозданы с новыми именами, сектора диска, где лежала старая база, могли остаться нетронутыми. Разберем по шагам этот метод:
.mdf и .ldf.Даже если файлы повреждены частично, существуют инструменты для извлечения текстов модулей 1С непосредственно из бинарных данных SQL-таблиц (например, из таблицы Config), но это крайне трудоемкий процесс, требующий участия экспертов.
Часто самым реалистичным способом спасти многодневную работу является обращение к локальному компьютеру программиста. Когда вы открываете конфигуратор и редактируете модули, 1С сохраняет временные копии данных. Проанализируем содержимое папок в профиле пользователя:
%AppData%\Local\1C\1Cv8\
%AppData%\Roaming\1C\1Cv8\
В этих каталогах хранятся данные динамического обновления и кэш конфигурации. Существуют неофициальные утилиты (скрипты на Python или обработки 1С), которые позволяют просканировать файлы кэша и попытаться вычленить из них тексты модулей. Проанализируем также папку Temp. При обновлении конфигурации базы данных 1С часто создает временный файл v8copy.cf. Если этот файл сохранился, в нем может находиться полная копия конфигурации до момента последнего «успешного» обновления.
Если ваша тестовая база работала в модели восстановления Full, а после инцидента файлы логов .ldf не были физически удалены или перезаписаны, теоретически можно попытаться прочитать их с помощью ApexSQL Log или аналогичных инструментов. Однако без наличия полной резервной копии данных этой же базы («Full Backup»), восстановление кода из логов практически невозможно, так как логи содержат лишь дельту изменений.
Рассмотрим рекомендации, которые дали участники обсуждения, чтобы подобная ситуация не повторилась. Проблема (0) возникла из-за отсутствия дисциплины разработки.
Конфигурация -> Сохранить конфигурацию в файл...) перед любыми серьезными манипуляциями с SQL-сервером.Резюме: Если стандартного бэкапа нет, а Хранилище не использовалось, ваши основные шансы — это поиск снимков виртуальной машины (Snapshot) или теневых копий Windows (VSS). В самом крайнем случае — попытка извлечения кода из локального кэша конфигуратора на компьютере разработчика. Если же ни один из этих методов не сработал, придется признать, что данные утеряны окончательно, и восстанавливать функционал по памяти, внедрив при этом систему контроля версий для предотвращения подобных инцидентов в будущем.