Завершить работу СУБД
Назначение
Команда
SHUT
предназначена для завершения работы СУБД ЛИНТЕР.
Команда может выполняться в канальном и неканальном режимах.
Параметры вызова
-
канальный вариант:
inter(CBL, NULL, [OpBuf], [CondBuf], NULL); -
неканальный вариант:
inter(CBL, VarBuf, [OpBuf], [CondBuf], NULL).
Входные данные
Канальный вариант команды
Входными данными являются:
-
контрольный блок
CBL; -
буфер SQL-запросов
OpBuf.
В контрольном блоке должны быть заполнены поля:
| Имя поля | Значение | |
|---|---|---|
Command
|
"SHUT"
| |
Node
| Имя ЛИНТЕР-сервера | |
NumChan
| Номер канала, по которому должна быть выполнена команда SHUT | |
RowId
| Указание на способ обработки незавершенных транзакций: -1 – выполнить откат (rollback) |
Неканальный вариант команды
Входными данными являются:
-
контрольный блок
CBL; -
буфер параметров
VarBuf; -
буфер SQL-запросов
OpBuf.
В контрольном блоке должны быть заполнены поля:
| Имя поля | Значение | |
|---|---|---|
Command
|
"SHUT"
| |
Node
| Имя ЛИНТЕР-сервера | |
RowId
| Указание на способ обработки незавершенных транзакций: -1 – выполнить откат (rollback) |
Буфер параметров команды
VarBuf должен содержать имя и пароль пользователя с привилегиями
администратора БД.
Способы задания имени и пароля и механизм
идентификации и аутентификации по Kerberos-протоколу описаны в команде
OPEN.
Буфер SQL-запросов OpBuf может содержать имя устанавливаемой для
данного
канала кодовой страницы, которая должна быть известна СУБД (см. описание
алгоритма выборка кодовой страницы в команде
OPEN).
Выходные данные
Выходными данными является контрольный блок
CBL.
В нем будут возвращены:
| Имя поля | Значение | |
|---|---|---|
CodErr
| Код завершения запроса к СУБД ЛИНТЕР | |
SysErr
| Код состояния ОС |
Описание
Работа СУБД ЛИНТЕР завершается при условии, что в момент подачи
команды
SHUT
в ядре нет открытых каналов.
Код завершения команды
SHUT
возвращается только после закрытия всех файлов БД и СУБД.
Примечание
Асинхронное выполнение неканального варианта SHUT с идентификацией и аутентификацией по Kerberos-протоколу не поддерживается.
Коды завершения
| Код | Описание | |
|---|---|---|
| NORMAL | Нормальное завершение | |
| NOPRIVSHUT | В СУБД есть активные пользователи | |
| ERRPASSWORD |
Отсутствие прав (привилегий):
| |
| Invalid_User_Name | Указано имя незарегистрированного в БД пользователя | |
| Invalid_User_Passwd | Указан неправильный пароль зарегистрированного пользователя |
Пример формирования команды
#include < string.h >
#include < stdlib.h >
#include "inter.h"
L_LONG LinterSHUT(TCBL * pCBL, L_CHAR * Name_Pass, L_CHAR * Node)
{
memcpy(pCBL- >Command, "SHUT", 4);
if (strlen(Node) > MAX_NODE_LEN)
{
return SQLLONGID;
}
memset(pCBL- >Node, 0, MAX_NODE_LEN);
memcpy(pCBL- >Node, Node, strlen(Node));
pCBL- >PrzExe &= ~Q_ASYNC;
inter(pCBL, Name_Pass, NULL, NULL, NULL);
return pCBL- >CodErr;
}
Пример использования команды
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include "inter.h"
#include "exlib.h"
#ifndef WINCE
int main()
#else
int exshut()
#endif
{
TCBL CBLconnect;
L_CHAR Name_Pass[] = "SYSTEM/MANAGER8";
L_CHAR Node[] = " ";
L_WORD Priority = 0;
L_LONG PrzExe = M_EXCLUSIVE | Q_ENCODE | M_BINARY;
L_LONG Err;
memset(&CBLconnect,0,sizeof(TCBL));
Err = LinterOPEN(&CBLconnect, Name_Pass, Node, Priority, PrzExe);
if (Err != NORMAL)
PrintError(&CBLconnect);
printf("Connect to RDBMS Linter\n");
#if _VER_MAX >= 500
Err = LinterSHUT(&CBLconnect, Name_Pass, Node);
#else
Err = LinterSHUT(&CBLconnect, Node);
#endif
if (Err != NORMAL)
PrintError(&CBLconnect);
printf("SHUT RDBMS Linter\n");
printf("End Example\n");
return 0;
}