Пакет STATSPACK. Как установить? ORA-01476:Divisor is equal to zero. v_$fixed_view_definition

dbstalker, 18 сентября

Для того, чтобы настроить Вашу базу данных Oracle, нужно заняться сбором статистических данных о ее работе. В этом Вам поможет утилита STATSPACK. Установить ее очень просто – все написано в документе %ORACLE_HOME% \rdbms\admin\spdoc.txt.

Установка сводится к выполнению скрипта %ORACLE_HOME% \rdbms\admin\spcreate.sql (указать нужно только пароль для вновь создаваемого пользователя PERFSTAT , табличное пространства для него и пространство TEMP). После выполнения указанного скрипта, будет создан пользователь PERFSTAT, около 41 таблицы ( ORACLE 10g – 67) и сам пакет STATSPACK.Далее, если выполнить процедуру:

connect perfstat/perfstat_password
execute statspack.snap;

то таблицы в схеме PERFSTAT будут заполнены информацией о состоянии базы данных на момент ее выполнения. Это снимок будет иметь свой уникальный идентификатор (ID). В любой другой момент выполнения Вами этой процедуры формируется новый снимок базы данных со своим ID. Можно, конечно, анализировать заполняемые таблицы. Но оракл предлагает сформировать отчет с помощью %ORACLE_HOME%\ rdbms\admin\spreport.sql. Печатайте, смотрите, анализируйте.

Все это хорошо, но вот при работе STATSPACK-пакета в среде ORACLE 10.2.0.1.0 на операционной системе LINUX были у меня проблемы. Процедура завершала свое выполнение с ошибкой ORA-01476:Divisor is equal to zero. Эта ошибка генерировалась при обращении к представлению v$sga_target_advice.

С помощью представления v_$fixed_view_definition определено было, что ошибку вызывает операция A.estd_physical_reads / A.base_estd_phy_reads в следующем запросе:

select A.inst_id, A.sgasz, round((A.sgasz / A.base_sgasz), 4 ), round(A.base_dbtime * round((A.dbtime / A.base_estd_dbtime), 4), 0),round((A.dbtime / A.base_estd_dbtime), 4),round(A.base_phy_reads *round((A.estd_physical_reads / A.base_estd_phy_reads), 4), 0) from x$kmgsbsadv A order by A.inst_id

В самом деле, в колонке base_estd_phy_reads таблицы x$kmgsbsadv находится нулевое значение, что и привело в ошибке.

Как выход из сложившейся ситуации, решено было создать свое представление, обходящее этот показатель. Соответствующее изменение было внесено также в сам пакет STATSPACK.

 

Новый комментарий

Я не спамер: введите суму 6+2



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Расписание автобусов
18 июля, 3 ответа
Отдых в августе
17 июля, 4 ответа