Перейти к содержанию

Аварийное восстановление базы данных Cache

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

Как правило, процедуру восстановления базы приходится выполнять лишь при полном физическом отказе жёсткого диска, на котором расположена база данных, или при безвозвратном удалении файлов базы данных. В любом случае, аварийное восстановление должно выполняться квалифицированным администратором (прошедшим обучение администрированию СУБД Cache и проекта «М-АПТЕКА плюс») под контролем службы поддержки.

В случае физического отказа жёсткого диска с операционной системой (далее ОС) необходимо иметь другой жёсткий диск, с которого можно загрузить ОС и получить доступ к тем дискам, на которых расположена резервная копия базы данных (далее БД) и файлы журналов.

На этом диске должен быть также установлен и сконфигурирован сервер СУБД Cache. Желательно, чтобы этот жёсткий диск представлял собой точную копию системного диска. Если точной копии диска нет, можно просто инсталлировать на него серверную часть базы из инсталляционного дистрибутива проекта «М-АПТЕКА плюс».

При безвозвратном удалении файлов БД (при исправной ОС) для выполнения процедуры восстановления может использоваться тот же системный диск с тем же сервером СУБД Cache.

Восстановление состоит из двух этапов:

  1. На первом этапе файлы резервной копии БД нужно скопировать на место рабочих файлов. Разумеется, предварительно необходимо остановить СУБД Cache и по возможности сохранить разрушенную БД.

    Внимание

    Перед копированием необходимо убедиться, что копия достаточно «свежая» (нужно посмотреть дату и время создания файла копии). Если копия старая, то восстановление журналов не имеет смысла.

    После копирования БД и запуска Cache снова в работу, следует проверить функционирование проекта «М-АПТЕКА плюс» (войти в систему и проверить наличие данных).

    Также необходимо проверить целостность БД копии, что делается следующим образом:

    • Щёлкнуть любой клавишей мыши по кубу Cache Синий кубик, расположенному в Панели задач Windows, слева от часов.
    • Откроется всплывающее меню, в котором следует последовательно выбрать пункты: Панель управления → Локальные базы данных.
    • Теперь надо выбрать интересующую БД (как правило, USER), нажать правую клавишу мыши и выбрать пункт Проверка целостности.

    Панель управления Cache'

  2. На втором этапе на уже работающую базу данных «накатываются» операции, сохраненные в журнале с момента создания последней резервной копии. Это делается при работающей СУБД (проект «М-АПТЕКА плюс» работать не должен).

  3. В результате в базе данных должна быть восстановлена вся информация, накопленная вплоть до самого момента аварии.

Процедура «наката» операций из журнала

Процедура «наката» операций из журнала на рабочую базу данных имеет множество шагов и выполняется из командной строки терминала СУБД Cache. Для того чтобы вызвать терминал Cache, необходимо щёлкнуть любой клавишей мыши по значку куб Cache Синий кубик, расположенному в Панели задач Windows, слева от часов. Откроется всплывающее меню, в котором следует выбрать пункт Терминал.

Терминал

Терминал Cache имеет собственную память, которая позволяет увидеть все выполняемые пользователем шаги, сообщения сервера и выводимые данные (для этого используется линейка прокрутки, расположенная с правой стороны окна терминала). Процедуру может выполнять любой пользователь ОС, ограничений по правам доступа нет.

Внимание

Перед началом процедуры нужно внимательно просмотреть, какие файлы журнала должны использоваться для «наката» операций. Дело в том, что СУБД Cache нужно сначала остановить, скопировать файлы резервной БД на место испорченной рабочей БД, а затем снова запустить Cache. В связи с этим, скорее всего, будет начат новый файл журнала – его использовать для восстановления нельзя.

Также не должны использоваться для восстановления и файлы журнала, полученные в результате проверки правильности первого этапа восстановления (когда резервная БД была подложена вместо рабочей базы).

  1. В командной строке терминала нужно выполнить переход в системную область %SYS. Переход выполняется следующей командой (двойные кавычки обязательны, SYS писать заглавными буквами): zn "%SYS"

    Эта область является хранилищем служебных программ, недоступных из других областей базы данных. Результатом будет изменение вида командного приглашения (prompt), свидетельствующего об успешном переходе: %SYS> (здесь и ниже символ «>» – это командное приглашение терминальной программы).

  2. Запускается служебная программа работы с журналами (JOURNAL писать заглавными буквами): d ^JOURNAL

    Результатом будет вывод диалогового меню программы:

    1. Begin Journalling (^JRNSTART)

    2. Stop Journalling (^JRNSTOP)

    3. Restore Globals From Journal (^JRNRESTO)

    4. Switch Journal File (^JRNSWTCH)

    5. Display Journal File (^JRNDUMP)

    6. Exit This Utility

    Option?

  3. В меню нужно выбрать пункт 3 путём ввода цифры 3 и нажатия клавиши Enter. Результатом будет вывод сообщения о том, что данный пункт меню выполняет процедуру доведения резервного (старого) файла базы данных до актуального состояния путём выполнения операций, хранящихся в журнале. Также будет предупреждение о том, что данную процедуру нельзя «откатить».

    This utility uses the contents of journal files to bring globals up to date from a backup. Replication is not enabled.

    Restore the Journal? Yes =>

    В последней строке запрашивается подтверждение выполнения восстановления.

  4. Согласиться с началом восстановления (ответ Yes). Будет задан следующий вопрос: Process all journaled globals in all directories?

    Таким образом система запрашивает, нужно ли выполнять восстановление данных, расположенных во всех доступных каталогах.

  5. Отказаться от восстановления всех каталогов (ответ No). Будет спрошен конкретный каталог, в котором находится файл рабочей базы данных (той, которая была перенесена на место рабочей из архивной копии, именно на неё нужно «накатить» операции из журнала): Directory:

  6. Ввести путь к файлу базы данных. Это должна быть БД, перенесённая из архива на место (испорченной) основной – именно на неё нужно «накатывать» операции из журнала. Для исключения ошибок при вводе путей следует использовать возможности копирования и вставки терминала Cache (меню Edit, пункты Copy и Paste соответственно): С:\CacheSys\mgr\USER

    После ввода пути следует нажать клавишу Enter, в результате чего появляется сообщение, показывающее, в каком каталоге СУБД будет искать файлы базы данных: Redirect to Directory: C:\cachesys\mgr\User\ =>

    Если путь указан правильно, то нужно просто нажать клавишу Enter, если неправильно, то нужно прямо сюда вписать правильный путь. Если путь указан правильно, будет сообщение о подмонтировании файла базы данных и запрос, все ли данные из этого каталога нужно использовать:

    ...not mounted...mounting...ok!--> C:\cachesys\mgr\User\

    Process all globals in C:\cachesys\mgr\User\? No =>

  7. Следует ответить Да (ответ Yes). Запрос каталога будет повторён: Directory:

  8. Завершить задание каталогов пустым вводом. Будет запрос корректности: Processing globals from the following datasets:

    1. C:\cachesys\mgr\User\ All Globals

    Specifications correct? Yes =>

  9. Если всё правильно, следует ответить Yes, если нет – ответить No и повторить ввод путей к файлам базы данных.

    При правильном задании (ответ Yes) будет запрос имени того файла журнала, с которого будет начата процедура и предупреждение о невозможности «отката» операции: Updates will not be replicated

    Specify range of files to process (names in YYYYMMDD.NNN format)

    from: <20050201.001> =>

  10. Если имя файла журнала то, что нужно, следует нажать клавишу Enter, иначе – прямо сюда ввести правильное имя (без угловых скобок <>). После этого будет запрошено имя того файла журнала, которым следует закончить: through: <20050201.005> =>

    Если имя файла журнала то, что нужно, следует нажать Enter, иначе – прямо сюда ввести правильное имя (без угловых скобок <>). После этого будет запрос, нужно ли подтверждать каждый шаг процедуры: Prompt for name of the next file to process? No =>

  11. Обычно подтверждения не требуется (ответ No).

    Будет запрос префикса файлов журнала: Journal File Prefix: =>

  12. Если у текущего журнала был префикс, он будет показан в угловых скобках <>, обычно префикса нет (и ничего не показывается). Если показанный в скобках префикс – правильный (либо префикса у журнала нет, и ничего не показывается), то просто нажать Enter. Если же префикс должен быть и он другой (не тот, что показывается в скобках), то прямо сюда ввести правильный префикс (без угловых скобок <>).

    Будет сообщение об использовании файлов журнала, находящихся в области хранения и запрос, не нужно ли искать ещё какие-то файлы:

    Files to dejournal will be looked for in: C:\CacheSys\Mgr\journal\

    Внимание

    Если при установке Cache указано иное место хранение журналов вместо С:\CacheSys\Mgr\journal, то будет указан правильный путь.

    Specify other directories to search:

  13. Хотя программа обычно показывает правильный путь к журналу, рекомендуется ввести этот путь вручную и нажать клавишу Enter - иногда без ручного ввода программа не может найти журнал и накат операций не выполняется.

    Будет предложение запретить журналирование процесса восстановления (для скорости) или сохранить его в другом файле журнала: You may disable journaling the updates for faster restore; on the other hand, you may not want to do so if a database to restore is being shadowed. Do you want to disable journaling the updates? Yes =>

  14. Для надёжности рекомендуется сохранить журнал в другом файле (ответ No).

  15. Процесс восстановления будет запущен. В случае удачи будут выданы примерно такие сообщения: Updates will be journaled (subject to other common conditions)

    C:\CacheSys\Mgr\journal\20050201.001d:\journal\20050201.001

    ***Dejournal file finished at 17:48:48

    C:\CacheSys\Mgr\journal\20050201.002d:\journal\20050201.002

    ***Dejournal file finished at 17:48:48

    C:\CacheSys\Mgr\journal\20050201.003d:\journal\20050201.003

    ***Dejournal file finished at 17:48:48

    [journal restore completed] (это признак полной успешности наката операций из журнала).

    1. Begin Journaling (^JRNSTART)

    2. Stop Journaling (^JRNSTOP)

    3. Restore Globals From Journal (^JRNRESTO)

    4. Switch Journal File (^JRNSWTCH)

    5. Display Journal File (^JRNDUMP)

    6. Exit This Utility

  16. Следует завершить работу программы JOURNAL выбором пункта 6 и нажатием клавиши Enter.

  17. Закрыть терминальную программу.

  18. Проверить результаты восстановления:

    • включить в конфигурацию и смонтировать неисправную базу;
    • сверить данные товарных отчётов в двух базах;
    • сверить суммы по X-отчётам и суммы по документам для текущих продаж;
    • запустить в расписании остановленные по ошибкам задачи;
    • убрать из конфигурации неисправную базу.

На этом процедура восстановления базы данных заканчивается. Далее следует перезапустить (остановить и снова стартовать) базу данных перед началом работы или просто перезапустить сервер СУБД Cache.