Что такое генератор в ibexpert

Студент получает индивидуальный вариант исходных данных с кратким описанием предметной области, который используется при выполнении всех лабораторных работ. При этом каждая очередная лабораторная работа является продолжением выполненной ранее и поэтому они должны обязательно выполняться последовательно. Варианты заданий к лабораторной работе №5 № варианта Имя пользователя Имя файла БД Имя таблицы Бизнес-правило для поля 1 TEM001 SLRY.FDB Цех Дата_поступления 2 TEM002 STUFF.FDB Собрано День_недели 3 TEM003 STUFFPLUS.FDB Изделия Наименование 4 TEM004 TELEPHONE.

Что такое генератор в ibexpert

Что такое генератор в ibexpert

Название работы: Триггеры, генераторы, исключения

Категория: Лабораторная работа

Предметная область: Информатика, кибернетика и программирование

Описание: Студент получает индивидуальный вариант исходных данных с кратким описанием предметной области, который используется при выполнении всех лабораторных работ. При этом каждая очередная лабораторная работа является продолжением выполненной ранее и поэтому они должны обязательно выполняться последовательно. Варианты заданий к лабораторной работе №5 № варианта Имя пользователя Имя файла БД Имя таблицы Бизнес-правило для поля 1 TEM001 SLRY.FDB Цех Дата_поступления 2 TEM002 STUFF.FDB Собрано День_недели 3 TEM003 STUFFPLUS.FDB Изделия Наименование 4 TEM004 TELEPHONE.

Дата добавления: 2013-10-29

Размер файла: 133 KB

Работу скачали: 49 чел.

  1. Лабораторная работа №5. Триггеры, генераторы, исключения
    1. Цель работы

Изучить используемые в Firebird триггеры, генераторы и исключения. Получить навыки работы с триггерами, генераторами и исключениями с помощью команд SQL и с помощью программы «IBExpert».

Время выполнения: 4 часа.

  1. Исходные данные

Студент получает индивидуальный вариант исходных данных с кратким описанием предметной области, который используется при выполнении всех лабораторных работ. При этом каждая очередная лабораторная работа является продолжением выполненной ранее и поэтому они должны обязательно выполняться последовательно.

  1. Используемые программы

Все операции выполняются с помощью приложения «IBExpert». Отчет создается в редакторе «OpenOffice.pro».

  1. Теоретические сведения
    1. Генераторы (Generators)

Генераторы используются для генерации уникальных номеров, используемых в ключевых полях (автоинкрементных полях). То есть они реализуют те же функциональные возможности в таблицах Firebird, что и поля с автоматическим приращением в других СУБД. Можно указать, чтобы числа генерировались, начиная с заданного начального значения.

Пример создания генератора:

CREATE GENERATOR MyGenerator;

SET GENERATOR MyGenerator TO 1000 ;

Генераторы непосредственно не привязываются к какому-либо полю. Они просто позволяют генерировать уникальные числа. Для этого используется функция Gen_ID() , встроенная в Firebird, которая генерирует целочисленные значения. Она берет генератор в качестве первого параметра и значение шага в качестве второго. Обычно приращение равно 1.

Обращаться к генератору можно только через функцию Gen_ID() .

В реальной жизни вопрос целостности базы данных связан с правилами, установленными у пользователя информационной системы. Например, в компании могут быть установлены такие правила:

  • клиентам не разрешается размещать заказы на сумму, превышающую их лимит кредита;
  • сведения о выполненных заказах хранятся в течение шести месяцев, а затем удаляются;
  • нельзя выдавать читателю новые книги, пока он не вернет взятых ранее;
  • каждый раз, когда продается какой-нибудь товар, для служащего, оформившего продажу, и для отдела, в котором этот служащий работает, на стоимость проданного товара увеличивается значение определенного поля, используемого для вычисления премии; в случае возврата всего или части проданного товара, значение этого поля соответствующим образом должно уменьшиться;
  • каждый раз, когда приходит новая поставка, количество поставленного товара на складе увеличивается на количество товара в поставке.

Такие правила называются бизнес-правилами. В первом стандарте SQL считалось, что эти правила выходят за рамки ответственности СУБД и за их реализацию отвечает прикладная программа, осуществляющая доступ к базе данных. Впервые в 1986 году в СУБД Sybase было введено понятие триггер, что позволило включить реализацию бизнес-правил в базу данных.

  1. Триггеры (Triggers)

