Завершить работу СУБД

Назначение
 

Команда 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;
  }