RACChecker
Тема разработки и адаптации приложений под RAC очень обширна и многогранна и затрагивает практически все аспекты создания прикладного ПО для СУБД Oracle Database.
Но, тем не менее, для того чтобы гарантировать что ваше приложение корректно будет работать в RAC, необходимо убедиться, что оно не использует технологии и механизмы которые в RAC в не работают.
Вот перечень этих технологий:
- каналы (пакет DBMS_PIPE) - не синхронизируются между узлами кластера;
- глобальные контексты приложений - также не синхронизируются между узлами кластера;
- сигналы (пакет DBMS_ALERT) - сигналы тоже не синхронизируются между узлами кластера;
- задания управляемые через пакет DBMS_JOB - крайне не рекомендуется использовать в RAC, поскольку задания этого пакета не поддерживают сервисы, и привязка заданий может быть задана только жестко к узлам, при привязке задания к узлу оно не переживает failover текущего экземпляра, при отсутствии привязки задание может выживать после падения узла (начиная с 10.2.0.3) но запускается при этом на произвольном узле.
Методы борьбы с вышеперечисленными технологиями мы подробно рассматриваем на нашем семинаре RAC Deep Dive for Developers
Довольно часто приложение имеет большие объемы PL/SQL-кода (сотни тысяч и даже миллионы строк кода), и вспомнить о том, в каком месте используется тот же DBMS_PIPE крайне сложно: код давно отлажен и работает, а его автор уже давно не работает в компании.
Для того, что облегчить анализ серверной части кода (хранимых процедур PL/SQL) я разработал утилиту RACChecker. Эта утилита поможет быстро ответить на вопрос: готово ли, в минимальной степени, ваше приложение при переходе в RAC.
RACChecker анализирует ваш исходный код и находит объекты и строки кода, где вы используете технологии, которые в RAC не работают.
C:\RAC\Utils\RACChecker>RACChecker.exe help=y
RAC Checker for ISV: Release 0.0.1 - Development on 14.09.2008 23:29:23
Utility for check correctly PL/SQL for Oracle RAC
Copyright (c) 2008, Igor Melnikov. All rights reserved.
You can control how RACChecker runs by entering the RACChecker command followed
by various arguments. To specify parameters, you use keywords:
Format: RACChecker parameter=value TYPE=value
Example: RACChecker USERID=scott/tiger@orcl TYPE=PIPE
RACChecker USERID=demo/demo@demo TYPE=ALL
Keyword Description (Default)
--------------------------------------------------
SCHEMAS schemas in which check ALL-for all schemas (ALL)
HELP print this message: Y/N (N)
TYPE object type: PIPE,ALERT,CONTEXT,JOB,ALL (ALL)
REPORT_FILE file name for output report
SEQUENCES Show all user sequences (Y)
USERID Oracle connection string
Я думаю, из списка параметров очевидно их назначение.
Следует обратить внимание лишь на следующие моменты:
- пользователь в строке подключения (параметр USERID) должен иметь права на чтение словаря (dictionary);
- утилита опционально может находить некэшируемые последовательности (с ними тоже возможны проблемы в RAC);
- пока не поддерживается анализ зашифрованного кода (с помощью утилиты wrap), т.е. код должен быть скомпилирован в открытом виде;
- для своей работы утилита требует установленной среды выполнения .NET Framework 3.5, а также ODP.NET Provider 11.1.0.6.21 - рекомендуется установить версию поставляемую с Instant Client - она небольшая по размеру.
Конечно никакого волшебства в работе этой утилиты нет: она всего лишь анализирует соответствующие представления словаря.
Уже есть история успеха (Success Story :-) ):
с помощью этой утилиты мне за пару минут удалось быстро проанализировать 750 тыс. строк кода в приложении нашего партнера-разработчика и определить модули и строки которые вызовут проблемы в RAC.
Надеюсь с помощью RACChecker вы быстро определите проблемные места при переходе в RAC!
Ссылка для скачивания: RACChecker.
P.S. Приветствуются рекомендации и замечания по функционалу ...
Читать дальше...