С любым событием, вызывающим изменение содержимого таблицы, можно связать сопутствующее действие (триггер), которое СУБД должна выполнять при каждом возникновении события. Триггер – это группа операторов языка SQL, которые автоматически выполняются при вставке, модификации или удалении записи.

В СУБД Firebird можно создавать триггеры, работающие при следующих шести условиях:

  • до вставки записи (BEFORE INSERT);
  • после вставки записи (AFTER INSERT);
  • до удаления записи (BEFORE DELETE);
  • после удаления записи (AFTER DELETE);
  • до модификации записи (BEFORE UPDATE);
  • после модификации записи (AFTER UPDATE).

В Firebird 2.5 триггер может срабатывать при возникновении одного из нескольких событий. Триггеры могут вызывать выполнение хранимых процедур * PPT , выполнять различные проверки и генерировать исключения. Обычно триггеры используются для задания сложных правил контроля целостности базы данных, которые невозможно реализовать с помощью ограничений.

Недостатком триггеров является их влияние на производительность операций с базой данных.

Синтаксис оператора создания триггера:

CREATE TRIGGER Имя FOR Таблица

DECLARE [ VARIABLE ] Переменная ;

[ DECLARE [ VARIABLE ] Переменная ; . ]

Параметры, входящие в этот оператор, пояснены в табл. 1.

Таблица Параметры оператора создания триггера

Уникальное название триггера.

Название таблицы или просмотра, для которых создается триггер

Указывает будет ли работать триггер

Обязательный параметр, показывающий когда будет срабатывать триггер

INSERT | UPDATE | DELETE

Одно из событий, на которые будет срабатывать триггер

Определяет порядок срабатывания триггера, когда имеется несколько триггеров, реагирующих на одно и то же событие. Номер – целое число между 0 и 32767

DECLARE [ VARIABLE ] Переменная

Описание локальной переменной, которую можно будет использовать только в этом триггере

Любой одиночный оператор языка хранимых процедур и триггеров Firebird

Внутри тела триггера доступны две контекстные переменные NEW и OLD , которые позволяют получить доступ к новым и старым значениям полей записи, при изменении которой был вызван триггер.

Пример генератора и триггера для создания автоинкрементного поля:

CREATE GENERATOR EMP_NO_GEN;

CREATE TRIGGER SET_EMP_NO FOR EMPLOYEE

ACTIVE BEFORE INSERT POSITION 0

IF (NEW. EMP_NO IS NULL) THEN

NEW. EMP_NO = GEN_ID( EMP_NO_GEN , 1) ;

  1. Исключения (Exceptions) и обработка ошибок

Исключение – это определенная пользователем ошибка, которая имеет имя и связанный с ним текст сообщения.

Для создания исключения служит оператор:

CREATE EXCEPTION Имя ‘Текст сообщения’;

Для возбуждения исключения в теле триггера или хранимой процедуры служит оператор:

При возникновении исключения нормальный ход выполнения прерывается и Firebird ищет ближайший обработчик этого исключения в текущем блоке BEGIN … END. Если обработчика исключения в этом блоке нет, то Firebird поднимается на уровень выше (к внешнему блоку BEGIN … END) и ищет обработчик там, и т.д. Если обработчик исключения найден, то выполняется его код и далее управление передается на первый оператор за обработчиком исключения. В случае если было сгенерировано исключение, которое никто не обрабатывает, это исключение передается в клиентское приложение. Чаще всего это приводит к выдаче пользователю сообщения о произошедшей ошибке.

Синтаксис оператора для обработки исключений внутри тела триггера или хранимой процедуры имеет следующий вид:

Параметры, входящие в этот оператор, описаны в табл. 2

Позволяет обработать все типы ошибок

Обработка исключения, сгенерированного пользователем (оператором EXCEPTION )

Обработка ошибки SQL

Обработка ошибки Firebird

  1. Операторы языка хранимых процедур и триггеров

В этом разделе приведены некоторые из используемых при написании триггеров и хранимых процедур операторов, которые не были описаны выше.

Для реализации сложных алгоритмов сервер Firebird поддерживает операторы ветвления.

IF ( условие ) THEN [ ELSE ]

Представляет собой оператор выборки данных и обработки их в цикле по записям.

WHILE ( условие ) DO

  1. Порядок выполнения работы

Лабораторную работу следует выполнять в следующем порядке:

  1. Создать аналогично предыдущим лабораторным работам рабочую папку и назвать ее «ЛР5».
  2. Открыть окно «Редактор скриптов» в приложении «IBExpert».
  3. Используя кнопку [ Загрузить из файла ] на панели инструментов, открыть диалоговое окно «Open SQL File» и с его помощью открыть файл сценария, созданный при выполнении лабораторной работы №4.
  1. Используя кнопку [Save as] на панели инструментов, сохранить загруженный сценарий в папке «sqledu02:D:DataЛР5».
  2. Изменить в сценарии путь до файла с базой данных, чтобы база данных создавалась в папке «ЛР5».
  3. Добавить в сценарий операторы создания генераторов, исключений и триггеров.
  4. Создать для всех таблиц базы данных генераторы и триггеры для автоинкрементных полей (для первичных ключей).
  5. Создать триггеры, реализующие ссылочную целостность, изменив одно из ограничений внешнего ключа. Команды создания этого внешнего ключа из сценария не удалять, а добавить команду удаления этого ограничения перед созданием триггеров. Триггеры должны обеспечивать каскадное обновление и удаление зависимых данных, а также запрет ссылки на отсутствующую запись.
  6. Создать триггер, реализующий бизнес-правило в соответствии с выданным индивидуальным заданием. Для триггера должны присутствовать комментарии, поясняющие выполняемые операции.
  7. Выполнить сценарий и сохранить его в папке «ЛР5».
  8. Зарегистрировать созданную базу данных в программе «IBExpert» и подключиться к ней.
  9. Создать в своей базе данных таблицу в диалоговом режиме. Она должна называться «TestTriggers» и содержать десять полей разных типов с произвольными именами. При создании автоинкрементного поля первичного ключа сразу указать необходимость создания для него генератора и триггера. Добавить в диалоговом режиме к этой таблице три триггера выполняющих произвольные действия. Скопировать в отчет сценарий создания этой таблицы и триггеров, который сгенерирует «IBExpert».
  10. Создать в папке «ЛР5» резервную копию базы данных.
  11. Создать и сохранить в папке «ЛР5» файл с отчетом о выполнении лабораторной работы, который должен называться «Отчет5-xx.odt», где xx — это номер варианта задания. .
    1. Варианты заданий
Читайте также  Что такое релаксационные генераторы колебаний

Вариант задания (Таблица 3) выбирается по формуле (N mod 24)+1, где N – последние две цифры зачетной книжки студента.

Таблица : Варианты заданий к лабораторной работе №5

Создание Базы Данных

Наше окно должно выглядеть, примерно, вот так.

Нажмём значок молния или + . Появится окно (рис. 30).

В нижней части окна, Создание таблицы, представлен листинг SQL-запроса. Жмём кнопку Commit, если нет ошибок. Если есть ошибки Откатить. После этого все атрибуты таблицы пронумеруются и появятся дополнительные закладки (рис. 31).

Приступим к созданию генератора (счетчика). Производим двойной щелчок левой кнопкой мыши на атрибуте KEY. Появляется окно Редактирование поля KEY (рис. 32). В нем нам надо установить флаг Не пустое, так как данный атрибут будет первичным ключом. Первичный ключ может хранить только уникальные значения.

Далее в этом же окне, переходим на вкладку Автоинкремент, ниже появятся дополнительные вкладки, они для нас и будут представлять интерес (рис. 33).

Устанавливаем флаг Создать генератор, доступными становятся поля:

  • Имя генератора — оставляем предложенное программой название: GEN_TELEPHON_SPRAVOCCHNIK_ID;
  • Начальное значение – оставляем 0.

Делаем активной вкладку Триггер и устанавливаем флаг Создать триггер. Окно изменит свой вид, в нем появится SQL-командана создание триггера (рис. 34).

Теперь при создании новой записи номер ей будет присваиваться автоматически. Выполнять данное действие будет триггер, который будет срабатывать перед вставкой новой записи. Нажимаем ОК.
Появится окно Changing field для подтверждения внесенных изменений. B верхней части этого окна (Список действий) перечисляется список внесенных изменений. В нижней части (Оператор) расположены SQL-команды для выполнения операции (рис. 35).

Нажимаем Commit.

Теперь нам необходимо создавать первичный ключ. Делаем активной вкладку Ограничения (рис. 36).

Появляются дополнительные вкладки. Щелкаем правой кнопкой мыши в свободном пространстве окна Таблица и в выпадающем меню выбираем пункт Новый первичный ключ (рис. 37).

Появится новая запись, отвечающая за первичный ключ. Автоматически первичному ключу присвоится имя — PK_TELEPHON_SPRAVOCCHNIK (рис. 38).

Теперь необходимо установить, для какого атрибута создается первичный ключ. Щелкаем левой кнопкой мыши в поле На поле, и щёлкнем стрелку вниз. Появится окно (рис. 39).

