|
| 9.Работа с сервисамиЭта глава охватывает InterBase API функции сервисов. Это средство позволяет Вам писать приложения, которые контролируют и управляют серверами InterBase и базами данных. Задачи, которые Вы можете выполнять с этими API, включают: - Выполнение задачи обслуживания базы данных типа резервного копирования и восстановление, остановка и перезапуск, сборка "мусора", и сканирование на предмет испорченных структур данных - Создание, изменение, и удаление пользователе в базе данных защиты - Управление программными сертификатами - Запросы информации о конфигурации баз данных и сервера 9.Работа с сервисамиЭтот раздел описывает основные концепции сервисных API, использование буфера параметров сервисов, и методы для подключение и отключение к Service Manager 9.1.1.Общая информацияСервисные API это группа функций в клиентской библиотеке (gds32.dll в Windows, libgds.a в UNIX/Linux). Сервисные API включены в утилиты gbak, gfix, gsec, gstatи iblicense, но естественно не все. Все серверы InterBase включают средство называемое Менеджером Сервисов(Services Manager). API Сервисы позволяют клиентским приложениям делать запросы к Менеджеру Сервисов сервера InterBase, и Менеджер Сервисов исполняет задачи. Сервер может быть локальный (на том же самом главном компьютере что и ваше приложение), или удаленный (на другом главном компьютере на сети). API Сервисы предлагают те же самые особенности когда подключены к локальному или удаленному серверу InterBase. Семейство API Сервисов состоит из четырех функции: Isc_service_attach () инициализирует связь с указанным Services Manager Isc_service_start() вызывает сервисную задачу Isc_service_query() запрашивает информацию, или задачу из Services Manager Isc_service_detach () отключает от Services Manager 9.1.2.Использование буфера параметров сервисовВы можете настраивать ваше приложение для подключения к Services Manager, создавая буфер параметров сервисов (SPB), заполняя его нужными свойствами, и передать адрес SPB в isc_service_attach () или в другие функции в группе API Сервисов. Например, SPB может содержать имя пользователя и пароль для подключения к удаленному серверу. SPB это символьный массив объявленный в вашем приложении. Он содержит следующие элементы: 1.Первый байт включающий информацию о версии формата SPB, это константа isc_spb_version. 2. Второй байт определяет число версии котороя определена как макрос,и как рекомендуемая версия SPBдля каждого релиза InterBase. 3.Далее идут один или несколько кластеров байт, каждый кластер описывает один параметр. Кластера в свою очередь состоят из следующих частей 1. Первый байт определяет что за параметр будет описан в кластере. 2. Второй байт определяет длину описываемого параметра 3. Дальше идет столько байт сколько определил второй байт кластера. 9.1.3.Пример заполнения буфера для имени пользователя1 char spb_buffer[128], *spb =spb_buffer; 2 *spb++ = isc_spb_version; 3 *spb++ = isc_spb_current_version; 4 *spb++ = isc_spb_user_name; 5 *spb++ = strlen("SYSDBA"); 6 strcpy(spb, "SYSDBA"); 7 spb += strlen("SYSDBA"); Все числа представлены в нашем любимом универсальном формате. 9.2.Подключение к Services Manager с помощью isc_service_attach()9.3.Используйте isc_service_attach() для подключения к удаленному IB Services Manager9.4.Вы можете применять локальное или удаленное имя сервиса для определения к какому хосту будем подключаться.Пример: char *user= "SYSDBA", *password ="masterkey", /* see security tip below */ *service_name= "jupiter:service_mgr"; ISC_STATUSstatus[20]; isc_svc_handle*service_handle = NULL; spb_buffer[128],*spb = spb_buffer; unsignedshort spb_length; *spb++ =isc_spb_version; *spb++ =isc_spb_current_version; *spb++ =isc_spb_user_name; *spb++ =strlen(user); strcpy(spb,user); spb +=strlen(user); *spb++ =isc_spb_password; *spb++ =strlen(password) strcpy(spb,password); spb +=strlen(password); spb_length= spb - spb_buffer; if(isc_service_attach(status, 0, service_name, &service_handle,spb_length, spb_buffer)) { isc_print_status(status); exit(1); } 9.5.Отключение от Service Manager c помощью isc_service_detach()isc_service_detach(status,&service_handle);
|
Дизайн: Piton Alien |