Восстановление внутренней базы при небольших повреждениях и отсутствии бэкапов

Материал из wiki.drweb.com
Перейти к: навигация, поиск

При использовании внутренней БД сервер ES периодически создает ее резервные копии. Но как быть, если база "побилась", а бэкапов нет или они также повреждены?

Можно создать БД заново, как описано в Dr.Web®_Enterprise_Suite:_Database_disk_image_is_malformed, но при этом теряются все индивидуальные настройки рабочих станций, информация о связях и т.д. Если же повреждения невелики, можно попытаться пожертвовать искаженной частью данных, восстановив БД без нее. В UNIX-версии сервера это можно сделать так (в Windows-версии порядок действий аналогичный):

1. Останавливаем сервис ES

2. Делаем на всякий случай копию файла БД

3. Экспортируем содержимое БД в виде последовательности SQL-операторов. Подключаемся к базе: /opt/drwcs/bin/drwidbsh dbinternal.dbs

Вводим команды

.output dbinternal.sql

.dump

.exit

На выходе получаем файл dbinternal.sql с текстовым представлением БД в виде последовательности SQL-операторов. Если что-то вызывает сомнение (и вы разбираетесь в SQL), можно этот файл аккуратно подправить. Предупреждение: файл может быть большим (десятки и даже сотни Мб!)

4. Удаляем файл поврежденной БД dbinternal.dbs

5. Создаем базу заново и загружаем данные из dbinternal.sql. Т.к. drwidbsh исполняет SQL-операторы последовательно и после каждого выводит сообщения, чтобы не потерять возможные сообщения об ошибках, можно поступить так:

5.1. Создаем командный файл (e.g. load.cmd) для создания базы и загрузки данных с таким содержимым:

.read dbinternal.sql

.exit

5.2. Проводим загрузку, записывая вывод в log-файл:

/opt/drwcs/bin/drwidbsh dbinternal.dbs >load.log 2>&1 <load.cmd

5.3. Смотрим лог. Т.к. он большой и на 99.9% заполнен сообщениями о времени выполнения SQL-операторов, делаем так:

grep -v ' ms' load.log

Если ошибок было не много, мы - на правильном пути

6. Проверяем БД

/etc/init.d/drwcsd verifydb

Результат проверки - в логе сервера ES. Интересны строки, отмеченные [DbMgr]. Если в конце видим

[Server] Database verification completed successfully

можно себя поздравить

7. Запускаем сервер ES