И выберем, из списка Available fields, KEY. Нажимаем стрелку вправо, поле KEY окажется справа в списке Included fields. Закрываем нажатием крестика. В пустой ячейке выйдет KEY.

Нажимаем Ctrl+F9 или кнопку Compile (пиктограмма с изображением молнии). Появится окно Compiling Constraints, в котором отображаются SQL-команды на создание первичного ключа, а также комментарии по поводу запроса (Списка действий) (рис. 40).

Нажимаем кнопку Close. Делаем активной вкладку Поля и видим, что в таблице TELEPHON_SPRAVOCCHNIK появился первичный ключ (запись KEY с изображением ключа) (рис. 41).

Ну, всё таблица TELEPHON_SPRAVOCCHNIK создана.

Лабораторная работа №6 Создание генераторов и триггеров. Каскадные воздействия.

Цель работы: научиться создавать, ставить на выполнение, редактировать и удалять триггеры и генераторы.

Триггер — это процедура, автоматически исполняемая SQL-сервером при наступлении события «обновление», «удаление» или «добавление» новой записи таблицы.

По отношению к инициализирующему их событию различают два типа триггеров:

выполняемые до или после наступления события;

автоматически обеспечивающие каскадные воздействия в дочерних таблицах при изменении, удалении записи в родительской таблице.

Нельзя вызывать триггер непосредственно из программы, передавать ему входные параметры и возвращать их значения. Триггеры всегда реализуют действие.

Создание триггеров

Триггер создается командой Database->New trigger, после чего появится следующее окно:

В поле Name указывается название триггера, в For Table — для какой таблицы создается триггер, Position – указывает порядок триггера( триггер с наименьшим номером выполняется раньше), Type – время срабатывания триггера (before(до)/after(после)insert(вставка)/update(обновление)/delete(удаление)).

Создадим триггер для родительской таблицы Realty, который при изменении значения ее первичного ключа будет автоматически изменять значение внешнего ключа дочерней таблицы Lease, другими словами, если в таблице Realty изменилось значение поля Adr, то триггер изменит значение поля Adr в соответствующей записи таблицы Lease.

Database->New trigger и заполните форму, как на рисунке выше.

Для проведения транзакции по созданию триггера выполнить. Для того, чтобы триггер работал без ошибок, следует удалить внешний ключ в таблице Lease. Примечание: если при удалении внешнего ключа возникает ошибка типа «Невозможно удалить, т.к. INDEX такой-то используется», то попробуйте вырубить Delphi, если он запущен, и в IBExpert переконнектиться с контейнером.

Создание генераторов

Генераторы предназначены для обеспечения уникальности значений ключевых столбцов и используются совместно с триггерами.

Генератор создается командой Database->New generator. В появившемся окне нужно задать имя генератора(Name) и начальное значение(Value). Далее для его использования следует создать триггер.

Создание генератора для таблицы Owner:

в созданном ранее триггере указываем таблицу Owner;

выберите тип(Type) триггера ‘before insert'(перед вставкой) и впишите между begin/end код new.non = gen_id(GenStore,1); Таким образом, перед каждым добавлением записи в таблицу Owner для поля non будет генерироваться уникальный код в зависимости от текущего значения генератора.

Лабораторная №7 Создание и использование хранимых процедур в ibExpert.

Цель работы: научится создавать, ставить на выполнение, редактировать и удалять хранимую процедуру.

Хранимая процедура это отдельная программа, написанная на процедурном языке используемого сервера баз данных. Существует две разновидности хранимых процедур: процедуры выбора (аналог SELECT-запросов) и исполняемые процедуры. Процедуры выбора возвращают наборы данных, которые состоят из строк или отдельных значений. Исполняемые процедуры не возвращают данные. Они предназначены для исполнения команд, например, delete.

Создание хранимой процедуры

Процедура создается командой Database->New procedure. В появившемся окне задаются имя процедуры, ее входные/выходные параметры, локальные переменные и собственно сам код процедуры на SQL.

Для сохранения процедуры нажмите на кнопку с молнией. Для запуска процедуры нажмите на кнопку рядом (со значком стрелки вправо).

Пример процедуры добавления записи в таблицу:

Изменение процедуры производится в этом же окне. Удаление процедуры можно произвести из списка в Database Explorer, нажав на нужную правой кнопкой мыши и выбрав команду Drop Procedure…

Запуск процедуры

