Останов ядра СУБД ЛИНТЕР
Назначение
Останов ядра СУБД ЛИНТЕР.
Синтаксис
L_LONG LinDatabaseControl(t_LINDBCtrl* LINDBCtrl, t_LinDatabaseCommand Command [,L_LONG Flags [,char *AddComand]]);
Входные данные
Входными данными являются:
-
инициализированная управляющая структура LINDBCtrl;
-
идентификатор
LIN_DATABASE_SHUT
команды «Останов ядра СУБД ЛИНТЕР»; -
флаги Flags, модифицирующие поведение команды;
-
необязательный аргумент AddCommand, содержащий командную строку для программы shut.
Допустимые флаги:
Флаг | Значение | |
---|---|---|
LIN_DATABASE_SHUT_IGNOREROLE | Разрешает выполнять останов «чужих» ядер СУБД ЛИНТЕР | |
LIN_DATABASE_SHUT_FORCE | Останов ядра выполнять с помощью посылки сигнала SIGKILL | |
LIN_DATABASE_SHUT_BY_SHUT_RUN | Останов ядра выполнять с помощью программы shut |
Выходные данные
Выходными данными является управляющая структура LINDBCtrl.
В управляющей структуре будут возвращены:
Имя поля | Значение | |
---|---|---|
RetStatus | Библиотечный код завершения | |
SysStatus | Системный код завершения |
Описание
В режиме умолчания (аргумент Flags не задан):
-
останов ядра СУБД ЛИНТЕР выполняется путем посылки ему сигнала SIGTERM;
-
остановлено может быть только ядро, запущенное данным клиентским приложением с использованием библиотеки
linctrl
; -
незавершенные транзакции не откатываются.
Если установлен флаг LIN_DATABASE_SHUT_IGNOREROLE
, функция выполняет останов любого ядра СУБД ЛИНТЕР, ранее запущенного как с помощью библиотеки linctrl
, так и с помощью средств ОС. В таком случае используемая в функции управляющая структура LINDBCtrl должна быть предварительно подготовлена с помощью команды LIN_DATABASE_ATTACH
.
Если установлен флаг LIN_DATABASE_SHUT_FORCE
, то останов ядра будет производиться путем посылки сигнала SIGKILL (вместо сигнала по умолчанию SIGTERM).
Если установлен флаг LIN_DATABASE_SHUT_BY_SHUT_RUN
, то останов ядра будет производиться путем вызова программы shut, поэтому в аргументе AddCommand должна быть передана строка, содержащая имя пользователя БД и его пароль в БД, разделенные символом «/».
Программа shut должна находиться в подкаталоге /bin
каталога, заданного в поле LinterPath управляющей структуры LINDBCtrl.
После останова ядра СУБД ЛИНТЕР pid уже остановленного ядра продолжает сохраняться в управляющей структуре LINDBCtrl. Это необходимо для отслеживания реального момента останова ядра командой LIN_DATABASE_ALIVE
.
Для отката всех незаконченных транзакций перед остановом ядра следует задавать одновременно флаги LIN_DATABASE_SHUT_FORCE
и LIN_DATABASE_SHUT_BY_SHUT_RUN
.
Возвращаемые значения
Функция возвращает:
-
0
– нормальное завершение; -
-1
– ядро не остановлено.
Коды завершения
Код | Описание | |
---|---|---|
E_LINCTRL_SHUTFAILED | Неудачный запуск программы shut. Уточняющий код завершения см. в поле SysStatus управляющей структуры LINDBCtrl | |
E_LINCTRL_KILLFAILED | Неудачная попытка посылки сигнала ядру | |
E_LINCTRL_RUN | Неудачный запуск программы shut | |
E_LINCTRL_NOMEM | Невозможность выделения динамической памяти для полей управляющей структуры LINDBCtrl | |
E_LINCTRL_LINPID | Неизвестный Pid останавливаемого ядра СУБД ЛИНТЕР (предварительно не выполнена команда LIN_DATABASE_ATTACH или LIN_DATABASE_RUN) | |
E_LINCTRL_ROLE | Попытка останова «чужого» ядра СУБД ЛИНТЕР без флага LIN_DATABASE_SHUT_IGNOREROLE |
Пример
#include < stdio.h > #include < stdlib.h > #include < string.h > #include "linctrl.h" #include "exlib.h" void PrintError(t_LINDBCtrl *LINDBCtrl); void main() { t_LINDBCtrl LINDBCtrl; CHAR LinterPath[]="/usr/linter"; LONGINT Err; Err=LINDBCtrlInit(&LINDBCtrl,LinterPath); if (Err != NORMAL) PrintError(&LINDBCtrl); printf("Initialisation LINDBCtrl\n"); Err=LinDatabaseControl(LINDBCtrl, LIN_DATABASE_SHUT, LIN_DATABASE_SHUT_FORCE); If (Err != NORMAL) PrintError(&LINDBCtrl); printf("Shutdown DBMS Linter\n"); printf("End Example\n"); }