Системные таблицы Celesta

Материал из Course Orchestra
Перейти к: навигация, поиск
Внимание! Вы просматриваете документацию к Celesta 6.x. Документация по Celesta 7.x доступна на courseorchestra.github.io/celesta.

1. Справочник Celesta

1.1 Введение и основные понятия
1.2 Запуск и авто-обновление
1.3 Базовая настройка
1.4 Системные таблицы
1.5 CelestaSQL
1.6 CelestaDoc
1.7 Контексты сессии и вызова
1.8 Курсоры
1.9 BLOB-поля
1.10 Option-поля
1.11 Защита от потерянных обновлений
1.12 Метаданные Celesta
1.13 CelestaUnit

2. Celesta и базы данных

2.1 Особенности работы Celesta с поддерживаемыми типами СУБД
2.2 Проектирование базы данных Celesta в DBSchema

3. Создание решений с использованием Celesta для ShowCase

3.1 Программа обучения Celesta
3.2 Подготовка рабочего места для работы с Celesta
3.2.1 Для разработчиков платформы
3.2.2 Для разработчиков решений
3.3 Системные гранулы Celesta
3.3.1 common
3.3.1.1 Экспорт/импорт данных
3.3.1.2 Навигатор
3.3.1.3 Серии номеров
3.3.1.4 Иерархия Дьюи
3.3.1.5 Системные функции
3.3.1.6 Реестр настроек
3.3.1.7 Mailsender
3.3.1.8 Common.filter
3.3.2 common.api
3.3.4 security
3.3.3 lyra
3.4 Стандартные гранулы Celesta
3.4.1 dirusing
3.4.2 workflow
3.4.3 File repository
3.5 Отрисовка элементов Showcase при помощи Celesta
3.5.1 Конвертер XML-JSON
3.5.2 Навигатор (Navigator)
3.5.3 Информационная панель (Datapanel)
3.5.4 Серверное действие (Server activity)
3.5.5 Вебтекст (WebText)
3.5.6 Грид (Grid)
3.5.6.1 Панель инструментов (ToolBar)
3.5.7 XForms
3.5.7.1 Селекторы
3.5.7.2 Submission
3.5.7.3 Загрузка/Выгрузка файлов (Upload/Download)

5. Решение проблем

5.1 Проблемы с кодировкой jython-файлов

Структура системной гранулы "celesta"

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

Структура (в том числе состав полей) таблиц, относящихся к системной грануле "celesta", не подлежит изменению, а для доступа к их данным используются встроенные классы из пакета ru.curs.celesta.syscursors. Тем не менее, изменение данных в части из этих таблиц является частью штатной, необходимой настройки системы.

Системные таблицы предназначены для:

  • Координирования автоапдейта (таблица celesta.grains, подробно описанная в данном руководстве).
  • Распределения прав доступа к таблицам и представлениям.
  • Настройки системы логирования и хранения логов.

Celestagrain.png

Назначение таблиц:

  • celesta.grains — перечень гранул со статусами. Ведётся автоматически, ручные изменения разработчиком решений сводятся к выставлению статуса "recover" на грануле после неудавшейся попытки автообновления и к удалению записи об удалённой грануле.
  • celesta.tables — перечень таблиц и представлений. Содержимое данной таблицы автоматически синхронизируется с перечнем таблиц и представлений, доступных в гранулах Celesta, пользователю не следует вмешиваться в данные этой таблицы (в любом случае изменения будут потеряны при следующей синхронизации). Поле tabletype указывает на то, является запись таблицей ("T") или представлением ("V").
  • celesta.roles — перечень ролей celesta. Сюда следует вручную добавлять роли, в том числе роли с системными именами "reader", "editor" и т. д. (о ролях с системными именами см. ниже).
  • celesta.userroles — связь идентификаторов пользователей (логинов) с ролями. Заполняется вручную.
  • celesta.permissions — разрешения ролям на таблицы. Заполняется вручную.
  • celesta.logsetup — настройки логирования. Заполняется вручную.
  • celesta.log — лог изменений. Заполняется системой автоматически при каждом изменении данных, однако данные пишутся лишь по таблицам и действиям, указанным в celesta.logsetup.
  • celesta.sessionlog — лог аутентификации (входов в систему) и выходов из системы (окончания пользовательских сессий). Заполняется системой автоматически при включенной опции log.logins.

Таблица celesta.grains

Данная таблица является важнейшей из системных таблиц Celesta, т. к. её содержимое управлет синхронизацией структуры базы данных с метаданными в момент запуска системы. Таблица содержит следующие поля:

Имя поля Тип поля Значение поля
id varchar(16) имя (код) гранулы
version text version tag гранулы
length int длина creation-скрипта гранулы в байтах (составляющая часть контрольной суммы)
checksum int CRC32 creation-скрипта гранулы (составляющая часть контрольной суммы)
state int статус гранулы:
  • 0 – ready — гранула развёрнута и готова к использованию (при этом её version tag и контрольная сумма записаны в полях version, length, checksum).
  • 1 – upgrading — гранула находится в процессе создания или апгрейда другим приложением Celesta, подключённым к базе данных.
  • 2 – error — последняя попытка автообновления завершилась неудачно, в этом случае в поле message находится сообщение об ошибке
  • 3 – recover (эквивалент — отсутствие записи в таблице grains при наличии гранулы в папке score) — гранула отсутствует или нуждается в регенерации (например, после ошибки апгрейда)
  • 4 – lock — гранула не нуждается в автоматическом обновлении структуры ни при каких обстоятельствах.