Запуск процедуры можно выполнить из Database Explorer (правой кнопкой нажать на нужную процедуру и выбрать команду Run Procedure…) или же открыть окно редактирования процедуры и запустить ее там, нажав на кнопку со стрелкой вправо.

Что такое генератор в ibexpert

Подскажите — как задать поле с автоинкрементом в InterBase?
ГЕсть ли такой тип поля или нужно создавать триггер с генератором?


Alexandr ( 2002-09-13 13:25 ) [1]

взял бы ты с www.ibexpert.com программку
и заюзал ее, если уж с документацией справиться не можешь.


-= Demon =- ( 2002-09-13 13:33 ) [2]

Нет, такого поля нет. Но вводится поле типа integer (пусть его имя «id») и создается генератор:
create generator GenID;
И пишется следующий триггер:
create triger TBI_AutoInc for TableName;
before insert;
begin
new.id = GenID;
end;


Alexandr ( 2002-09-13 13:50 ) [3]

2-= Demon =- : идея правильная, реализация нерабочая

Читайте также  Шкив коленвала 2108 ремня генератора


Johnmen ( 2002-09-13 13:51 ) [4]

>-= Demon =- (13.09.02 13:33)

Весьма любопытный синтаксис работы с генератором. )
Я такого еще не встречал !

2 Alexandr:
С документацией все в порядке.
Хотел узнать мнения мастеров.
Но пока ничего путного не услышал.
Видать были мастера — да вышли все:)


Alexandr ( 2002-09-13 14:10 ) [6]

вообщемжно создавать триггер с генератором.
Но при работе с базой с помощью продвинутых инструментов вроде IBExpert эта операция максимано упрощена до двух нажатий мышкой.


Val ( 2002-09-13 14:14 ) [7]

>DmitryMN (13.09.02 14:04)
на этот вопрос не нужно мнений, тут нужно знание.


3JIA9I CyKA ( 2002-09-13 14:14 ) [8]

2DmitryMNУважаемый DmitryMN!
Если с документацией у Вас всё в порядке, и Вы задаёте ТАКИЕ вопросы в форуме, значит Вам надо к другим мастерам. А здесь мало кто давал клятву Гипократа.

2-= Demon =-
1) create generator BLABLABLA
2)
create triger BUBUBU for TableName;
before insert;
begin
new.id = GEN_ID(BLABLABLA, 1);
end;


Johnmen ( 2002-09-13 14:14 ) [9]

>DmitryMN (13.09.02 14:04)
>Хотел узнать мнения мастеров.
>Но пока ничего путного не услышал.

Просто не хотел слышать. (
Или совет -= Demon =- (13.09.02 13:33) ты считаешь беспутным ?

2 3JIA9I CyKA: Меня интересуют альтернативные варианты создания полей с автоинкрементом. Вариант создания триггера и генератора я знаю. («Гипократ» пишиется с двумя «п»)
2 Johnmen ©: совет -= Demon =- хорошой но на этот счет я уже написал выше.
2 Alexandr : спасибо — посмотрю IBExpert


Johnmen ( 2002-09-13 14:49 ) [11]

>DmitryMN (13.09.02 14:31)

Не существует никаких «альтернативные варианты создания полей с автоинкрементом» кроме, как было сказано выше, через триггер с генератором !
IBExpert лишь поможет автоматизировать этот процесс.


3JIA9I CyKA ( 2002-09-13 15:10 ) [12]

>>ГЕсть ли такой тип поля или нужно создавать триггер с генератором?
1) Нет такого типа.
2) ГЕсть пишется без «Г».
3) Ещё вопросы?


Prooksius ( 2002-09-13 15:10 ) [13]

2 Johnmen © (13.09.02 14:49)
Неправда ваша.
ХП и генератор. :))))

2 DmitryMN (13.09.02 14:31)
Учи матчасть.


Wolf226 ( 2002-09-13 15:21 ) [14]

Держи альтернативный метод

var Q,DS:TQuery;
// DS — это наш ДатаСет в котором поле ID — autoinc
// Q — это для вытягиватия генератора

procedure TForm1.DSBeforeInsert(DataSet:TDataSet)
begin
with Q do
begin
close;
Sql.Text:=»select gen_id( generatorname,1) from rdb$database»;
open;
DataSet.fieldvalues[«id»]:=fields[0].value;
end;
end;

>Prooksius © (13.09.02 15:10)
>2 Johnmen © (13.09.02 14:49)
>Неправда ваша.
>ХП и генератор. :))))

Правда моя ! Автор спрашивал про автоинкремент !
А у тебя не авто.

Тоже самое относится и к Wolf226 (13.09.02 15:21).


Wolf226 ( 2002-09-13 15:56 ) [16]

Ну скажем так, я обошелся без тригерра. Но без генератора обойтись нельзя. Ну нету autoinc в Interbase.


DmitryMN ( 2002-09-13 16:13 ) [17]

Все спасибо:)
Буду пользоваться генератором и триггером:)

Генераторы

Генераторы являются идеальным средством для создания значений автоинкрементных уникальных ключей или серий значений числового столбца, а также других серий. Генераторы в базе данных объявляются оператором CREATE, как и любой другой объект базы данных:

CREATE GENERATOR AGenerator;

Генераторам может быть присвоено любое начальное значение:

SET GENERATOR AGenerator ТО 1;

ВНИМАНИЕ! Существуют строгие предупреждения по поводу переустановки значений генераторов, когда эти значения находятся в использовании — см. разд. «Предупреждения о переустановке значений генераторов» в этой главе.

Получение следующего значения

Для получения следующего значения вызывайте функцию SQL GEN_ID(ИмяГенератора, n), где имягенератора — имя генератора, а n — целое (диалект 1) или NUMERIC(18,0) (диалект 3), определяющее значение шага. Запрос:

SELECT GEN_ID(AGenerator, 2) from RDB$DATABASE;

возвращает число, которое на 2 больше последнего сгенерированного числа, и устанавливает значение генератора в сгенерированное значение.

Текущее значение генератора

SELECT GEN_ID(AGenerator, 0) from RDB$DATABASE;

возвращает текущее значение генератора без его увеличения[18].

PSQL, язык программирования Firebird, позволяет напрямую присваивать сгенерированное значение переменной:

DECLARE VARIABLE MyVar BIGINT;

MyVar = GEN_ID(AGenerator, 1);

Более подробную информацию об использовании генераторов в модулях PSQL — в особенности в триггерах — см. в главе 29[19].

Использование отрицательного шага

Аргумент шаг в GEN_ID может быть отрицательным. Следовательно, можно устанавливать или переустанавливать текущее значение генератора, передавая отрицательный аргумент или в виде целой константы, или в виде целого выражения. Эта возможность иногда используется как «трюк» для установки значений генератора в PSQL, поскольку в PSQL не могут использоваться такие команды DDL, как SET GENERATOR.

SELECT GEN_ID (AGenerator, -GEN_ID (AGenerator, 0)) from RDB$DATABASE;

устанавливает значение генератора в ноль.

Предупреждения о переустановке значений генераторов

Основное простое правило по переустановке значений генераторов в работающей базе данных — будь то в SQL, PSQL или в некотором интерфейсе администратора — не делать этого.

Основное достоинство значений генератора то, что они гарантированно являются уникальными. В отличие от других доступных пользователю операций Firebird генераторы работают вне контекста транзакций. Однажды сгенерированное, число установлено и не может быть изменено отменой транзакции. Это дает полную уверенность в том, что ничто не может вмешиваться в целостность последовательности чисел, предоставляемых генератором.

Оставьте переустановку значений генераторов в создаваемой базе данных для редких случаев, когда это требуется условиями проектирования. Например, некоторые бухгалтерские системы, написанные в старом стиле, передают журналы в таблицы истории с новым первичным ключом, очищают таблицу журналов и устанавливают последовательность первичных ключей в ноль в организациях с несколькими филиалами, выделяя диапазоны значений ключа каждого филиала в отдельный «фрагмент», чтобы гарантировать целостность ключей при репликации.

Никогда не переустанавливайте значения генератора в попытке скорректировать программные ошибки, ошибки ввода данных или для «устранения промежутков» в последовательности значений[20].

Читайте также

Онлайн-генераторы

Онлайн-генераторы www.csssprites.com. Обладает довольно минималистичным дизайном, есть возможность загружать несколько исходных файлов.www.printf.ru/spritr/. В этом инструменте есть возможность загружать несколько файлов, очень милый дизайн, но в целом настроек мало.spritegen.website-performance.org.

9.2. Генераторы паролей

9.2. Генераторы паролей Генераторы паролей используются для создания особо сложных и длинных паролей. Генераторов паролей – несчетное множество. Каждый школьник, обладая начальными навыками программирования, может создать программу, генерирующую случайную

Генераторы — лучшие друзья первичных ключей

Генераторы — лучшие друзья первичных ключей Надо сказать несколько слов о реализации первичного ключа. Так как он предназначен для обеспечения уникальности, то никакие две записи в одной таблице не могут иметь одинаковых значений этого ключа. То есть, чтобы

