Программирование >>  Oracle 

1 ... 194 195 196 [ 197 ] 198 199 200 ... 469


Глава 11

Кроме того, операторы ЯОД используются, если надо сгенерировать шаблоны только для небольшого количества запросов. Например, этот подход пригоден при использовании шаблонов как средства настройки. Итак, если надо сгенерировать хранимые шаблоны только для небольшой части запросов приложения, это имеет смысл делать с помощью операторов ЯОД.

Использование оператора ALTER SESSION

Это более универсальный метод генерации шаблонов запросов. Он применяется аналогично установке SQL TRACE при трассировке программ. С момента выполнения соответствующего оператора ALTER SESSION и до отключения создания хранимых шаблонов для каждого выполняемого запроса будет сохраняться шаблон (почти для каждого - в разделе Проблемы описаны случаи, когда шаблон не сохраняется).

Этот метод можно применять для любого приложения, если требуется стабилизировать все планы. Другими словами, когда необходимо точно знать, какими будут планы выполнения SQL-операторов, независимо от версии сервера, на котором будет установлено приложение, независимо от значений параметров инициализации экземпляра и т.п. Чтобы добиться этого для приложения, можно использовать триггер ON LOGON, как было показано ранее, а затем полностью протестировать приложение, выполнив все возможные запросы. Это надо сделать на тестовом сервере в процессе окончательного тестирования перед поставкой приложения клиентам. После сбора всех планов необходимо извлечь их с помощью утилиты ЕХР, а затем устанавливать с помощью утилиты IMP в процессе инсталляции приложения. Этот процесс подробно описан далее в разделе Перенос шаблонов из одной базы данных в другую .

Этот метод также используется, если на уровне сервера включена автоматическая подстановка связываемых переменных (auto binding). В разделе Проблемы взаимодействие автоматической подстановки связываемых переменных со стабилизацией плана оптимизатора описано более подробно.

Синтаксис соответствующих версий оператора ALTER SESSION несложен:

ALTER SESSION SET CREATE STORED OUTLINES = TRUE; ALTER SESSION SET CREATE STORED OUTLINES = FALSE;

ALTER SESSION SET CREATE STORED OUTLINES = категория шаблонов;

Если параметр CREATE STORED OUTLINES получает значение TRUE, сервер

Oracle будет генерировать хранимые шаблоны для категории DEFAULT. Категория DEFAULT - самая обычная категория с соответствующим именем; ее использование надо включать так же, как и любой другой категории. После установки параметру CREATE STORED OUTLINES значения FALSE сервер Oracle перестанет генерировать хранимые шаблоны для соответствующего сеанса.

Если параметру CREATE STORED OUTLINES задано значение категория шабло-нов, сервер Oracle будет генерировать шаблоны для всех выполняемых запросов и сохранять их в указанной категории. Именно так предпочтительнее использовать этот метод. Для ясности рекомендуется, чтобы каждое приложение использовало собственную категорию шаблонов, особенно если предполагается его установка в базе данных, с которой работает множество других приложений, тоже использующих стабилизацию плана оптимизатора. Это предотвратит конфликты между приложениями и упростит поиск приложения, которому принадлежит шаблон.



Стабилизация плана оптимизатора 625

Пользователь OUTLN

Пользовательская схема OUTLN теперь создается во всех базах данных Oracle8i, со стандартным паролем OUTLN. Администратор базы данных должен изменить пароль этого пользователя сразу после установки так же, как и для пользователей SYS и SYSTEM.

В этой схеме находятся две таблицы и ряд индексов, которые стандартно создаются в табличном пространстве SYSTEM. Если планируется интенсивно использовать стабилизацию плана запроса (особенно, если для запоминания планов запросов предполагается использовать метод ALTER SESSION), имеет смысл перенести эти объекты из табличного пространства SYSTEM в другое, специально созданное табличное пространство. Одна из этих двух таблиц содержит столбец типа LONG, поэтому перенести ее с помощью оператора ALTER TABLE имя таблиц1 MOVE не удастся. Вместо этого придется экспортировать и импортировать эти объекты. Ниже описана последовательность действий для переноса всей схемы OUTLN из табличного пространства SYSTEM в табличное пространство TOOLS.

1. Экспортирование схемы пользователя OUTLN: exp userid=outln/outln owner=outln

2. Изменение стандартного табличного пространства пользователя OUTLN с SYSTEM на TOOLS и установка ему неограниченной квоты на табличное пространство TOOLS и квоты Ok на табличное пространство SYSTEM:

alter user outln default tablespace tools; revoke unlimited tablespace fjm outln; alter user outln quota Ok on system; alter user outln quota unlimited on tools;

3. Удаление таблиц OL$ и OL$HINTS из пользовательской схемы OUTLN: drop table ol$;

drop table ol$hints;

4. Импортирование пользовательской схемы OUTLN: imp userid=outln/outln full=yes

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

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

Перенос шаблонов из одной базы данных в другую

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



Глава 11

дет устанавливаться у клиентов, или при переносе приложения с тестового сервера в производственную среду.

Проще всего сделать это с помощью файла параметров экспорта (чтобы избежать проблем с маскировкой специальных символов в командном интерпретаторе и использованием командной строки в NT). Я создал файл параметров для экспорта ехр.раг со следующим содержимым:

query= where category=HR APPLICATION tables=(ol$,ol$hints)

Это приведет к экспортированию всех хранимых шаблонов из категории HR APPLICATION. Изменять в файле ехр.раг придется только имя переносимой категории. После этого надо выполнить:

exp userid=outl<napc> parfile=ex.par

заменив <пароль> соответствующим паролем пользователя OUTLN. При этом будут экспортированы только интересующие нас строки. Полученный файл expdat.dmp надо перенести на целевой сервер (или выполнить IMP по сети) и импортировать полностью. Для этого используется команда:

imp userid=outln/outln full=y ignore=yes

В этом случае надо использовать конструкцию IGNORE=YES, поскольку мы добавляем строки в существующую таблицу, а не просто переносим таблицу, как в предыдущем разделе. Средства стабилизации плана оптимизатора поддерживают экспорт и импорт, так что можно это делать. Не надо изменять таблицы OL$ и OL$HINT непосредственно, но можно переносить их из одной базы данных в другую с помощью утилит экспорта/импорта. Фактически EXP/IMP - единственное средство для безопасного решения этой задачи. Рассмотрим, что произойдет, если хранимый шаблон MYOUTLINE б1л экспортирован и перенесен в другую базу данных, где уже есть шаблон MYOUTLINE. Если для этого использовалось другое средство, а не утилиты ЕХР/ IMP, шаблон в базе данных будет испорчен. Предположим, данные копируются с помощью SQL-операторов. Некоторые данные будут скопированы, другие - нет из-за конфликтов по первичному ключу. В конечном итоге в базе данных окажется два набора хранимых шаблонов. Только утилиты экспорта и импорта позволяют правильно решить эту задачу и содержат специальные фрагменты кода, гарантирующие, что шаблон из одной базы данных не перезапишет шаблон в другой (подробнее это описано далее в разделе Пакет OUTLNPKG ).

Получение нужного шаблона

Если средства стабилизации плана оптимизатора используются для настройки, возникает вопрос: как получить от оптимизатора нужный план? Ранее я демонстрировал, как, изменяя параметры сеанса и выполняя конкретный запрос, можно сгенерировать хороший план. Это, несомненно, самый простой метод. Если возможно, надо просто установить соответствующие параметры сеанса с помощью оператора ALTER SESSION, а затем выполнить оператор CREATE OUTLINE для запроса. Если запрос уже упоминается в таблицах шаблонов, надо просто пересоздать для него план, как это было еде-



1 ... 194 195 196 [ 197 ] 198 199 200 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика