Перекомпиляция процедур и триггеров (постановка)
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
| Строка 3: | Строка 3: | ||
# Сделать три процедуры для обновления статистики индексов, рекомпиляции триггеров и хранимых процедур, с именами UpdateIndicesStat, RecompileTriggers и RecompileProcedures, соответственно. На вход каждой процедуры передается ссылка на компонент типа [[TIBDatabase]] -- текущее подключение к базе данных. | # Сделать три процедуры для обновления статистики индексов, рекомпиляции триггеров и хранимых процедур, с именами UpdateIndicesStat, RecompileTriggers и RecompileProcedures, соответственно. На вход каждой процедуры передается ссылка на компонент типа [[TIBDatabase]] -- текущее подключение к базе данных. | ||
# Поместить вышеуказанные процедуры в отдельный юнит с именем gdUpdateIndiceStat.pas, расположенный в папке Common проекта [[Гедымин]]. Данный юнит не должен подключать никаких других юнитов за исключением стандартных библиотек Delphi и компонентов IBX. Информация о структуре БД должна получаться запросами из RDB$ таблиц. | # Поместить вышеуказанные процедуры в отдельный юнит с именем gdUpdateIndiceStat.pas, расположенный в папке Common проекта [[Гедымин]]. Данный юнит не должен подключать никаких других юнитов за исключением стандартных библиотек Delphi и компонентов IBX. Информация о структуре БД должна получаться запросами из RDB$ таблиц. | ||
| − | # Проверить | + | # Проверить: |
| + | ## что процедуры работы с триггерами и процедурами берут наименования мета-объектов в двойные кавычки. Убедиться что все правильно работает, добавив в базу данных хотя бы по одному триггеру и процедуре с пробелом в имени и с именем, содержащим символы разного регистра, и выполнив процедуры перекомпиляции. | ||
| + | ## что после перекомпиляции триггера не меняется его позиция и состояние (активен, не активен). | ||
| + | ## что после перекомпиляции процедуры не меняется порядок входящих и исходящих параметров, а также их написание. | ||
# Оставить только один пункт меню "Обновление статистики индексов" в главном окне программы. В нем сделать вызов трех процедур: обновление статистики индексов, перекомпиляция процедур и триггеров (именно в таком порядке). Убедиться, что при выполнении действия из главной формы проверяется количество подключенных пользователей к БД. | # Оставить только один пункт меню "Обновление статистики индексов" в главном окне программы. В нем сделать вызов трех процедур: обновление статистики индексов, перекомпиляция процедур и триггеров (именно в таком порядке). Убедиться, что при выполнении действия из главной формы проверяется количество подключенных пользователей к БД. | ||
| − | # В диалоговое окно восстановление базы данных из архива добавить чек-бокс "Перекомпилировать процедуры" (там как раз есть одно свободное место). По умолчанию он | + | # В диалоговое окно восстановление базы данных из архива добавить чек-бокс "Перекомпилировать процедуры" (там как раз есть одно свободное место). По умолчанию он должен быть включен. По этому чек-боксу вызывать процедуры перекомпиляции процедур и триггеров после восстановления БД из архива, в самом конце, после перестроения интервальных деревьев. После добавления чек-бокса проверить таб-ордер в диалоговом окне! |
Если получится, сделать перекомпиляцию представлений. Тогда порядок должен быть такой: индексы, представления, процедуры, триггеры. | Если получится, сделать перекомпиляцию представлений. Тогда порядок должен быть такой: индексы, представления, процедуры, триггеры. | ||
[[Category:Постановка]] | [[Category:Постановка]] | ||
Версия 14:04, 25 декабря 2006
Interbase компилирует процедуры и триггеры в двоичное представление и в таком виде хранит в базе данных. Планы запросов, входящих в процедуры и/или триггеры, не меняются между выполнениями, в том время как статистика индексов может существенно измениться. Предлагается добавить в Гедымин возможность перекомпиляции процедур и триггеров на существующих базах данных.
- Сделать три процедуры для обновления статистики индексов, рекомпиляции триггеров и хранимых процедур, с именами UpdateIndicesStat, RecompileTriggers и RecompileProcedures, соответственно. На вход каждой процедуры передается ссылка на компонент типа TIBDatabase -- текущее подключение к базе данных.
- Поместить вышеуказанные процедуры в отдельный юнит с именем gdUpdateIndiceStat.pas, расположенный в папке Common проекта Гедымин. Данный юнит не должен подключать никаких других юнитов за исключением стандартных библиотек Delphi и компонентов IBX. Информация о структуре БД должна получаться запросами из RDB$ таблиц.
- Проверить:
- что процедуры работы с триггерами и процедурами берут наименования мета-объектов в двойные кавычки. Убедиться что все правильно работает, добавив в базу данных хотя бы по одному триггеру и процедуре с пробелом в имени и с именем, содержащим символы разного регистра, и выполнив процедуры перекомпиляции.
- что после перекомпиляции триггера не меняется его позиция и состояние (активен, не активен).
- что после перекомпиляции процедуры не меняется порядок входящих и исходящих параметров, а также их написание.
- Оставить только один пункт меню "Обновление статистики индексов" в главном окне программы. В нем сделать вызов трех процедур: обновление статистики индексов, перекомпиляция процедур и триггеров (именно в таком порядке). Убедиться, что при выполнении действия из главной формы проверяется количество подключенных пользователей к БД.
- В диалоговое окно восстановление базы данных из архива добавить чек-бокс "Перекомпилировать процедуры" (там как раз есть одно свободное место). По умолчанию он должен быть включен. По этому чек-боксу вызывать процедуры перекомпиляции процедур и триггеров после восстановления БД из архива, в самом конце, после перестроения интервальных деревьев. После добавления чек-бокса проверить таб-ордер в диалоговом окне!
Если получится, сделать перекомпиляцию представлений. Тогда порядок должен быть такой: индексы, представления, процедуры, триггеры.