Завершить работу СУБД
Назначение
Команда
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; }