lastmodified datetime дата и время последнего обновления статуса гранулы
Message text комментарий (например, сообщение об ошибке при последнем неудавшемся автообновлении)

Система распределения прав доступа

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

В поле roleid указывается идентификатор роли, в полях grainid и tablename — ссылка на таблицу. В битовых полях r, i, m, d выставляются флаги, если необходимы права, соответственно, на чтение, вставку, модификацию и удаление.

Предусмотрены также специальные, системные имена ролей: reader и editor, а также роли вида <имя гранулы>.reader и <имя гранулы>.editor.

Роль reader даёт право на чтение всех без исключения таблиц, роль <имя гранулы>.reader (например, "skk.reader") даёт право на чтение всех таблиц в соответствующей грануле.

Роль editor даёт полные права (на чтение, вставку, модификацию и удаление) всех таблиц. Роль <имя гранулы>.editor (например, "skk.editor") даёт полные права на все таблиц в соответствующей грануле.

Система аудита входов в систему

При включённой опции log.logins (см. Базовая настройка Celesta) система производит запись в таблицу celesta.sessionlog информацию обо всех событиях входа в систему и выхода из неё. Таблица celesta.sessionlog содержит следующие поля:

Имя поля Тип поля Значение поля
entryno INT автоинкрементируемый целочисленный номер записи в таблице лога
sessionid VARCHAR(250) идентификатор сессии
userid NVARCHAR(250) идентификатор пользователя, от имени которого работает сессия
logintime DATETIME время начала сессии (входа в систему)
logouttime DATETIME время конца сессии (выхода из системы). NULL, если сессия не завершилась.
timeout BIT признак того, что завершившаяся сессия закрылась по таймауту.
failedlogin BIT признак того, что произошла неудачная попытка входа (в этом случае идентификатор сессии будет пустым).

Система логирования

При любом изменении данных, производимых через курсоры Celesta, работает не только система распределения прав доступа, но также и система логирования изменений данных, записывая все изменения в таблицу celesta.log. Однако, чтобы celesta.log не засорялась потенциально огромным количеством ненужных данных, логируются лишь изменения на таблицах, явно указанных в таблице celesta.logsetup. Более того, имеется возможность отдельно включать логирование вставки, модификации и удаления записи.

Для того, чтобы включить логирование изменений данных таблиц, производимых через систему Celesta, необходимо занести соответствующие настройки в таблицу celesta.logsetup. При этом в полях grainid и tablename указывается ссылка на таблицу, а в битовых полях i, m, d выставляются флаги, если необходимо логирование, соответственно, вставки, модификации и удаления.

Таблица celesta.log состоит из следующих полей:

Имя поля Тип поля Значение поля
entryno INT автоинкрементируемый целочисленный номер записи в таблице лога
entry_time DATETIME время записи
userid VARCHAR(250) идентификатор пользователя, от имени которого произведено изменение
sessionid VARCHAR(250) идентификатор пользовательской сессии, в рамках которой произведено изменение
grainid VARCHAR(16) идентификатор гранулы
tablename VARCHAR(100) имя таблицы
action_type VARCHAR(1) тип действия (I для вставки, M для модификации, D для удаления)
pkvalue1 varchar(100) значение первого поля первичного ключа (сведённое к текстовому типу)
pkvalue2 varchar(100) значение второго поля первичного ключа (если есть, сведённое к текстовому типу)
pkvalue3 varchar(100) значение третьего поля первичного ключа (если есть, сведённое к текстовому типу)
oldvalues varchar(4000) прежнее состояние записи (поля сведены к тексту и перечислены через запятую в формате CSV, информация обрезана по длине поля). Значение поля заполняется для действий M и D
newvalues varchar(4000) текущее состояние записи в том же формате, что и в поле oldvalues. Заполняется для действий M и I

Система профилирования

Для поиска и устранения проблем, связанных с быстродействием, Celesta может работать в режиме профилирования, включаемом при помощи метода setProfilemode(true) экземпляра Celesta.

В режиме профилирования информация обо всех вызовах процедур записывается в таблицу calllog, состояющую из следующих полей:


Имя поля Тип поля Значение поля
entryno INT автоинкрементируемый целочисленный номер записи в таблице лога
sessionid VARCHAR(250) идентификатор пользовательской сессии, в которой была запущена процедура
userid VARCHAR(250) идентификатор пользователя, от имени которого работала пользовательская сессия
procname VARCHAR(250) имя выполнявшейся процедуры (трёхкомпонентное имя процедуры Celesta)
starttime DATETIME время начала выполнения процедуры
duration INT общее время выполнения процедуры (в миллисекундах)