Генераторы текстур

Генераторы текстур В состав Filters Unlimites входит несколько генераторов текстур. Подобные эффекты больше всего пригодятся разработчикам трехмерных игр и других 3D-проектов.При помощи фильтров категории Paper Backgrounds (Фон бумаги) можно создать текстуру поверхности любого типа

15.3. Генераторы специализированного кода

15.3. Генераторы специализированного кода Unix имеет давнюю традицию поддержки инструментов, которые специально предназначены для генерации кода для различных специальных целей. Давними «монументами» данной традиции, которые «уходят корнями» в Version 7 и ранние дни Unix, а также

Читайте также  Что такое бгу генератор

15.3. Генераторы специализированного кода

15.3. Генераторы специализированного кода Unix имеет давнюю традицию поддержки инструментов, которые специально предназначены для генерации кода для различных специальных целей. Давними «монументами» данной традиции, которые «уходят корнями» в Version 7 и ранние дни Unix, а также

Генераторы перестановок (Permutation generators)

Генераторы перестановок (Permutation generators) template ‹class BidirectionalIterator›bool next_permutation(BidirectionalIterator first, BidirectionalIterator last);template ‹class BidirectionalIterator, class Compare›bool next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp);next_permutation берёт последовательность, определённую диапазоном [first, last), и

Аддитивные генераторы

Аддитивные генераторы Второй стандартный метод получения «более случайных» чисел от простого генератора называется аддитивным.В соответствии с этим методом, мы инициализируем массив чисел с плавающей запятой с помощью простого генератора, например, минимального

Тасующие генераторы

Тасующие генераторы И последний тип рассматриваемых нами генераторов, позволяющих получать «более случайные» числа, принадлежит к алгоритмам тасования. Здесь мы опишем генератор, реализованный на основе одного внутреннего генератора, хотя существуют и другие

Оптимизация базы данных

В случае, когда база значительно увеличилась в размерах и превысила 1,5-2 Гб, следует провести оптимизацию данных.

Содержание

  • 1 Создаем файловую копию базы данных
  • 2 Заходим в программу IBExpert, создаем подключение к копии базы данных
  • 3 Создаем бэкап базы данных
  • 4 Просмотр системных таблиц
  • 5 Отключение логирования
  • 6 Очистка и удаление таблиц
  • 7 РезервированиеВосстановление базы данных

Создаем файловую копию базы данных

Просим всех пользователей выйти из программы!

  • Отключаем службу Firebird Server Manager: Пуск/Панель управления, режим просмотра: «Мелкие значки».

  • Создаем файловую копию базы данных ZTRADE.FBD. ZTRADE.FDB переименовываем в ZTRADE_orig, и работаем с файловой копией. Для удобства работы с ней переименуем, добавив в название дату:

  • Включаем службу Firebird Server Manager:

Заходим в программу IBExpert, создаем подключение к копии базы данных

  • Заходим в меню «База данных»(Database) — «Зарегистрировать базу»(Register Database),
  • В открывшемся окне указываем Имя Сервера(Server name) на котором лежит база данных,
  • В окне Версия сервера(Server Version) выбираем Firebird 2.5,
  • Файл базы данных(Database File) по иконке с папкой выбираем путь к нашей базой данных,
  • Пользователь(User name) — прописываем SYSDBA,
  • Пароль(Password) – masterkey,
  • Кодировка(Charset) выставляем WIN1251.

Создаем бэкап базы данных

Для создания бэкапа выбираем «Службы»(Services)«Резервирование базы данных»(Backup Database):

  • В появившемся окне, в поле Имя файла(File Name), встает путь к базе по умолчанию , например: «С:Standart-Nbaseztrade_20150106.fbk».
  • Отключите галочку Сборка мусора(Garbage Collection) и нажимайте кнопку «Начать резервное копирование»(Start Backup).

При успешном завершении бэкапа окно будет выглядеть следующим образом:

Просмотр системных таблиц

  • Заходим в меню «База данных»(Databas) — «Регистрационная информация базы …»(Database Registration Info …).
  • В открывшемся окне «Параметры базы данных» в левой панели выбираем в пункте «Дополнительно»(Additional) подменю «Эксплорер БД»(DB Explorer).
  • Справа отобразится несколько пунктов и нам нужно будет выбрать и установить галку «Показывать системные таблицы»(Show System Tables), после чего нажимаем кнопку «Ок».

  • Дальше нам необходимо в левой панели «Database Explorer» два раза кликнуть по нашей базе, так чтобы мы увидели дерево данных в следующем виде:

