
- •Работа с бд в архитектуре ”клиент-сервер”
- •2.Работа с утилитой bde Administrator
- •2.1. Назначение bde Administrator
- •2.2. Создание псевдонима бд
- •3. Работа с утилитой Windows Interactive sql (wisql)
- •3.1. Создание новой бд
- •3.2. Установка соединения
- •3.3. Создание таблиц бд
- •3.4. Просмотр структуры компонентов базы данных
- •4.2. Создание триггера
- •4.3. Значения old и new
- •4.4. Обеспечение каскадных воздействий
- •5. Работа с хранимыми процедурами
- •5.1. Понятие хранимой процедуры
- •5.2. Создание хранимой процедуры
- •6. Использование генераторов
- •7.3. Сбор статистики о бд
- •7.3.1. Статистические данные непосредственно о бд
- •7.3.2. Анализ бд
- •7.4. Регистрация пользователей
- •7.5. Поддержка базы данных
- •Validate record fragments - проверять фрагменты записей
- •8.Задание к лабораторной работе
- •Работа с утилитой Windows Interactive sql (wisql)
- •9. Работа с утилитой InterBase Server Manager.
- •Приложение 1
- •Формат sql-операторов (субд InterBase)
- •База данных
- •Создание базы данных
- •Определение типа данных
- •Домены Создание домена
- •Ограничения, накладываемые на значения полей, ассоциированных с доменом
- •Определение ограничения внешнего ключа и ссылочной целостности с родительской таблицей
- •Удаление столбца (столбцов) из таблицы бд
- •Обращение к хранимой процедуре (утилита wisql)
- •Оператор выбора select
- •Принудительная выдача выходных параметров (только хранимые процедуры)
- •Отъем привилегий
- •Приложение 2 Пример Script-файла
5. Работа с хранимыми процедурами
5.1. Понятие хранимой процедуры
Хранимая процедура - это модуль, написанный на процедурном языке InterBase и хранящийся в базе данных как метаданные (то есть как данные о данных). Хранимую процедуру можно вызывать из приложения. Существует две разновидности хранимых процедур:
• процедуры выбора;
• процедуры действия.
Процедуры выбора могут возвращать более одного значения. В приложении имя хранимой процедуры выбора подставляется в оператор SELECT вместо имени таблицы или обзора.
Процедуры действия вообще могут не возвращать данных и используются для реализации каких-либо действий.
Хранимым процедурам можно передавать параметры и получать обратно значения параметров, измененные в соответствии с алгоритмами хранимых процедур. Преимущества использования хранимых процедур:
• способность одной процедуры, расположенной на сервере, совместно использоваться многими приложениями;
* разгрузка приложений клиента путем переноса части кода на сервер и вследствие этого - упрощение клиентских приложений;
• при изменении хранимой процедуры на сервере все изменения немедленно становятся доступны для клиентских приложений; при внесении же изменений в приложение клиента требуется повторное распространение новой версии клиентского приложения между пользователями;
• улучшенные характеристики выполнения, связанные с тем, что хранимые процедуры выполняются сервером, что приводит, в частности, к уменьшению сетевого трафика.
5.2. Создание хранимой процедуры
Хранимая процедура создается оператором
CREATE PROCEDURE ИмяПроцедуры
[ (входной_параметр тип_данных [, входной_параметр тип_данных. .])] [RETURNS
(выходной_параметр тип_данных [, выходной_параметр тип_данных...])]
AS
<тело процедуры>;
Входные параметры служат для передачи в процедуру значений из вызывающего приложения. Изменять значения входных параметров в теле
процедуры бессмысленно: эти изменения будут забыты после окончания работы процедуры.
Выходные параметры служат для возврата результирующих значений. Значения выходных параметров устанавливаются в теле процедуры и после окончания ее работы передаются в вызывающее приложение.
И входные, и выходные параметры могут быть опущены, если в них нет необходимости.
Тело процедуры имеет формат
«объявление локальных переменных процедуры»
BEGIN
< оператор>
[<оператор> ...]
END
Пример. Хранимая процедура FIND_MAX_KOLVO возвращает в выходном параметре MAX_KOLVO максимальное количество отгруженного со склада товара, наименование которого передается во входном пapaметре IN_TOVAR:
CREATE PROCEDURE FIND_MAX_KOLVO (IN_TOVAR VARCHAR (20))
RETURNS (MAX_KOLVO INTEGER) AS
BEGIN
SELECT MAX(KOLVO) FROM RASHOD
WHERE TOVAR = : IN_TOVAR INTO : MAX_KOLVO;
SUSPEND;
END
Заметим, что в приведенной процедуре за ненадобностью отсутствует определение локальных переменных.
6. Использование генераторов
Часто в состав первичного или уникального ключа входят цифровые поля, значения которых должны быть уникальны, то есть не повторяться ни в какой другой записи таблицы. В одних случаях такое значение является семантически значимым и формируется пользователем по определенному алгоритму -например, номер лицевого счета в банке. В других случаях лучше предоставить выработку такого значения приложению или серверу БД.
Для локальных СУБД (например, Paradox) для названной цели применяются автоинкрементные поля. При добавлении новой записи BDE автоматически устанавливает значение автоинкрементного поля так, чтобы оно было уникальным и не совпадало со значением данного автоинкрементного поля в других записях таблицы - не только существующих, но и удаленных. Иными словами, ранее использовавшееся значение автоинкрементного поля, даже если оно освободилось в результате удаления записи, никогда не назначается вновь. Изменить значение автоинкрементного поля нельзя.
В InterBase отсутствует аппарат автоинкрементных столбцов. Вместо этого для установки уникальных значений столбцов можно использовать аппарат генераторов.
Генератором называется хранимый на сервере БД механизм, возвращающий уникальные значения, никогда не совпадающие со значениями, выданными данным генератором в прошлом. Для создания генератора используется оператор
CREATE GENERATOR ИмяГенератора;
Для генератора необходимо установить стартовое значение при помощи оператора
SET GENERATOR ИмяГенератора ТО СтартовоеЗначение;
При этом СтартовоеЗначение должно быть целочисленным. Для получения уникального значения к генератору можно обратиться с помощью функции
GEN_ID (ИмяГенератора, шаг);
Эта функция возвращает увеличенное на шаг предыдущее значение, выданное генератором (или увеличенное на шаг стартовое значение, если ранее обращений к генератору не было).
ЗАМЕЧАНИЕ. Не рекомендуется переустанавливать стартовое значение генератора или менять шаг при разных обращениях к GEN_ID. В противном случае генератор может выдать неуникальное значение и, как следствие, будет возбуждено исключение "Дублирование первичного или уникального ключа" при попытке запоминания новой записи в ТБД.
Пример: Пусть в БД определен генератор, возвращающий уникальное значение для столбца N_RASH в таблице RASHOD
CREATE GENERATOR RASHOD_N_RASH;
SET GENERATOR RASHOD_N_RASH TO 20;
Обращение к генератору непосредственно из оператора
INSERT INTO RASHOD (N_RASH, DAT_RASH, KOLVO, TOVAR, POKUP) VALUES (GEN_ID (RASHOD_N_RASH, 1) ,"10-JAN-1997",100, "Сахар", "Лира, TOO") .
Присваивание ключевому столбцу уникального значения может быть реализовано через триггер, вызываемый перед запоминанием новой записи БД:
CREATE TRIGGER BI_RASHOD FOR RASHOD
BEFORE INSERT
AS
BEGIN
NEW .N_RASH = GEN_ID (RASHOD_N_RASH, 1);
END
При этом в клиентском приложении, реализующем добавление новых записей в таблицу, столбец с уникальными значениями (в нашем случае N_RASH) в программе не заполняется и оператор INSERT имеет вид
INSERT INTO RASHOD (DAT_RASH, KOLVO, TOVAR, POKUP)
VALUES ( : DAT_RASH, : KOLVO, : TOVAR, : POKUP)
Как можно заметить, столбец N_RASH в операторе не упоминается: все необходимые действия по заполнению этого столбца уникальным значением выполняет триггер BI_RASHOD.
"Обмануть" BDE можно, присваивая столбцу N_RASH любое значение, которое затем будет заменяться триггером на значение, полученное при помощи функции GEN_ID. Однако более корректным будет в данном случае использование не триггера, а процедуры:
CREATE PROCEDURE GET_N_RASH
RETURNS (NR INTEGER)
AS
BEGIN
NR = GEN_ID (RASHOD_N_RASH,1);
END
7. Работа с утилитой InterBase Server Manager
Утилита InterBase Server Manager служит для :
• управления сервером;
• регистрации пользователей и установки для них прав доступа к тем или иными БД;
• проверки целостности БД;
• сохранения и восстановления БД;
• сборки мусора;
• восстановления транзакций in limbo (потерянных транзакций для БД, расположенных на разных серверах);
• получения статистической информации.
7.1. Соединения
7.1.1. Соединение с сервером
Для соединения с сервером выберите элемент меню File | Server Login,затем укажите имя сервера, протокол и введите имя пользователя и пароль .
7.1.2. Соединение с БД
Для соединения с БД следует выбрать элемент меню File |\ Database Connect и указать имя БД .
7.1.3. Выбор текущего сервера и БД
Одновременно может быть установлено соединение с несколькими серверами и базами данных. Для выбора конкретного сервера или БД , установите на них инверсную полосу в окне утилиты .
7.1.4. Разрыв соединения
Для разрыва соединения с БД выберите элемент меню File |\ Database Disconnect.
Для разрыва соединения с сервером выберите элемент меню File | Server Logout. При этом будут разорваны все соединения с БД этого сервера.
7.2. Изменение конфигурации сервера
Описываемые ниже изменения может производить только пользователь SYSDBA (системный администратор). Выберите элемент меню Tasks | Server Config.
В окне 1В Settings можно изменить значения следующих параметров
Database Cache - для каждой БД, с которой установлено соединение, задает размер буфера (кэша) в страницах. В этом кэше размещаются страницы БД. Увеличение размера кэша может существенно ускорить работу с БД, поскольку реально операции чтения/записи будут относиться не к физической БД на диске, а к кэшу в оперативной памяти. Перенос страниц из памяти в физическую БД проводится в фоновом режиме. Однако слишком большой размер кэша при наличии одновременно выполняющихся запросов ко многим БД может привести к нехватке памяти и замедлению работы. Чтобы определить реально необходимый размер кэша, следует умножить число страниц БД на объем страницы в килобайтах (эти параметры задаются при создании БД).
Client map size определяет размер буфера для каждого соединения с клиентом. По умолчанию равен 4 Кбайт, может изменяться в диапазоне 1…8 Кбайт. Потребность в изменении данного параметра может возникнуть при работе с blob-полями.
На странице OS Settings можно (только системному администратору, пользователь SYSDBA) устанавливать значения следующих параметров:
Process Working Set - определяет дополнительную память, резервируемую InterBase для своих нужд, совместно с буфером, размер которого задается параметром Database Cache', Minimum и Maximum определяют диапазон дополнительной памяти в страницах.
Process Priority Class определяет приоритет задач сервера по отношению другим задачам, выполняющимся на данном компьютере. Установка в этом параметре значения High обоснована в следующих случаях:
• при работе InterBase на выделенном для этого компьютере в условиях отсутствия других приложений;
• при наличии большого числа пользователей, активно читающих и записывающих информацию в БД.