Глава 6. Обслуживание базы данных

advertisement
Глава 6. Обслуживание базы
данных
База данных комплекса ............................................................................. 1
Словарь данных .....................................................................................................1
Сетевая модель представления данных..................................................................2
Правила обращения с базой данных комплекса .....................................................2
Основные элементы базы данных .............................................................. 4
Связи между таблицами............................................................................. 9
Резервное копирование БД ...................................................................... 11
Автоархивация в произвольный момент времени ................................................. 12
Ошибки, возникающие при выполнении автоархивации ...................................... 16
Описание утилиты архивации .............................................................................. 17
Проверка базы данных ............................................................................ 19
Предварительные шаги ........................................................................................ 19
Выполнение проверки БД ..................................................................................... 20
Возможные ошибки и их исправление .................................................................. 26
Конвертация базы данных ....................................................................... 33
Запуск конвертации ............................................................................................. 35
Завершение конвертации ..................................................................................... 37
Запуск конвертации вручную ............................................................................... 37
Регистрация изменений в БД ................................................................... 38
Параметры отбора записей .................................................................................. 40
База данных комплекса
В основе комплекса СБиС++ лежит оригинальная система управления базами данных (СУБД), которая несколько отличается от большинства существующих на рынке систем. Серьезных отличий два, а именно - есть
словарь данных, и используется сетевая модель представления данных.
Словарь данных
Перед тем как начать работу с базой данных, необходимо определить её
структуру, порядок сортировки и связи между таблицами и возможные
ограничения по поддержанию целостности. Для этих целей существуют
словари данных (файлы с расширением «.dic»). Благодаря наличию словаря данных, есть возможность отслеживать соответствие текущего формата
базы данных тому, что действительно должно быть, и производить, в случае несоответствия, автоматическую конвертацию базы данных.
Словарь данных может состоять из нескольких файлов с расширением
«.dic». Так, например, в стандартную поставку программы
1
Глава 6. Обслуживание базы данных
«СБиС++Бухгалтерский учет» входят файлы: «!sbis.dic», «muzzle.dic»,
«warehouse.dic», «email.dic», «EO.dic», «zpl.dic», «бухгалтерский
учет.dic», «Основные средства.dic», и др.. Полный словарь данных формируется при запуске комплекса из всех DIC-файлов, находящихся в каталоге базы данных.
Сетевая модель представления данных
В отличие от многих популярных СУБД, в комплексе используется сетевая модель представления данных. То есть в словаре данных наряду с
описанием полей таблиц хранится и описание связей между таблицами.
Таким образом, автоматически поддерживается логическая целостность
базы данных. Например, нельзя удалить организацию, если на нее была
выписана накладная. В свою очередь, при удалении накладной автоматически удаляются наименования накладной.
Правила обращения с базой данных комплекса
Из вышесказанного вытекает ряд нижеследующих правил работы с базой
данных.
Правило первое. Актуальность словаря данных
Словари данных должны соответствовать версии файла «sbis.exe» и файлов ресурсов. То есть при обновлении версии нельзя оставить старые словари, переписав новый «sbis.exe» и наоборот.
Правило второе. Соответствие базы данных словарю данных
При запуске программа проверяет, соответствует ли текущая структура
базы данных текущему словарю данных. Если нет, то будет выдано сообщение:
2
База данных комплекса
Рис. 6-1 – Запрос на выполнение конвертации БД
В этом случае необходимо выполнить конвертацию базы данных (подробности в разделе «Конвертация базы данных»), выбрав тем самым
ответ «Да».
Правило третье. Неделимость базы данных
Поскольку большинство файлов базы данных взаимосвязаны между собой, нельзя, вообще говоря, взять и просто переписать какой-то файл из
одной базы данных в другую. Даже если эти базы данных соответствуют
одинаковым словарям данных.
Лучше воспользоваться механизмом импорта/экспорта данных,
который успешно реализован в программе (о том, как он работает, рассказывается в главе «Обмен данными»).
В некоторых ситуациях подобная процедура все-таки может быть проделана, но нужно отдавать себе полный отчет, что происходит в базе данных,
что с чем связано, и обязательно проверить логическую целостность данных программой Jinnee.
Правило четвертое. Логическая целостность данных
При нормальной работе с самим комплексом СБиС++ логическая целостность данных не может быть нарушена.
Разрушение логической целостности может произойти при каком-либо
аварийном завершении программы (сброс питания, выключение компьютера, зависание системы).
Еще один способ нарушить целостность данных - использовать программу
Jinnee, которая позволяет манипулировать записями базы данных, минуя
3
Глава 6. Обслуживание базы данных
встроенные средства поддержания логической целостности. Поэтому при
работе с этой программой необходима повышенная осторожность.
С помощью Jinnee можно удалить запись об организации, оставив «повисшими» ссылки на эту организацию из журнала операций, из реестра документов и т.д. Могут быть и более тонкие
случаи, например, удалив наименование накладной. В итоге: сумма по накладной, остатки на складе не пересчитаются и т. д.
Основные элементы базы данных
Чтобы избежать путаницы в терминологии, давайте вкратце остановимся
на основных элементах базы данных.
Поле
Поле - это минимальный элемент базы данных, содержащий один неделимый квант информации, например, поле «Номер» при создании нового
документа. Каждое поле характеризуется именем и типом хранящихся в
нем данных. Тип поля можно просмотреть в описании словаря данных:
4
Основные элементы базы данных
Рис. 6-2 – Формат таблицы «Документы»
В зависимости от типа, у поля может быть еще ряд дополнительных параметров:
Рис. 6-3 – Параметры поля «Номер»
5
Глава 6. Обслуживание базы данных
Для организации связей между таблицами базы данных используется специальный класс полей, так называемых полей связи. О них рассказано в
разделе «Связи между таблицами».
Запись
Запись - это совокупность нескольких разнородных полей, описывающая
некоторую сущность предметной области. Например, запись «Документ»
содержит поля «Дата», «Номер», «Сумма» и т.д.
Таблица
Таблица базы данных - это набор однородных записей. Например, таблица
«Документы» содержит некоторое количество записей о документах.
Таблица позволяет читать, изменять, добавлять и удалять записи, а также
сортировать их по определенному условию и осуществлять поиск по заданным значениям.
У каждой таблицы есть логическое имя - строка любых символов и физическое имя - имя файла, в котором она находится.
Например, таблица с логическим именем «Документы» владеет
файлами с именем DOC.
Таблица хранит свои данные либо в паре файлов «*.TBL/*.MCX» (при
однопользовательском режиме работы с программой), либо в паре файлов
«*.MKD/*.TBH» (при многопользовательском режиме).
Список всех таблиц доступен в программе по клавише <Ctrl+O> и горячей клавише <Ctrl+Т> (или выбрав вариант «Открыть таблицу БД»):
6
Основные элементы базы данных
Рис. 6-4 – Перечень таблиц базы данных
Для каждой таблицы БД указано соответствие логического и физического
имени.
Выборка из базы данных
Аналогично таблице, выборка - это также совокупность однородных записей, но:

во-первых, запись выборки может содержать данные из нескольких
таблиц, а также данные, не хранящиеся в базе данных, а рассчитываемые по другим полям;

во-вторых, выборка может содержать только записи, удовлетворяющие некоторому условию;

в-третьих, выборка может быть специальным образом отсортирована.
7
Глава 6. Обслуживание базы данных
Например, выборка «Приходные накладные» содержит записи из
таблицы «Документы» и связанные с ними записи из таблицы
«Лица». Причем, в этой выборке находятся только документы
типа «приходная накладная», которые попадают в указанный
период. Эту выборку можно еще и отсортировать, к примеру,
по сумме документа.
Адрес записи
У каждой записи таблицы базы данных есть уникальный в пределах таблицы адрес, по которому можно эту запись прочитать, удалить, заблокировать и т.д. Адрес - это длинное целое (четыре байта), как правило, адрес
записывается в шестнадцатеричном виде. Просмотреть адрес записи можно по сочетанию клавиш <Shift+Alt+F12>, либо воспользоваться аналогичной командой в контекстном меню таблицы:
Рис. 6-5 – Окно просмотра адресов записей
Любая связь реализуется полем определенного типа в каждой из таблиц,
участвующих в данном отношении.
Зарезервировано несколько специальных значений адреса:
FFFFFFFF или «нет»
FFFFFFF6 или «корень»
Обозначает отсутствие связи (пустая ссылка)
Обозначает ссылку на самый верхний уровень
иерархии (ссылка на так называемый корень
иерархии)
При открытии таблицы программой адрес записи выводится в первом
столбце:
8
Связи между таблицами
Рис. 6-6 – Адреса записей в таблице «Документы»
Связи между таблицами
Любая запись в одной таблице может быть связана с любой записью другой таблицы. Система управления базой данных, используемая в комплексе, позволяет организовать несколько различных типов связей между таблицами.
Связь «Один к одному»
Этот тип связи используется редко, обычно с целью оптимизации работы
базы данных.
Например, чтобы постоянно «не таскать» все данные о сотруднике (а их достаточно много), таблица «Сотрудники» разбита на две - «Сотрудники» и «Сотрудники (расширение)». Записи этих таблиц связаны между собой отношением «один к одному». Для организации такой связи в обе таблицы помещается
поле, содержащее адрес записи другой таблицы. Получается
следующая схема:
9
Глава 6. Обслуживание базы данных
Рис. 6-7 – Пример связи «Один к одному»
Связь «Один ко многим»/ «Многие к одному»
Данный тип связи является одним из самых распространённых.
Например, организации относятся к документам, как один ко
многим. То есть одной организации соответствует несколько
документов. Еще пример, наименования накладной относятся к
накладной как многие к одному.
Реализуется этот тип связи следующим образом:
 в таблице со стороны «один» помещается поле нулевой длины;
 в таблице со стороны «многие» помещается поле, содержащее адрес
связанной записи; в этой же таблице строится индекс по полю связи.
Например, связь таблицы «Документы» с таблицей «Организации» выглядит примерно так:
Рис. 6-8 – Пример связи «Один ко многим»
Условная связь
10
Резервное копирование БД
Очень часто у нескольких сущностей часть атрибутов одинакова, а часть
различна. К примеру, документы всегда содержат номер и дату, но у
накладной и акта приемки ОС есть, очевидно, и разные параметры. В таких случаях удобно использовать условную связь. Фактически, это отношение «один к одному» по условию.
Итак, есть таблица, в которой находятся общие части, и несколько таблиц,
содержащих специальные для каждого типа данные. В таблице с общими
данными помещается поле, содержащее адрес записи и номер таблицы (1
байт), в котором эту запись искать. В ответных таблицах есть просто поля
с адресом записи.
В нашем примере общей является таблица «Документы», которая по
условной связи связана с таблицами «Складские документы» и «Платёжные документы».
Иерархия
Это несколько специфичная связь, поскольку в ней участвует только одна
таблица. Фактически это отношение записей «один ко многим», но внутри
одной таблицы.
В таблицу помещается поле, содержащее адрес записи-узла иерархии, в
котором находится данная запись (4 байта) и, возможно, один байт, указывающий, является ли сама запись узлом (значение - 00) или листом
(значение - FF) иерархии. Напомним, что узел - это запись, на которую
могут ссылаться другие записи, а лист - это запись, на которую не ссылается никакая другая запись иерархии. Например, в справочнике организаций раздел справочника - это узел, а карточка организации - это лист.
Записи, находящиеся в «корне» иерархии (то есть в самом верхнем
уровне), содержат вместо адреса узла специальное зарезервированное значение - FFFFFFF6 (корень).
В программе Jinnee.exe узел иерархии помечается буквой «у» после адреса
связанной записи. Если же запись ссылается на «корень» иерархии, то
вместо шестнадцатеричного адреса будет стоять строка «корень».
Резервное копирование БД
Периодическое копирование базы данных позволяет застраховать себя от
возникновения непредвиденных ситуаций (например, повреждение жесткого диска), которые могут привести к нарушению логической целостности файлов, а также физическому уничтожению информации. Для хране11
Глава 6. Обслуживание базы данных
ния резервных копий рекомендуется использовать какой-либо внешний
носитель (жесткий диск, внешний накопитель и т.п.). Требуется наличие в
штате специалиста, ответственного за создание копий и последовательность его действий. Периодичность создания резервных копий определяется исходя из нужд самого предприятия, но никак не реже одного раза в
сутки. Лучшим вариантом будет настроить автоархивацию базы данных
два раза в день, например, утром и вечером.
Наряду с непосредственно базой данных необходимо создавать копию
файлов ресурсов, т.е. той информации, которая может периодически изменяться. Все эти файлы находятся в подкаталоге «Модули» каталога
программы СБиС++. Как видно из практики, в отличие от базы данных,
которая изменяется ежедневно, создание резервных копий файлов ресурсов может выполняться реже, в зависимости от периодичности изменений
этих файлов, например, раз в неделю.
Ниже приводится технология организации автоматического резервного
копирования баз данных клиент-серверного варианта комплекса СБиС++.
Автоархивация в произвольный момент времени
Рассмотрим метод автоматической архивации БД в произвольный момент
времени. Этот метод позволяет создавать резервные копии БД в любой
момент работы с программой СБиС++, не прерывая тем самым работу
пользователей в сети. Для этого используется утилита Pervasive.SQL –
«Butil», которая позволяет запускать и останавливать непрерывные операции, в нашем случае, с файлами базы данных, определёнными для архивации. Копия будет содержать непротиворечивое состояние базы данных на
момент начала копирования. Все изменения, внесенные в базу в момент
копирования, отражены в копии не будут. Путь к этой утилите прописывается непосредственно в командном файле для выполнения архивации БД
(ниже приводится описание этого файла). При архивации модулей программы СБиС++ использование этой утилиты не требуется.
Не рекомендуем называть каталог с базой данных русскими
именами. Могут возникать ошибки при вызове утилиты «Butil»,
при этом нельзя гарантировать безошибочное выполнение архивации.
Все нижесказанное выполняется только для операционных систем, начиная с MS Windows NT 4.0 и выше.
12
Резервное копирование БД
Файлы, необходимые для запуска архивации, находятся в каталоге «Обслуживание_базы_данных». При установке программы СБиС++ этот каталог будет располагаться в каталоге программы на сервере.
Порядок выполнения автоархивации
Для выполнения архивации необходимы следующие файлы:

sbis_copy_db.bat - создание резервной копии базы данных;

sbis_copy_mod.bat - создание резервной копии клиента СБиС++;

sbis_update_backup.exe - утилита для архивации данных и удаления
ненужных архивных копий (подробнее о настройках утилиты читайте
в разделе «Описание утилиты архивации»).

sbis_update_backup.ini
sbis_update_backup.exe;

7za.exe – архиватор;

blat\*.* - программа для отправки писем по email.
-
настроечный
файл
для
Последовательность действий, выполняемых при архивации, рассматривается при описании командных файлов
sbis_copy_db.bat и
sbis_copy_mod.bat.
Прежде, чем приступить к выполнению архивации, внимательно
изучите файл «ReadMe.txt», который прилагается вместе с
программами, и выполните необходимые рекомендации, изложенные в этом файле.
Программа архивации БД (sbis_copy_db.bat)
Данный скрипт должен запускаться обязательно(!) на сервере, иначе не
будет работать заморозка базы данных. Вся информация о ходе выполнения архивации фиксируется в файле sbis_copy_db.log, который создаётся
в каталоге, где лежит сам скрипт.
В процессе выполнения данного скрипта вызывается утилита
sbis_update_backup.exe, которая занимается удалением ненужных архивов в каталоге с резервными копиями БД. Настройки для работы утилиты
задаются в файле sbis_update_backup.ini, согласно которым и определяются ненужные архивы. Здесь же описан и вызов архиватора, который
формирует копии БД в формате «.zip».
13
Глава 6. Обслуживание базы данных
Программа архивации модулей (sbis_copy_mod.bat)
При архивации модулей, в отличие от предыдущей программы, использование утилиты «Butil» не требуется. Вся информация о ходе выполнения
архивации фиксируется в файле sbis_copy_mod.log, который создается в
каталоге, где лежит и сам скрипт.
Создание заданий автоархивации
Для запуска программ архивации в любое назначенное время удобнее всего воспользоваться средствами операционной системы MS Windows,
например, «Назначенные задания» (для англоязычной операц. системы –
«Shedule Tasks») на панели управления.
Рис. 6-9 – Назначение задания автоархивации

Создайте два задания: первое для выполнения архивации БД, второе
для выполнения архивации модулей. При создании нового задания запустится мастер планирования заданий. Необходимо последовательно
выполнить все действия мастера (задание периодичности, начало выполнения задания, указание пользователя, от имени которого будет
выполняться задание и т.д.).

После этого, в карточке задания необходимо прописать полный путь к
программе архивации с указанием всех параметров, с которыми запускается эта программа:
14
Резервное копирование БД
Рис. 6-10 – Задание командного сценария архивации

На вкладке «Расписание» проверьте и, если нужно, подкорректируйте
расписание для выполнения задания. Напомним, что архивацию базы
данных рекомендуется выполнять дважды в день, тем самым, задав
два расписания для вызова задания:
Рис. 6-11 – Создание расписания для выполнения архивации
Выполнив правильно все необходимые действия, будет вызываться соответствующая программа архивации, согласно установленному в задании
расписанию.
15
Глава 6. Обслуживание базы данных
Ошибки, возникающие при выполнении автоархивации
При выполнении архивации могут возникать непредвиденные ошибки.
Все такие ситуации, при которых возникают эти ошибки, предусмотреть
невозможно. Но о некоторых из них мы поговорим.
Архивация БД выполнена с ошибками утилиты «Butil».
Может возникнуть ситуация, в которой процесс создания резервных копий
БД заканчивается с ошибками утилиты Pervasive.SQL «Butil». Возможные
ошибки:

BUTIL-100: Строка передаваемого ресурса не может быть найдена.

BUTIL-9: Команда не выполнена должным образом из-за возникновения необратимой ошибки. Часто является следствием возникновения предыдущей ошибки.
Одной из причин возникновения этих ошибок может являться русское
название каталога базы данных. Вы избавитесь от этих ошибок, если переименуете русское имя каталога в латинское.
Проблемы при выполнении назначенного задания
Вы создали задание, но оно не запускается в назначенное время. Чтобы
разобраться, в чём причина, необходимо открыть карточку этого задания и
проверить следующее:

Убедитесь, чтобы был установлен флажок «Разрешено (задание будет выполняться в назначенное время)».
Рис. 6-11 – Необходимое условие для выполнения задания

На вкладке «Расписание» проверьте правильность составленного
расписания.
Если задание выполнилось, но выявлены ошибки. Проверьте, указаны ли
все необходимые для выполнения этого задания параметры, а также их
правильность.
16
Резервное копирование БД
Если все выше описанные рекомендации выполнены, а задание всё равно
не удается запустить, необходимо проверить включена ли служба планировщика заданий. Для этого нужно проверить, чтобы в программе «Службы» (Пуск/ Панель управления/ Администрирование) в свойствах планировщика заданий было указано состояние «Работает» с типом запуска
«Авто».
Если пользователь, от имени которого выполняется архивация,
не вошёл в систему к моменту запланированного запуска задания, задание начнёт выполняться, но останется скрытым.
Описание утилиты архивации
Функциональные возможности утилиты
На любом предприятии имеется база данных (или другой информационный ресурс), которая изменяется с течением времени. Поэтому необходимо обеспечивать регулярное резервирование этой базы данных, создавая
архивные копии. Можно делать и хранить копии за каждый день, но это
неэффективно: со временем количество и объем архивов возрастает, в то
время как большая часть этих архивов не нужна.
Разумнее воспользоваться следующей схемой: первое время (например,
первую неделю) хранить все архивы без исключения, так как в этот период наиболее велика вероятность восстановить данные из архива. Так,
например, архивы за последний месяц можно хранить в количестве один
архив в неделю, за год – один архив в месяц, архивы старше 1 года – можно вообще не хранить.
Таким образом, объем накопленных архивов, начиная с определенного
момента, перестает увеличиваться, и можно будет не опасаться за переполнение диска, на котором хранятся все архивы, а распределение архивов
будет соответствовать их актуальности.
С этими задачами и справляется утилита архивации.
Типы запуска утилиты sbis_update_backup.exe
Запуск утилиты осуществляется файлом sbis_update_backup.exe. Утилита
требует, чтобы вместе с ней находился любой архиватор: 7za, winrar, и
др. В параметрах командной строки обязательно должны быть указано:
17
Глава 6. Обслуживание базы данных

Откуда архивировать – полный путь к файлам или каталогу с файлами, которые требуется архивировать. Например, *.tbl – будут заархивированы все файлы с данными, *.* - заархивировать не только
файлы с данными, но и индексы, двоичные данные, и прочие файлы.
Если указать каталог, то в архиве будет этот каталог вместе с архивными файлами.

Куда – полный путь к папке, в которой будут храниться архивы. Если
в качестве параметра передается каталог, который не создан, при отработки утилиты он будет создан и в него будут помещены архивные
файлы.

Префикс – любой допустимый символ или строка символов, которая
будет добавлена в имя создаваемого архива. Например, чтобы различать архивы с данными можно в качестве префикса указать «DB». Запрещено использовать префиксы: «/\», «:», «*», «?», «"», «<», «>», «|»,
«_».
Формат файла sbis_update_backup.ini
Для правильной архивации используются параметры, прописанные в iniфайле.
Типовая настройка файла sbis_update_backup.ini выглядит следующим
образом:
[Main Section]
#Период, в течение которого архивы не удаляются
EveryDayPeriod=7
#Период, в течение которого хранится 1 архив в
неделю
OncePerWeekPeriod=30
#День недели, в который нужно оставить архив
OncePerWeekPeriod
#Если параметр не указан, по умолчанию принимается
пятница
DayOfWeek=FRIDAY
#Период, в течение которого хранится 1 архив в месяц
OncePerMonthPeriod=365
#Строка запуска архиватора
ArchivatorCommand=7za.exe -y -r -tzip a
Файл настройки должен лежать в одном каталоге вместе с самой утилитой
sbis_update_backup.ini.
18
Проверка базы данных
Результат выполнения
В соответствии с заданными условиями:

из папки с архивами удаляются все лишние копии;

создается
архив
с
<Год>_<Месяц>_<День>_<Префикс>_<НомерАрхива>;

результат выполнения записывается в файл log.txt.
именем
Проверка базы данных
С помощью программы «Jinnee» можно изменять экранные формы комплекса, а также добавлять новые поля в базу данных, что позволяет модифицировать программу СБиС++ под нужды конкретного пользователя.
Кроме этого, программа используется для обслуживания базы данных. Эта
программа позволяет «вручную» корректировать данные, выполнять оптимизацию и конвертацию базы данных при установке новой версии
СБиС++. С ее же помощью производится проверка базы данных.
Предварительные шаги
При возникновении аварийных ситуаций (сброс питания, разрыв сети и
так далее) возможно появление сбоев в файлах базы данных. Для выявления и устранения этих проблем необходимо регулярно (не реже одного
раза в сутки!) выполнять проверку базы данных.
Проверка базы данных выполняется в программе «Jinnee», причем, в случае сетевого режима работы СБиС++, каталог с «Jinnee» может находиться
как на сервере в каталоге СбиС++, так и на рабочей станции. Для ускорения выполнения проверки лучше выбрать более быстрый с большим объемом памяти компьютер.
Прежде чем приступить к проверке (как и к любому другому действию с
БД), необходимо выполнить ряд перечисленных ниже процедур.
Создать резервную копию БД
Так как в случае аварийного завершения некоторых операций с БД возможно разрушение и потеря данных, необходимо сделать резервную копию базы данных до выполнения проверки. Проще всего сделать это средствами комплекса СБиС++ - выполнить команду «Главное меню/ База
19
Глава 6. Обслуживание базы данных
данных/ Сохранить базу данных» в задаче «Администратор», либо
просто скопировать весь каталог БД на другой диск.
Доступ к БД
При выполнении проверки локальной базы данных необходимо выйти из
программы СБиС++.
При работе с сетевой базой данных необходимо, чтобы у
пользователя, выполняющего проверку, был полный доступ к
каталогу БД (даны права на удаление и создание файлов/каталогов).
Если в программе СБиС++ заведены пользователи с определенными правами, то к выполнению проверки в «Jinnee» будет допущен только пользователь с правами «Администрирование базы данных».
Выполнение проверки БД
Проверка по команде пользователя
Для запуска проверки необходимо выполнить команду «Главное меню/
База данных/ Проверить базу данных». Выбрав каталог базы данных,
будет предложено выбрать таблицы из предложенного списка, которые
надо проверить.
20
Проверка базы данных
Рис. 6-12 – Выбор таблиц БД для проверки
Проверяться будут все отмеченные в окне таблицы (по умолчанию, предлагается проверить все таблицы). Отметив нужные таблицы, нажимайте
кнопку «Далее>» или <Enter>. Запустится выполнение проверки.
21
Глава 6. Обслуживание базы данных
Рис. 6-13 – Фрагмент выполнения проверки БД
Проверка осуществляется последовательно для каждой таблицы БД. В
любой момент можно прервать процесс, нажав кнопку «Прервать», либо
<Esc>.
Если после окончания проверки, ошибок не обнаружено, то будет выдано
соответствующее сообщение. Если в каких-то таблицах выявлены ошибки,
будет сформирован протокол проверки БД:
Рис. 6-14 – Окно протокола проверки БД
В этом протоколе перечисляются названия таблиц с ошибочными записями и краткое описание ошибки (подробнее будет описано ниже). Протокол автоматически сохраняется в текстовом файле следующего формата
chk-<ГГ-ММ-ЧЧ-NNN>.tmp в каталоге проверяемой базы данных, где
22
Проверка базы данных
«ГГ-ММ-ЧЧ» – дата создания архива (год, месяц, день); «NNN» – порядковый номер протокола, созданного в пределах текущей даты.
При нажатии <Enter> на записи в протоколе откроется окно просмотра и
редактирования этой таблицы. В этой таблице записи с ошибками отмечены другим цветом:
Рис. 6-15 – Просмотр ошибок, выявленных при проверке
С этими записями можно выполнять те же самые действия, что и с другими записями. Так, используя команду «Заполнить по шаблону», можно
сразу у всех ошибочных записей отредактировать одинаковые поля.
Автоматическая проверка БД
Проверка сетевой БД стандартными методами, описанными выше, может
занимать продолжительное время, поэтому в этом случае целесообразно
настроить автоматическую проверку в любое удобное для пользователя
время.
Файлы, необходимые для выполнения автоматической проверки БД, лежат в каталоге «Обслуживание_базы_данных», расположенном на сервере в каталоге установленной программы СБиС++:

sbis_check_db.bat – программа проверки БД;

blat\*.* - программа для отправки писем по email.
Последовательность действий, выполняемых при проверке, рассматривается при описании командного файла sbis_check_db.bat.
Прежде, чем приступить к выполнению проверки, внимательно изучите файл ReadMe.txt, который прилагается вместе с
23
Глава 6. Обслуживание базы данных
программой, и выполните необходимые рекомендации, изложенные в
этом файле.
Программа проверки БД (sbis_check_db.bat)
При описании данного файла мы предполагаем, что программа СБиС++
установлена на сервере в каталог «С:\SBIS». Соответственно, если у вас
программа установлена в другой каталог, необходимо прописать в команде для проверки БД средствами СБиС++ соответствующий путь к утилите
«Jinnee».
Обратите внимание, что в этой же команде необходимо
указать имя и пароль пользователя СБиС++ с правами администрирования БД.
Вся информация о ходе выполнения проверки фиксируется в файле
sbis_check_db.log, который создаётся в каталоге, где лежит и сам скрипт.
Создание задания автоматической проверки БД
Для запуска программы проверки в любое назначенное время удобнее всего воспользоваться средствами операционной системы MS Windows,
например, «Назначенные задания» (для англоязычной операционной системы – «Shedule Tasks») на панели управления.
Рис. 6-16 – Назначения задания для проверки БД
24
Проверка базы данных

Для создания задания для автоматической проверки воспользуйтесь
командой «Добавить задание» и последовательно пройдите все шаги
мастера планирования заданий, выполняя все необходимые действия
мастера (задание периодичности, начало выполнения задания, указание пользователя, от имени которого будет выполняться задание и
т.д.).

После этого, в карточке задания необходимо прописать полный путь к
программе проверки с указанием всех параметров, с которыми запускается эта программа:
Рис. 6-17 – Задание командного сценария проверки БД

На вкладке «Расписание» проверьте и, если нужно, подкорректируйте
расписание для выполнения задания:
Рис. 6-18 – Создание расписания для выполнения проверки
25
Глава 6. Обслуживание базы данных
Выполнив правильно все необходимые действия, будет вызываться соответствующая программа проверки, согласно установленному в задании
расписанию.
Возможные ошибки и их исправление
Исправлять ошибки в базе данных можно либо удаляя сбойную запись,
либо так исправляя поля сбойной записи, чтобы она больше не была таковой. Выполнять эти действия нужно с пониманием характера неисправности и последствий предпринимаемых действий.
Самый лучший способ исправления ошибок в базе данных это восстановление резервной копии базы данных.
Ошибки в базе данных могут быть вызваны двумя причинами
- нарушением физической целостности файлов данных или
нарушением логической целостности данных. Причем, как
правило, первое приводит и ко второму, то есть нарушения в
структуре файлов данных приводят к нарушению логической
целостности данных. Обратное, к счастью, неверно.
Ошибки в структуре файлов
(нарушения физической целостности)
Эти ошибки возникают при серьезных авариях в работе системы - сброс
питания, крах файловой системы, сбои в работе аппаратной части. В результате подобных событий в таблицах базы данных может возникнуть
«мусор» (какие-то случайные данные) и могут быть потеряны значительные объемы данных. Поэтому при возникновении таких ошибок в базе
данных самое лучшее решение, и может быть единственно возможное,
восстановить резервную копию базы данных.
Программа Jinnee может проверять физическую целостность только TBLфайлов. Итак, что может происходить при проверке TBL-файлов. Каждый
TBL-файл разбит на блоки фиксированной длины кратной 512 байт. При
обнаружении ошибки в файле могут выдаваться сообщения - «Ошибка в
блоке XXXX таблицы ‘ХХХХ’!», «Разрушен блок данных ХХХХ».
Ошибка в блоке может «задеть» какую-то конкретную запись. В этом случае будет выдан запрос - «Разрушена запись XXXX! Корректировать
блок данных?». Если ответить «Да», программа сохраняет, по возможно26
Проверка базы данных
сти, информацию из сбойного блока. Очень может быть, что после коррекции некоторые записи этого блока будут содержать случайные данные.
Если нет никакой надежды восстановить разрушенный блок данных, выводится запрос - «Удалять разрушенный блок данных?». В этом случае
по ответу «Да» все записи из этого блока будут удалены.
Почти всегда после сообщений подобного рода следует огромный список
нарушений логической целостности базы данных, поэтому лучше восстановить резервную копию базы данных.
Ошибки в данных (нарушения логической целостности)
Поскольку в словаре данных хранится не только информация о структуре
таблиц базы данных, но и о связях между таблицами, есть возможность
проверить корректность базы данных. При нормальной работе программы
нарушений связей между таблицами не происходит. Но в результате сбоя
системы, нарушений в физической целостности базы данных могут возникнуть какие-то ошибки в записях. Все эти нарушения отлавливаются
при проверке базы данных программой Jinnee.
Рассмотрим теперь подробнее возможные неисправности и возможные
действия по исправлению ошибки. В любом случае всегда есть кардинальное, но не оптимальное решение - удалить ошибочную запись. Удалять, как правило, имеет смысл, только если вся запись испорчена, или если в базе данных содержится две одинаковые записи. Итак, возможные
ошибки:
Ошибка «Не найдена запись»
Ошибка возникает, если в поле, которое должно ссылаться на другую запись, содержится ссылка, указывающая «в никуда».
Рис. 6-19 – Фрагмент ошибки «Не найдена запись»
То есть в поле записан определенный адрес записи, а в связанной таблице
такой записи нет.
27
Глава 6. Обслуживание базы данных
Рис. 6-20 – Переход к связанной записи
В нашем примере это выглядит так: запись с адресом
00000001 из таблицы «Разовые н/у» ссылается на связанную
запись из таблицы «Расчёты» с адресом 00000732. Если
перейти по связи в «Расчёты», то будет выдано сообщение
об отсутствии данной записи в таблице.
Рис. 6-21 – Предупреждение об ошибке
Исправить эту ошибку можно двумя путями - ввести в поле правильный
адрес, если, конечно, известно верное значение. Или ввести «нулевую
ссылку» - значение «нет».
Ошибка «Связь не один в один»
Эта ошибка возникает в связях типа «один к одному» или «условная
связь».
28
Проверка базы данных
Рис. 6-22 – Фрагмент ошибки «Связь не один в один»
Эти связи организованы так, что обе связанные записи ссылаются друг на
друга. Если же запись A ссылается на запись B, а та в свою очередь ссылается не на А, как должна бы, а на C, то будет выдано сообщение «связь не
один в один». Для устранения таких ошибок нужно разобраться, кто же на
кого, в конце концов, должен указывать.
Рис. 6-23 – Просмотр ошибочных записей
Например,
таблицы
«Сотрудники»
и
«Сотрудники(расширение)» связаны между собой отношением «один к
одному». В нашем примере эта связь нарушена: запись
00000000 из таблицы «Сотрудники» ссылается на запись
00000001 из таблицы «Сотрудники(расширение)». На эту
же запись ссылается и запись 00000002 из таблицы «Сотрудники».
29
Глава 6. Обслуживание базы данных
Рис. 6-24 – Переход к связанной записи
В свою очередь, запись 00000001 из таблицы «Сотрудники(расширение)» ссылается не на запись 00000000, а на запись 00000002 из таблицы «Сотрудники». Для исправления
ситуации, необходимо либо удалить ошибочную запись
00000000, либо в поле связи указать значение «нет».
Это простейший и самый распространенный случай. Теоретически могут
быть и более сложные вариации.
Начиная с версии 2.2, добавлена возможность объединения «двойников»
таблицы «Лица». У всех, кроме одной, дублирующихся записей по полю
«Лицо_» требуется проставить значение «Нет», далее эти записи отбираются пробелом и объединяются с записью, в которой значение поля «Лицо_» было оставлено.
Ошибка «Ссылается не на узел»
Ошибка может возникнуть в иерархии, если какая-то запись ссылается не
на узел, а на лист иерархии.
30
Проверка базы данных
Рис. 6-25 – Фрагмент ошибки «Ссылается не на узел»
Запись 00000008 ссылается на запись 00000005, которая, в
свою очередь, является листом и лежит в корне таблицы. По
определению на лист иерархии не должна ссылаться никакая
запись.
Самое простое в такой ситуации - для всех записей, которые ссылаются на
лист, поставить в поле иерархии значение «корень», при этом не надо изменять признак, обозначающий, является ли сама запись узлом или листом.
Рис. 6-26 – Вариант исправления ошибки
После такой операции все исправленные записи окажутся в корне соответствующего справочника СБиС++, и их можно будет переместить в нужное
место стандартными операциями. Такое может не пройти для складской
картотеки и для реестра документов, так как в корне этих таблиц могут
находиться только специальные записи. Это уже специфика комплекса
СБиС++. В этом случае нужно найти запись-узел и вместо ссылки на корень ввести ссылку на этот узел.
31
Глава 6. Обслуживание базы данных
Ошибка «Неверный номер условной таблицы»
Ошибка, появляющаяся только в условной связи в записях общей таблицы.
Рис. 6-27 – Фрагмент ошибки «Неверный номер условной таблицы»
Напомним, что с одной стороны условной связи находится одна таблица,
записи которой могут ссылаться на разные таблицы. В поле записи общей
таблицы хранится название таблицы (определяемое по коду в словаре
данных), на которую ссылается эта запись. Как видно из примера, запись
00000000 из таблицы «Лица» ссылается на таблицу «Номенклатура». При
сбое в программе может случиться так, что в этом поле будет указан код
несуществующей таблицы. В нашем примере, запись 00000002 ссылается
на несуществующую таблицу с кодом «А».
Исправить ошибочную ситуацию можно следующими способами:

наилучшим вариантом будет восстановить резервную копию БД;

либо указать в поле общей таблицы название правильной таблицы,
либо «нулевую ссылку» - значение «нет» (крайний вариант); в этом
случае, советуем воспользоваться командой «Заполнить по шаблону»
для редактирования сразу группы записей.
Ошибка «Неверные данные в поле»
Эта ошибка может возникнуть в поле любого типа, не только в поле связи.
Означает она, что значение в этом поле не удовлетворяет внутренним
ограничениям поля. Например, для полей типа «целое» проверяется, входит ли число в определенный диапазон (задается разработчиком приложения).
32
Конвертация базы данных
Чтобы исправить эту ошибку, нужно ввести корректное значение в ошибочное поле. Если же большинство полей записи содержат явно ошибочные данные, лучше просто удалить эту запись.
Ошибка «Неверные данные в большом двоичном поле»
Эта ошибка может возникать при аварийном отключении питания, разрушении файловой системы или сбое в работе аппаратной части. В результате подобных событий в таблицах базы данных могут быть потеряны значительные объемы данных.
Для устранения таких ошибок необходимо выполнить оптимизацию тех
таблиц, данные в которых были разрушены.
Заключение
Поскольку удаление или изменение с помощью «Jinnee» записи базы данных может привести к нарушениям логической целостности, следует,
«разобравшись» со всеми ошибочными записями, повторить проверку до
полного отсутствия ошибок в базе данных.
Если была выявлена ошибка, описание которой не рассматривалось в данном руководстве, то за подробным разъяснением дальнейших действий по
устранению этой проблемы, можно обратиться к специалистам по телефонам «Горячей линии СБиС++».
Конвертация базы данных
Запрос на выполнение конвертации базы данных возникает в том случае,
если словари в базе данных не соответствуют словарям в модулях. Каждый раз при запуске СБиС++ (при выполнении «sbis.exe») программа проверяет это соответствие. И если обнаруживается несоответствие, программа известит, какие словари не соответствуют друг другу:
33
Глава 6. Обслуживание базы данных
Рис. 6-28 – Фрагмент ошибки «Неверный номер условной таблицы»
В этом случае рекомендуется выполнить конвертацию базы данных, т.е.
привести в соответствие словари (файлы «.dic») в каталоге <db> и в каталоге <Модули>.
При выборе ответа «Да» запустится автоматическая архивация базы данных. Архивная копия сохраняется в каталоге <db>\<ДД-ММ-ГГ>.
Для того, чтобы архивация базы и модулей не запускалась при
конвертации базы, укажите в параметре «Джинн» в файле
sbis.ini ключ /nb.
34
Конвертация базы данных
Рис. 6-29 – Настройка конвертации без архивации
Запуск конвертации
Нажмите «Да» для начала конвертации базы. В результате последует автозапуск Джинна в соответствии с настройками параметра «Джинн» в файле
<СБиС++>\ sbis.ini.
При успешном запуске Джинна открывается стартовое окно конвертации
базы. Если в базе настроены пользователи, для доступа к базе потребуется
ввести логин и пароль пользователя с правами администратора. В противном случае процесс конвертации будет прерван.
35
Глава 6. Обслуживание базы данных
Рис. 6-30 – Выполнение конвертации БД
В процессе конвертации открываются таблицы соответствия файлов базы
данных. Для продолжения конвертации нажимайте «Далее>», какие-либо
изменения в таблицы соответствия вносить не требуется.
Рис. 6-31 – Соответствие таблиц БД
36
Конвертация базы данных
Завершение конвертации
Если конвертация базы завершилась успешно, автоматически следует перезапуск СБиС++ и регистрация обновленных модулей.
Если при конвертации базы возникли проблемы, и она не была завершена
успешно, по завершении конвертации последует сообщение с описанием
проблемы. В этом случае верните базу из копии, запустите Джинна и
сконвертируйте базу вручную.
Запуск конвертации вручную
При переходе на новую версию конвертация базы обязательна! Если по
каким-то причинам база осталась несконвертированной, восстановите базу
из копии и сконвертируйте её вручную.
Для этого, выполните <СБиС++>\ jinnee\ jinnee.exe и в открывшемся
Джинне нажмите кнопку
. В результате открывается диалоговое окно с настройками параметров конвертации.
Рис. 6-32 – Настройка параметров конвертации
37
Глава 6. Обслуживание базы данных
Укажите путь к каталогу базы данных и каталогу модулей.
Если необходимо создать архивную копию БД установите флаг в поле
«Делать архивные копии файлов в» и укажите каталог, куда их сохранять.
С помощью переключателя укажите необходимый формат БД.
В поле «Дополнительный конвертор» выберите: «Определять автоматически».
Для запуска конвертации нажмите «Далее>».
По завершении конвертации выйдите из Джинна и запустите СБиС++.
При запуске СБиС++ последует регистрация модулей. Следует дождаться
её окончания.
Регистрация изменений в БД
При работе с программой пользователям приходиться выполнять различные действия: это и регистрация обновленных модулей, и конвертация БД,
и создание (удаление | изменение) данных и т.д. В связи с этим возникает
необходимость регистрации вышеперечисленных изменений в системе,
чтобы в дальнейшем было легче разбираться. Для этих целей в программе
предусмотрен «Журнал изменений» (меню «База данных»):
Рис. 6-33 – Окно журнала изменений
Для начала необходимо настроить режим автоматической регистрации
всех событий в журнале, установив флаг в поле «Регистрировать изменения в базе данных» в окне «Параметры базы данных» (меню «База
данных»):
38
Регистрация изменений в БД
Рис. 6-34 – Параметры БД
С этой минуты все изменения, происходящие в базе данных, будут фиксироваться в журнале изменений.
В процессе работы с программой объем информации в журнале будет постоянно расти, что существенно повлияет на
общий размер данных в базе. Поэтому мы настоятельно рекомендуем периодически (достаточно одного раза в год) «чистить» его. Для этого в контекстном меню окна с журналом
предусмотрена команда «Очистить журнал».
39
Глава 6. Обслуживание базы данных
Рис. 6-35 – Вызов команды «Очистить журнал»
Параметры отбора записей
Как мы уже говорили действия, совершаемые пользователем в программе,
очень разнообразны и все они фиксируются в журнале. Возникает необходимость как-то упростить работу пользователя с журналом. И такая возможность в программе предусмотрена: установив нужные критерии отбора в окне «Параметры выборки» (<Ctrl+Q>), список записей в журнале
будет ограничен, и пользователь увидит только те из них, которые удовлетворяют установленным критериям:
40
Регистрация изменений в БД
Рис. 6-36 – Параметры выборки

«С…по…» - можно отобрать записи только за определённый период,
причем не только по дате можно построить отбор нужных записей, но
и по времени.

«Компьютер» - если указать имя конкретного компьютера, то будут
отобраны только изменения, сделанные пользователя в БД на этом
компьютере. Имя компьютера прописывается в столбце «Пользователь», например «.SBIS-SERVER2».

«Пользователь» - можно отобрать записи об изменениях в БД, сделанные конкретным пользователем. Имя пользователя прописывается
в столбце «Пользователь» до названия компьютера, например
«СИДОРОВ.SBIS-SERVER2».

Таблица «Действия». В столбце «Описание» перечислены наиболее
вероятные действия, которые могут происходить в БД, а в столбце
«Строка в журнале» - идентификация этих действий в журнале. Для
отбора конкретного действия в журнале установите флаг «Использо41
Глава 6. Обслуживание базы данных
вать». По умолчанию в журнале отображаются все перечисленные
действия (все флаги установлены).
При желании пользователь всегда может добавить в
описание другие, не указанные в таблице, действия. Для
этого необходимо открыть файл «Базовые ресурсы.rs»
(<Alt+F12>). В папке «База данных/ Журналы» открыть
коллекцию записей «События в журнале изменений»:
Рис. 6-37 – Добавление нового события
В появившемся окне добавьте (<Ins>) новое событие. При
сохранении новая запись появится в окне параметров выборки.
42
Регистрация изменений в БД

Флаг «Показывать не перечисленные выше действия» - при установке флага в журнал изменений будут выводиться все записи об изменениях в БД, перечисленные и не перечисленные в таблице.

«Комментарий (подстрока)» - можно отобрать записи, в которых
значится указанная в этом поле подстрока. Например, можно отобрать
только записи со словом «Лицо».
43
Download