Отключение логирования

Заходим в меню «Инструменты»(Tools)«Менеджер протоколов данных»(Log Manager), Должно открыться окно, но может выйти окно с ошибкой:

Не пугайтесь, просто нажимайте кнопку «Ок» , она ни на что не влияет.Если она у Вас появилась, то заодно закройте окно «Менеджер протоколов данных» и заново откройте.

В этом окне находим одноименную кнопку «Менеджер протоколов данных» (Log Manager) и выбираем пункт «Отменить протоколирование для всех таблиц»(Unprepare all tables). У нас должны сняться все отметки, после чего мы нажимаем кнопку с молнией или F9.. После чего должно появиться окно «Updating logging triggers…» , в котором необходимо нажать кнопку «Подтвердить»(Commit). Таким образом мы отключили с вами логирование базы данных.

Очистка и удаление таблиц

Слева в окне мы видим дерево данных, самой нижней строкой стоит пункт «Системные таблицы», подсвеченный красным цветом.

Раскрываем плюсик и видим первые четыре таблицы, их нам с Вами нужно удалить, последовательно встаем на них мышью и правой кнопкой мыши выбираем пункт «Удалить таблицу …»(Drop table …). :

  • IBE$LOG_BLOB_FIELDS;
  • IBE$LOG_FIELDS;
  • IBE$LOG_KEYS
  • IBE$LOG_TABLES.

После того как мы удалили все четыре таблицы, в этом же дереве раскрываем пункт «Генераторы» и удаляем последнюю строку в этом пункте, также выделенную красным цветом:

  • IBE$LOG_TABLES_GEN

Удаляем также правой кнопкой мыши.

Мы удали все необходимые системные таблицы , теперь нам необходимо очистить таблицы с логами .Также по плюсу раскрываем пункт «Таблицы», и последовательно чистим следующие таблицы:

  • ANALYTIC_DOC_DETAIL_1
  • ANALYTIC_DOC_DETAIL_2
  • ANALYTIC_DOC_DETAIL_3

. Т.е все таблицы имеющие в своем название «ANALYTIC_DOC_DETAIL»

  • ANALYTIC_FALSIFICAT
  • ANALYTIC_GNVLS
  • ANALYTIC_MIN_ASSORT
  • ANALYTIC_PRICE
  • DOCS_LOG
  • DOC_DETAIL_ACTIVE_LOG
  • DOC_DETAIL_LOG
  • PARTS_LOG
  • TMP_LOG

Ни в коем случае НЕ трогаем таблицу WARES_LOG

Очистку этих таблиц будем осуществлять следующим образом: Двойным щелчком мыши по вышеперечисленной таблице, так чтобы она у нас открылась . Затем ищем меню «Таблица»(Table) и выбираем пункт «Очистить таблицу»(Empty table) .

Затем у Нас появляется окно «Подтверждение» , и мы подтверждаем свои намерения:

РезервированиеВосстановление базы данных

После того как очистили таблицы, необходимо снова сделать резервирование данных, а потом восстановление, для этого идем в меню «Службы»(Services) и создаем резервную копию нашей почищенной базы данных ( «Резервирование базы данных»(Backup database)), при этом не забываем отключить флажок Сборка мусора(Garbage Collection) и нажимаем кнопку «Начать резервное копирование»(Start Backup).

Ждем окончание процесса создания бэкапа, затем нам необходимо восстановить нашу базу данных из этой резервной копии, для этого в том же меню «Службы» (Services) выбираем пункт «Восстановление базы данных»(Restore Database).

В открывшемся окне с помощью кнопки нам нужно выбрать бэкап , который мы только что создали. Окно должно выглядеть следующим образом:

После окончания процесса создастся новая база ZTRADE_NEW.FDB, переименовываем ее в ZTRADE.FDB.

В общем все, готово! Проверьте размер базы данных, она должна значительно уменьшиться в размерах. После чего можете сообщить пользователям, что уже можно работать в программе!

Яков Кузнецов/ автор статьи

Приветствую! Я являюсь руководителем данного проекта и занимаюсь его наполнением. Здесь я стараюсь собирать и публиковать максимально полный и интересный контент на темы связанные ремонтом автомобилей и подбором для них запасных частей. Уверен вы найдете для себя немало полезной информации. С уважением, Яков Кузнецов.

Понравилась статья? Поделиться с друзьями:
NEVINKA-INFO.RU
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: