Останов ядра СУБД ЛИНТЕР
Назначение
Останов ядра СУБД ЛИНТЕР.
Синтаксис
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");
}