Печать
Категория: Вопросы и ответы Oracle
Просмотров: 11893

В первую очередь надо посмотреть список проинсталлированных опций. Сделать это можно, выполнив запрос к представлению v$option:

SQL> SELECT * FROM v$option WHERE value = 'TRUE';
 
PARAMETER                           VALUE
----------------------------------- -----
Partitioning                        TRUE 
Objects                             TRUE 
Advanced replication                TRUE 
Bit-mapped indexes                  TRUE 
Connection multiplexing             TRUE 
Connection pooling                  TRUE 
…

Но даже если опция проинсталлирована, это вовсе не означает, что она используется Oracle. В этом случае, что бы узнать какие из функций действительно применяются, необходимо сделать запрос к представлению dba_feature_usage_statistics:

SQL> SELECT name, first_usage_date, last_usage_date, sample_interval 
  2>   FROM dba_feature_usage_statistics
  3>  WHERE detected_usages > 0  
 
NAME                     FIRST_USAGE_DATE    LAST_USAGE_DATE     SAMPLE_INTERVAL
------------------------ ------------------- ------------------- ---------------
Partitioning (system)    14.03.2011 05:16:11 31.05.2011 15:23:57 604800         
Recovery Area            14.03.2011 05:16:11 31.05.2011 15:23:57 604800         
Recovery Manager (RMAN)  14.03.2011 05:16:11 31.05.2011 15:23:57 604800         
…

Данное представление отображает статистику использования функций Oracle. Статистика собирается раз в неделю (колонка sample_interval = 604800). Отследить дату последнего изменения статистики можно по столбцу last_sample_date. Столбец currently_used говорит об использовании функции или опции в момент времени последнего сбора статистики. Но делать выборку из представления используя значение этого поля всё же не стоит. Лучше ориентироваться на счётчик использования detected_usages и даты в столбцах first_usage_date и last_usage_date, которые показывают, когда функция использовалась первый и последний раз.

Если же требуется узнать, используется ли выбранная опция Oracle на текущий момент времени, то в этом случае придётся применить пакет sys.dbms_feature_usage_internal. С помощью процедуры exec_db_usage_sampling пакета можно собрать статистику использования всех функций и опций, на текущий момент времени, как это сделано в следующем примере:

SQL> exec sys.dbms_feature_usage_internal.exec_db_usage_sampling(SYSDATE);

Единственным неудобством в этом случае будет то, что процедура не обновляет поле last_sample_date, поэтому значение поля currently_used будет неправильным. В этом случае лучше использовать другую процедуру пакета sample_one_feature. Она проводит проверку использования по одной опции, но сохраняет все данные корректно:

SQL> exec sys.dbms_feature_usage_internal.sample_one_feature('Advanced Security');