- каналы (пакет DBMS_PIPE) - не синхронизируются между узлами кластера;
- объекты БД типа DIRECTORY (каталоги в файловой системе) должны располагаться на разделяемом сторадже и должны быть видны всем узам кластера;
- вместо V$-представлений нужно использовать соответствующие GV$-представления;
- задания управляемые через пакет DBMS_JOB - крайне не рекомендуется использовать в RAC, поскольку задания этого пакета не поддерживают сервисы.
Методы борьбы с вышеперечисленными технологиями мы подробно рассматривали на культовом семинаре "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: Release 12.2.0.1.0 - Production on 15.04.2015 11:07:13 Utility for check support Oracle DB for RAC and Exadata Copyright (c) 2016 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,JOB,ALL (ALL) REPORT_FILE file name for output report PARFILE parameter file name SEQUENCES Show NON-cached sequences (Y) MIN_SEQ_CACHE Check for sequences on minimum cache size (20) SEQ_ORDERED Check for sequences which are ordered (N) SAVE_SOURCE Save sources for "bad" objects (N) DIR_SOURCE Directory where sources will be save SEQ_DDL_OPT Generate sequence ddl-optimization for RAC: CACHE,ORDER,BOTH,NONE (NONE) CHECK_DIRS Check directory objects (for shared dir issue) (N) CHECK_V$VIEWS Check v$-views usage (Y) USERID Oracle connection string
Я думаю, что из списка параметров очевидно их назначение.
Следует обратить внимание лишь на следующие моменты:
- пользователь в строке подключения (параметр USERID) должен иметь права на чтение словаря (dictionary);
- утилита опционально может находить некэшируемые последовательности (с ними тоже возможны проблемы в RAC);
- возможна выгрузка DDL-скриптов для плохих объектов с помощью параметра SAVE_SOURCE=Y;
- для своей работы утилита требует установленной среды выполнения .NET Framework 4.5, а также ODP.NET Provider 12.1.0.2.4 - рекомендуется установить версию поставляемую с Instant Client - она небольшая по размеру.
Конечно, никакого волшебства в работе этой утилиты нет: она всего лишь анализирует соответствующие представления словаря.
Утилита может находить факт использования неработающих в RAC технологий (например: пакет DBMS_PIPE), даже если PL/SQL-код зашифрован (wrapped). Утилита на "лету" определяет что код зашифрован, и в этом случае анализирует не исходный код, а зависимости от пакетов dbms_pipe,dbms_job.
Утилита НЕ может обнаружить факт использования этих пакетов только в одном случае: если они используются через динамический PL/SQL (EXECUTE IMMEDIATE или DBMS_SQL) и код зашифрован.
За время своего существования утилита RACChecker постоянно развивалась, и помогла очень многим заказчикам перенести свои существующие приложения в среду Oracle Real Application Cluster.
C помощью RACChecker вы быстро определите проблемные места при переходе в RAC!
Комментариев нет:
Отправить комментарий