На главную страницу
Главная О компании Программы GAAP Техническая поддержка Полезное
     Инотек Бухгалтер Про-
       фессионал. Руководс-
       тво администратора
    Формулы в програм-
      ме Инотек Финансы
     Инотек Бухгалтер
      Эксперт. Руководс-
      тво пользователя
     Инотек Отчеты.
       Руководство
       пользователя
Программы :: Документация :: Инотек Бухгалтер Профессионал. Руководство администратора (Оглавление)

1.2. Обработка транзакций

1.2.1. Понятие транзакции

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

Для обеспечения защиты данных, когда сбой произошел в момент записи транзакции в БД, используется запись транзакций в специальный файл - журнал. Этот процесс, называется журнализацией транзакций. Следующий процесс, в котором происходит запись транзакции в БД, называется фиксацией транзакции (transaction commit). Если в процессе фиксации происходит сбой, то система автоматически начинает операцию восстановления, которая берет копию изменений сохраненную в журнале транзакций и завершает фиксацию записывая эти изменения в БД.

Таким образом, от начала до фиксации транзакции выполняются следующие шаги.

  1. Измененные страницы БД пишутся в журнал транзакций.
  2. Менеджеру блокировок (lock manager) сообщается о фиксации транзакции.
  3. Имя log-файла добавляется в TAF-файл.
  4. Измененные страницы записываются из кэша. Если переполнение произошло раньше, тогда измененные страницы, сохраненные только в log-файле, читаются из него и записываются в БД.
  5. Имя log-файла удаляется из TAF-файла.
  6. Менеджеру блокировок сообщается об окончании транзакции.
  7. Все блокировки освобождаются.

Если транзакция отменяется пользователем, измененные страницы в страничном буфере очищаются.

1.2.2. Восстановление БД

Если происходит сбой пока транзакция активна (идет модификация страниц в памяти), БД гарантированно сохраняет свою целостность, т. к. в БД еще ничего не записывалось. Происходит только потеря изменений, сделанных с начала транзакции. Если произошел сбой во время, когда измененные страницы записываются в журнал транзакций, происходит ситуация которая описана ранее. Однако после того как изменения записаны в журнал транзакций (Шаг 1, см. выше), если произошел сбой пока БД изменяется, восстановление возможно. Аналогично происходит восстановление, если сбой произошел во время фиксации транзакции из журнала транзакций.

Внешнее восстановление

В системе с только одним активным пользователем восстановление базируется на TAF-файле. Если пользователь вызывает аварию, после того как имя log-файла добавлено в taf-файл (Шаг 3, см. выше) и до того как удалено из него (Шаг 5, см. выше), то делается предположение, что БД нуждается в восстановлении. Taf-файл проверяется каждый раз, когда БД открывается. Если один или несколько имен log-файлов присутствуют в taf-файле, они все восстанавливаются первым приложением использующем этот taf-файл в момент выполнения функции открытия БД (d_open()).

Автоматическое восстановление

В многопользовательском режиме работы, автоматическое восстановление достигается через кооперацию между функциями обработки транзакций и менеджером блокировок (lock manager). Менеджеру блокировок, который работает как независимый процесс, сообщается имя log-файла, когда обновление инициализируется (Шаг 2) и факт окончания транзакции (Шаг 6). Если менеджер блокировок определяет, что процесс выполняющий фиксацию транзакции был завершен аварийно, то автоматически вызывается восстановление. Если же менеджер блокировок обнаруживает неудачный процесс, который не довыполнил фиксацию транзакции, то он просто освобождает блокировки удерживаемые этим процессом.

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

После успешного завершения фиксации транзакции, менеджер блокировок удаляет имя log-файла из taf-файла. Если оба процесса (и фиксация транзакции и менеджер блокировок) завершаются аварийно, то все RDM процессы в системе должны быть закрыты. После перезапуска менеджера блокировок, первый процесс открывающий БД проверит taf-файл и сформирует запрос на внешнее восстановление по списку log-файлов в taf-файле. При этом менеджер блокировок будет задерживать все другие процессы, обращающиеся к БД и использующие тот же самый taf-файл, до тех пор, пока восстановление не завершится.

В некоторых сетях (например, Novell) может быть необходимо, создать все log-файлы до первого запуска программы работы с БД, чтобы сделать их доступными для совместного использования. Начальное содержание этих файлов не имеет значения, поскольку они реинициализируются при каждом новом открытии БД. Дополнительная проблема в сетях Novell заключается в том, что любые динамически создающиеся файлы всегда автоматически недоступны для совместного использования, даже когда требуется обратное. Их необходимо сделать доступными для совместного доступа с помощью утилиты flag, входящей в стандартную поставку ОС Novell NetWare (директория PUBLIC, например, flag.exe +Sh *.dat). Также для всех выполняемых файлов работающих с БД необходимо установить 2 режим поиска, с помощью выполнения команды flag.exe /M=2 *.exe.

Когда инициализируется операция восстановления, вызывается сообщение об ошибке. Цель этого сообщения просто проинформировать пользователя о начале процесса восстановления.

 

НОВОСТИ
Новости компании
Архив новостей
Новости законодательства
Архив новостей законодательства
Семинар...
15 ноября 2006 г. мы проводим семинар на тему «Принципы работы в модуле Инотек Склад»   подробнее...
Новое в отчетности   подробнее...
Техподдержка: Фиксация остатков в модуле Финансы   подробнее...
Индекс цитирования
   Copyright © 1999 - 2011 Инотек Предложения по работе сайта