Как восстановить содержимое поврежденной базы Microsoft SQL Server

Информационная страница

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

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

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

Появление WannaCry было внезапным, а действие — разрушительным, неизвестно, какие уязвимости еще скрываются в Windows Server и какие атаки ждут нас в будущем. Однако к ним следует быть готовым, и речь пойдет не о бэкапах (которые тоже могут быть испорчены), а об инструменте-последнем шансе на спасение самого ценного — российской программе Recovery Toolbox for SQL Server для восстановления содержимого поврежденных баз данных Microsoft SQL Server.

Хоть Microsoft и предлагает облачное решение SQL Azure, частично защищающее базу от повреждения, его возможности ограничены, поэтому большинство компаний продолжают держать локально Microsoft SQL Server (значительно более доступные по цене, чем решения того же Oracle).

Естественно, как серьезный продукт SQL Server имеет предостаточные возможности для полного восстановления и восстановления с неполным протоколированием. Но все-таки чудеса случаются, что носители с полными копиями и журналами могут быть повреждены физически или, например, изъяты, а сама база в SQL Management Studio будет отображаться как Suspend, то есть нечитаемая вследствие неизвестных нарушений целостности.

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

Если своими силами починить базу не удалось, а с бэкапами не сложилось, то еще не всё потеряно, не обязательно подписывать приговор базе, чей объем может измеряться сотнями гигабайт. Палочкой-выручалочкой станет программа Recovery Toolbox for SQL Server от российских разработчиков Recovery Toolbox, специализирующихся на софте по восстановлению поврежденных данных. Примечательно, что по утверждению производителя, более 95% пользователей Recovery Toolbox for SQL Server — иностранные, что, пожалуй, должно вселять некоторую гордость за профессионализм российских администраторов.

Утилита для SQL Server работает с любой версией, даже с чудовищно архаичной SQL Server 7, а также на любой версии Windows Server или клиентской Windows. Системные требования программы весьма скромные: рекомендуемый объем оперативной памяти зависит от размера восстанавливаемой базы и вычисляется делением объема файла базы в гигабайтах на 500 и прибавлением 0,12. Например, для базы на 500 Гбайт потребуется 500/500+0,12=1,12 Гбайт свободной ОЗУ, то есть сущий пустяк. А вот скорость сканирования и восстановления будет невысокой, процесс может растянуться даже на несколько дней, если база перевалила за терабайт.

Работа Recovery Toolbox for SQL Server заключается в полном сканировании файла или файлов (в случае MDF и NDF) базы и вычленении из нее неповрежденных данных. Можно провести аналогии с любой программой для восстановления данных с накопителей, принцип тот же — содержимое файла сканируется на бинарном уровне и в нём находятся соответствующие SQL типы данных. Если какая-то информация была испорчена топорной подменой бинарного кода (те же вирусы-шифровальщики шифруют начальную часть большого файла базы), то чуда не произойдет, приложение не «додумает» потерянное неким волшебным образом. Но неповрежденные участки базы удастся прочитать. Recovery Toolbox сможет экспортировать найденные таблицы в виде SQL-скриптов.  Эти скрипты можно будет сохранить, чтобы затем создать объекты базы данных, либо сразу запустить скрипты непосредственно в другой имеющейся базе.

Работа с программой предельно проста. В крайне лаконично оформленном интерфейсе потребуется только указать путь к файлу базы, после чего начнется ее сканирование. По окончании крайне неспешного процесса будет показана доступная к восстановлению структура базы данных: типы данных, данные таблиц, просмотры, сохраненные процедуры, пользовательские функции, триггеры, индексы, главные и внешние ключи, ограничения и прочее. В бесплатной версии Recovery Toolbox можно просмотреть это содержимое, но нельзя экспортировать — то есть вы сможете оценить полезность программы лично для себя, не оплачивая ее зря, ведь стоимость лицензии начинается от $99 за персональную версию и $149 за коммерческую лицензию.

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

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

При выборе опции экспорта скриптов на диск, Recovery Toolbox for SQL Server создаст в каталог, в который сохранит файлы, дав им названия ролей содержимого, например, Types1.sql, Tables1.sql, Indexes1.sql и так далее. Если выбрать ограничение на размер каждого файла, то, соответственно, скриптов каждой роли будет больше, чем один. Также будут созданы файлы install.bat и InstallTrusted.bat для последовательного выполнения всех скриптов (требуется наличие isqlw). Запускать его нужно, последовательно указав в командной строке через пробел (если в параметре есть пробел, заключите параметр в кавычки) имя сервера, базы, имя пользователя и пароль. Если для авторизации в SQL Server используется учетная запись Windows, можно обойтись файлом InstallTrusted.bat, указав только имя сервера и имя базы.

Выполнять созданные скрипты рекомендовано в определенном порядке: Types—>Tables—>Data—>Indexes—>Foreign Keys—>Procedures, Functions, Views, Triggers. Если в ходе восстановления какая-то информация будет конфликтовать с первичным ключом, уникальным индексом и так далее, таблица все равно будет заполнена, но тогда не будут созданы ограничения, поэтому можно выполнять скрипты не в рекомендованном, а в нужном вам порядке. 

Так как с разными версиями SQL Server при сканировании и восстановлении могут возникнут неожиданные проблемы, на сайте Recovery Toolbox есть FAQ с описанием известных проблем и путями их решения — то есть если программа сработает не так, как должна (или импорт в новую базу не удастся), не нужно искать ответы в поисковике или сразу писать в саппорт разработчика, очень вероятно, что ваша проблема уже описана и решена.

11 января 2021 Г.