DBA Data[Home] [Help]

PROCEDURE: SYS.DBMS_FEATURE_REGISTER_ALLFEAT

Source


1 procedure DBMS_FEATURE_REGISTER_ALLFEAT
2 as
3   /* string to get the last sample date */
4   DBFUS_LAST_SAMPLE_DATE_STR CONSTANT VARCHAR2(100) :=
5             ' (select nvl(max(last_sample_date), sysdate-7) ' ||
6                 'from wri$_dbu_usage_sample) ';
7 
8 begin
9 
10   /**********************
11    * Advanced Replication
12    **********************/
13 
14   declare
15     DBFUS_ADV_REPLICATION_STR CONSTANT VARCHAR2(1000) :=
16         'select count(*), NULL, NULL from dba_repcat';
17 
18   begin
19     dbms_feature_usage.register_db_feature
20      ('Advanced Replication',
21       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
22       NULL,
23       dbms_feature_usage.DBU_DETECT_BY_SQL,
24       DBFUS_ADV_REPLICATION_STR,
25       'Advanced Replication has been enabled.');
26   end;
27 
28   /**********************
29    * Advanced Security Option Encryption/Checksumming
30    **********************/
31 
32   declare
33     DBFUS_ASO_STR CONSTANT VARCHAR2(1000) :=
34      'select count (*), NULL, NULL from v$session_connect_info where ' ||
35         'network_service_banner like ''%AES256 encryption%'' or ' ||
36         'network_service_banner like ''%AES192 encryption%'' or ' ||
37         'network_service_banner like ''%AES128 encryption%'' or ' ||
38         'network_service_banner like ''%RC4_256 encryption%'' or ' ||
39         'network_service_banner like ''%RC4_128 encryption%'' or ' ||
40         'network_service_banner like ''%3DES168 encryption%'' or ' ||
41         'network_service_banner like ''%3DES112 encryption%'' or ' ||
42         'network_service_banner like ''%RC4_56 encryption%'' or ' ||
43         'network_service_banner like ''%RC4_40 encryption%'' or ' ||
44         'network_service_banner like ''%DES encryption%'' or ' ||
45         'network_service_banner like ''%DES40 encryption%'' or ' ||
46         'network_service_banner like ''%SHA1 crypto-checksumming%'' or ' ||
47         'network_service_banner like ''%MD5 crypto-checksumming%''';
48   begin
49     dbms_feature_usage.register_db_feature
50      ('ASO native encryption and checksumming',
51       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
52       NULL,
53       dbms_feature_usage.DBU_DETECT_BY_SQL,
54       DBFUS_ASO_STR,
55       'ASO network native encryption and checksumming is being used.');
56   end;
57 
58   /**********************
59    * Advanced Network Compression
60    **********************/
61   declare
62    DBFUS_NETWORK_COMPRESSION_STR CONSTANT VARCHAR2(1000) :=
63     'select count (*), 0, null' ||
64       ' from  v$session_connect_info' ||
65       ' where network_service_banner like ''%Compression%''';
66   begin
67     dbms_feature_usage.register_db_feature
68      ('Oracle Advanced Network Compression Service',
69       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
70       NULL,
71       dbms_feature_usage.DBU_DETECT_BY_SQL,
72       DBFUS_NETWORK_COMPRESSION_STR,
73       'Oracle Advanced Network Compression Service Used');
74   end;
75 
76   /**********************
77    * Traditional Audit
78    **********************/
79   declare
80     DBFUS_AUDIT_PROC CONSTANT VARCHAR2(1000) :=
81       'dbms_feature_audit_options';
82 
83   begin
84     dbms_feature_usage.register_db_feature
85      ('Traditional Audit',
86       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
87       NULL,
88       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
89       DBFUS_AUDIT_PROC,
90       'Traditional Audit in use.');
91   end;
92 
93   /**************************
94    * Fine Grained Audit (FGA)
95    **************************/
96   declare
97     DBFUS_FGA_PROC CONSTANT VARCHAR2(1000) :=
98       'dbms_feature_fga_audit';
99 
100   begin
101     dbms_feature_usage.register_db_feature
102      ('Fine Grained Audit',
103       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
104       NULL,
105       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
106       DBFUS_FGA_PROC,
107       'Fine Grained Audit in use.');
108   end;
109 
110   /**********************
111    * Unified Audit
112    **********************/
113   declare
114     DBFUS_UNIFIED_PROC CONSTANT VARCHAR2(1000) :=
115       'dbms_feature_unified_audit';
116 
117   begin
118     dbms_feature_usage.register_db_feature
119      ('Unified Audit',
120       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
121       NULL,
122       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
123       DBFUS_UNIFIED_PROC,
124       'Unified Audit in use.');
125   end;
126 
127   /**********************************************
128    * Auto-Maintenance Tasks
129    *********************************************/
130 
131   declare
132     DBFUS_KET_OPT_STATS_STR CONSTANT VARCHAR(1000) :=
133      'select nvl(ats, 0) * nvl(cls, 0) enabled, ' ||
134       'NVL((select SUM(jobs_created) ' ||
135              'from dba_autotask_client_history ' ||
136             'where client_name = ''auto optimizer stats collection'' ' ||
137               'and window_start_time >  ' ||
138                   '(SYSDATE - INTERVAL ''168'' HOUR) ), 0) jobs, NULL ' ||
139      'from (select DECODE(MAX(autotask_status),''ENABLED'',1,0) ats, ' ||
140             'DECODE(MAX(OPTIMIZER_STATS),''ENABLED'',1,0) cls ' ||
141             'from dba_autotask_window_clients)';
142 
143     DBFUS_KET_SEG_STATS_STR CONSTANT VARCHAR(1000) :=
144      'select nvl(ats, 0) * nvl(cls, 0) enabled, ' ||
145       'NVL((select SUM(jobs_created) ' ||
146              'from dba_autotask_client_history ' ||
147             'where client_name = ''auto space advisor'' ' ||
148               'and window_start_time >  ' ||
149                   '(SYSDATE - INTERVAL ''168'' HOUR) ), 0) jobs, NULL ' ||
150      'from (select DECODE(MAX(autotask_status),''ENABLED'',1,0) ats, ' ||
151             'DECODE(MAX(SEGMENT_ADVISOR),''ENABLED'',1,0) cls ' ||
152             'from dba_autotask_window_clients)';
153 
154     DBFUS_KET_SQL_STATS_STR CONSTANT VARCHAR(1000) :=
155      'select nvl(ats, 0) * nvl(cls, 0) enabled, ' ||
156       'NVL((select SUM(jobs_created) ' ||
157              'from dba_autotask_client_history ' ||
158             'where client_name = ''sql tuning advisor'' ' ||
159               'and window_start_time >  ' ||
160                   '(SYSDATE - INTERVAL ''168'' HOUR) ), 0) jobs, NULL ' ||
161      'from (select DECODE(MAX(autotask_status),''ENABLED'',1,0) ats, ' ||
162             'DECODE(MAX(SQL_TUNE_ADVISOR),''ENABLED'',1,0) cls ' ||
163             'from dba_autotask_window_clients)';
164 
165 
166   begin
167     dbms_feature_usage.register_db_feature
168      ('Automatic Maintenance - Optimizer Statistics Gathering',
169       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
170       NULL,
171       dbms_feature_usage.DBU_DETECT_BY_SQL,
172       DBFUS_KET_OPT_STATS_STR,
173       'Automatic initiation of Optimizer Statistics Collection');
174 
175     dbms_feature_usage.register_db_feature
176      ('Automatic Maintenance - Space Advisor',
177       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
178       NULL,
179       dbms_feature_usage.DBU_DETECT_BY_SQL,
180       DBFUS_KET_SEG_STATS_STR,
181       'Automatic initiation of Space Advisor');
182 
183     dbms_feature_usage.register_db_feature
184      ('Automatic Maintenance - SQL Tuning Advisor',
185       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
186       NULL,
187       dbms_feature_usage.DBU_DETECT_BY_SQL,
188       DBFUS_KET_SQL_STATS_STR,
189       'Automatic initiation of SQL Tuning Advisor');
190   end;
191 
192   /**********************************************
193    * Automatic Segment Space Management (system)
194    **********************************************/
195 
196   declare
197     DBFUS_BITMAP_SEGMENT_SYS_PROC CONSTANT VARCHAR2(1000) :=
198       'DBMS_FEATURE_AUTO_SSM';
199 
200   begin
201     dbms_feature_usage.register_db_feature
202      ('Automatic Segment Space Management (system)',
203       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
204       NULL,
205       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
206       DBFUS_BITMAP_SEGMENT_SYS_PROC,
207       'Extents of locally managed tablespaces are managed ' ||
208       'automatically by Oracle.');
209   end;
210 
211   /********************************************
212    * Automatic Segment Space Management (user)
213    ********************************************/
214 
215   declare
216     DBFUS_BITMAP_SEGMENT_USER_STR CONSTANT VARCHAR2(1000) :=
217       'select count(*), NULL, NULL from dba_tablespaces where ' ||
218         'segment_space_management = ''AUTO'' and ' ||
219         'tablespace_name not in ' ||
220           '(''SYSTEM'', ''SYSAUX'', ''TEMP'', ''USERS'', ''EXAMPLE'')';
221 
222   begin
223     dbms_feature_usage.register_db_feature
224      ('Automatic Segment Space Management (user)',
225       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
226       NULL,
227       dbms_feature_usage.DBU_DETECT_BY_SQL,
228       DBFUS_BITMAP_SEGMENT_USER_STR,
229       'Extents of locally managed user tablespaces are managed ' ||
230       'automatically by Oracle.');
231   end;
232 
233   /*********************************
234    * Automatic SQL Execution Memory
235    *********************************/
236 
237   declare
238     DBFUS_AUTO_PGA_STR CONSTANT VARCHAR2(1000) :=
239       'select decode(pga + wap, 2, 1, 0), pga_aux + wap_aux, NULL from ' ||
240         '(select count(*) pga, 0 pga_aux from v$system_parameter ' ||
241           'where name = ''pga_aggregate_target'' and value != ''0''), ' ||
242         '(select count(*) wap, 0 wap_aux from v$system_parameter ' ||
243           'where name = ''workarea_size_policy'' and upper(value) = ''AUTO'')';
244 
245   begin
246     dbms_feature_usage.register_db_feature
247      ('Automatic SQL Execution Memory',
248       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
249       NULL,
250       dbms_feature_usage.DBU_DETECT_BY_SQL,
251       DBFUS_AUTO_PGA_STR,
252       'Sizing of work areas for all dedicated sessions (PGA) is automatic.');
253   end;
254 
255   /********************************
256    * Automatic Storage Management
257    ******************************/
258 
259   declare
260     DBFUS_ASM_PROC CONSTANT VARCHAR2(1000) := 'DBMS_FEATURE_ASM';
261 
262   begin
263     dbms_feature_usage.register_db_feature
264      ('Automatic Storage Management',
265       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
266       NULL,
267       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
268       DBFUS_ASM_PROC,
269       'Automatic Storage Management has been enabled');
270   end;
271 
272   /***************************
273    * Automatic Undo Management
274    ***************************/
275 
276   declare
277     DBFUS_AUM_PROC CONSTANT VARCHAR2(1000) := 'DBMS_FEATURE_AUM';
278 
279   begin
280     dbms_feature_usage.register_db_feature
281      ('Automatic Undo Management',
282       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
283       NULL,
284       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
285       DBFUS_AUM_PROC,
286       'Oracle automatically manages undo data using an UNDO tablespace.');
287   end;
288 
289   /**************************************
290    * Automatic Workload Repository (AWR)
291    **************************************/
292   begin
293     dbms_feature_usage.register_db_feature
294        ('Automatic Workload Repository'
295        ,dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED
296        ,NULL
297        ,dbms_feature_usage.DBU_DETECT_BY_PROCEDURE
298        ,'DBMS_FEATURE_AWR'
299        ,'A manual Automatic Workload Repository (AWR) snapshot was taken ' ||
300         'in the last sample period.');
301   end;
302 
303 
304   /***************
305    * AWR Baseline
306    ***************/
307 
308   declare
309     DBFUS_AWR_BASELINE_STR CONSTANT VARCHAR2(1000) :=
310       'select count(*), count(*), NULL from dba_hist_baseline ' ||
311         'where baseline_name != ''SYSTEM_MOVING_WINDOW''';
312 
313   begin
314     dbms_feature_usage.register_db_feature
315      ('AWR Baseline',
316       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
317       NULL,
318       dbms_feature_usage.DBU_DETECT_BY_SQL,
319       DBFUS_AWR_BASELINE_STR,
320       'At least one AWR Baseline has been created by the user');
321   end;
322 
323   /************************
324    * AWR Baseline Template
325    ************************/
326 
327   declare
328     DBFUS_AWR_BL_TEMPLATE_STR VARCHAR2(1000) :=
329       'select count(*), count(*), NULL ' ||
330         'from dba_hist_baseline_template';
331 
332   begin
333     dbms_feature_usage.register_db_feature
334      ('AWR Baseline Template',
335       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
336       NULL,
337       dbms_feature_usage.DBU_DETECT_BY_SQL,
338       DBFUS_AWR_BL_TEMPLATE_STR,
339       'At least one AWR Baseline Template has been created by the user');
340   end;
341 
342   /***************
343    * AWR Reports
344    ***************/
345 
346   declare
347     DBFUS_AWR_REPORT_STR CONSTANT VARCHAR2(1000) :=
348     q'[with last_period as
349        (select * from wrm$_wr_usage
350          where upper(feature_type) like 'REPORT'
351            and usage_time >= ]' ||
352     DBFUS_LAST_SAMPLE_DATE_STR ||
353     q'[)
354        select decode (count(*), 0, 0, 1),
355               count(*),
356               feature_list
357          from last_period,
358         (select substr(sys_connect_by_path(feature_count, ','),2) feature_list
359            from
360              (select feature_count,
361                      count(*) over () cnt,
362                      row_number () over (order by 1) seq
363                 from
364                   (select feature_name || ':' || count(*) feature_count
365                      from last_period
366                  group by feature_name)
367              )
368         where seq=cnt
369         start with seq=1
370    connect by prior seq+1=seq)
371      group by feature_list]';
372 
373   begin
374     dbms_feature_usage.register_db_feature
375      ('AWR Report',
376       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
377       NULL,
378       dbms_feature_usage.DBU_DETECT_BY_SQL,
379       DBFUS_AWR_REPORT_STR,
380       'At least one Workload Repository Report has been created by the user');
381   end;
382 
383   /**************************
384    * Backup Encryption
385    **************************/
386 
387   /* This query returns 1 if there are any encrypted backup pieces,
388    * whose status is 'available'.
389    * Controlfile autobackups are ignored, because we don't want to
390    * consider RMAN in use if they just turned on the controlfile autobackup
391    * feature. */
392 
393   begin
394     dbms_feature_usage.register_db_feature
395      ('Backup Encryption',
396       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
397       NULL,
398       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
399       'DBMS_FEATURE_BACKUP_ENCRYPTION',
400       'Encrypted backups are being used.');
401   end;
402 
403   /********************************
404    * Baseline Adaptive Thresholds
405    ********************************/
406 
407   declare
408     DBFUS_BASELINE_ADAPTIVE_STR CONSTANT VARCHAR2(1000) :=
409       'select decode(nvl(sum(moving)+sum(static),0), 0, 0, 1) '||
413                     ',decode(AB.baseline_id, 0, 1, 0) moving '||
410             ',nvl(sum(moving)+sum(static),0) '||
411             ',''Adaptive: ''||nvl(sum(moving),0)||''; Static:''||nvl(sum(static),0) '||
412         'from (select decode(AB.baseline_id, 0, 0, 1) static '||
414                 'from dbsnmp.bsln_threshold_params TP '||
415                     ',dbsnmp.bsln_baselines B '||
416                     ',dba_hist_baseline AB '||
417                     ',v$database D '||
418                     ',v$instance I '||
419                'where AB.dbid = D.dbid '||
420                  'and B.dbid = AB.dbid '||
421                  'and B.baseline_id = AB.baseline_id '||
422                  'and B.instance_name = I.instance_name '||
423                  'and TP.bsln_guid = B.bsln_guid '||
424                  'and in_effect = ''Y'')';
425   begin
426     dbms_feature_usage.register_db_feature
427      ('Baseline Adaptive Thresholds',
428       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
429       NULL,
430       dbms_feature_usage.DBU_DETECT_BY_SQL,
431       DBFUS_BASELINE_ADAPTIVE_STR,
432       'Adaptive Thresholds have been configured.');
433   end;
434 
435   /********************************
436    * Baseline Static Computations
437    ********************************/
438 
439   declare
440     DBFUS_BASELINE_COMPUTES_STR CONSTANT VARCHAR2(1000) :=
441       'select decode(count(*), 0, 0, 1), count(*), NULL '||
442         'from dba_hist_baseline_metadata AB '||
443             ',dbsnmp.bsln_baselines B '||
444             ',v$database D '||
445             ',v$instance I '||
446        'where AB.dbid = D.dbid '||
447          'and AB.baseline_type <> ''MOVING_WINDOW'' '||
448          'and B.dbid = AB.dbid '||
449          'and B.baseline_id = AB.baseline_id '||
450          'and B.instance_name = I.instance_name '||
451          'and B.last_compute_date IS NOT NULL';
452   begin
453     dbms_feature_usage.register_db_feature
454      ('Baseline Static Computations',
455       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
456       NULL,
457       dbms_feature_usage.DBU_DETECT_BY_SQL,
458       DBFUS_BASELINE_COMPUTES_STR,
459       'Static baseline statistics have been computed.');
460   end;
461 
462   /************************
463    * Block Change Tracking
464    ************************/
465 
466   declare
467     DBFUS_BLOCK_CHANGE_STR CONSTANT VARCHAR2(1000) :=
468       'select count(*), NULL, NULL ' ||
469         'from v$block_change_tracking where status = ''ENABLED''';
470 
471   begin
472     dbms_feature_usage.register_db_feature
473      ('Change-Aware Incremental Backup',
474       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
475       NULL,
476       dbms_feature_usage.DBU_DETECT_BY_SQL,
477       DBFUS_BLOCK_CHANGE_STR,
478       'Track blocks that have changed in the database.');
479   end;
480 
481   /**********************
482    * Client Identifier
483    **********************/
484 
485   declare
486     DBFUS_CLIENT_IDN_STR CONSTANT VARCHAR2(1000) :=
487       'select count(*), NULL, NULL from v$session ' ||
488       'where client_identifier is not null';
489 
490   begin
491     dbms_feature_usage.register_db_feature
492      ('Client Identifier',
493       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
494       NULL,
495       dbms_feature_usage.DBU_DETECT_BY_SQL,
496       DBFUS_CLIENT_IDN_STR,
497       'Application User Proxy Authentication: Client Identifier is ' ||
498       'used at this specific time.');
499   end;
500 
501 
502   /**********************************
503    * Clusterwide Global Transactions
504    **********************************/
505 
506   declare
507     DBFUS_CLUSTER_GTX_STR CONSTANT VARCHAR2(1000) :=
508       'select value, NULL, NULL from v$sysstat ' ||
509         'where name = ''Clusterwide global transactions''';
510 
511   begin
512     dbms_feature_usage.register_db_feature
513      ('Clusterwide Global Transactions',
514       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
515       NULL,
516       dbms_feature_usage.DBU_DETECT_BY_SQL,
517       DBFUS_CLUSTER_GTX_STR,
518       'Clusterwide Global Transactions is being used.');
519   end;
520 
521   /**********************************
522    * Crossedition Triggers
523    **********************************/
524 
525   declare
526     DBFUS_XEDTRG_STR CONSTANT VARCHAR2(1000) :=
527       'select count(1), count(1), NULL from trigger$ t ' ||
528         'where bitand(t.property, 8192) = 8192';
529 
530   begin
531     dbms_feature_usage.register_db_feature
532      ('Crossedition Triggers',
533       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
534       NULL,
535       dbms_feature_usage.DBU_DETECT_BY_SQL,
536       DBFUS_XEDTRG_STR,
537       'Crossedition triggers is being used.');
538   end;
539 
540   /******************************
541    * CSSCAN - character set scan
542    *******************************/
543 
544   declare
545     DBFUS_CSSCAN_STR CONSTANT VARCHAR2(1000) :=
546       'select count(*), null, null  from ' ||
547       'csmig.csm$parameters c ' ||
551 
548       'where c.name=''TIME_START'' and ' ||
549       'to_date(c.value, ''YYYY-MM-DD HH24:MI:SS'') ' ||
550       '>= ' || DBFUS_LAST_SAMPLE_DATE_STR;
552   begin
553     dbms_feature_usage.register_db_feature
554      ('CSSCAN',
555       dbms_feature_usage.DBU_INST_OBJECT,
556       'CSMIG.csm$parameters',
557       dbms_feature_usage.DBU_DETECT_BY_SQL,
558       DBFUS_CSSCAN_STR,
559       'Oracle Database has been scanned at least once for character set:' ||
560       'CSSCAN has been run at least once.');
561   end;
562 
563 
564   /******************************
565    * Character semantics turned on
566    *******************************/
567 
568   declare
569     DBFUS_CHAR_SEMANTICS_STR CONSTANT VARCHAR2(1000) :=
570       'select count(*), null, null  from ' ||
571       'sys.v$nls_parameters where ' ||
572       'parameter=''NLS_LENGTH_SEMANTICS'' and upper(value)=''CHAR'' ';
573 
574   begin
575     dbms_feature_usage.register_db_feature
576      ('Character Semantics',
577       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
578       NULL,
579       dbms_feature_usage.DBU_DETECT_BY_SQL,
580       DBFUS_CHAR_SEMANTICS_STR,
581       'Character length semantics is used in Oracle Database');
582   end;
583 
584   /****************************
585    * Character Set of Database
586    ****************************/
587 
588   declare
589     DBFUS_CHAR_SET_STR CONSTANT VARCHAR2(1000) :=
590       'select 1, null, value  from ' ||
591       'sys.v$nls_parameters where ' ||
592       'parameter=''NLS_CHARACTERSET'' ';
593 
594   begin
595     dbms_feature_usage.register_db_feature
596      ('Character Set',
597       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
598       NULL,
599       dbms_feature_usage.DBU_DETECT_BY_SQL,
600       DBFUS_CHAR_SET_STR,
601       'Character set is used in Oracle Database');
602   end;
603 
604 
605   /**********************
606    * Data Guard
607    **********************/
608 
609   begin
610     dbms_feature_usage.register_db_feature
611      ('Data Guard',
612       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
613       NULL,
614       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
615       'DBMS_FEATURE_DATA_GUARD',
616       'Data Guard, a set of services, is being used to create, ' ||
617       'maintain, manage, and monitor one or more standby databases.');
618   end;
619 
620   /**********************
621    * Data Mining
622    **********************/
623 
624  declare
625     DBFUS_ODM_PROC VARCHAR2(100) := 'DBMS_FEATURE_DATABASE_ODM';
626   begin
627     dbms_feature_usage.register_db_feature
628      ('Data Mining',
629       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
630       NULL,
631       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
632       DBFUS_ODM_PROC,
633       'There exist Oracle Data Mining models in the database.');
634   end;
635 
636 
637   /**********************
638    * Dynamic SGA
639    **********************/
640 
641   begin
642     dbms_feature_usage.register_db_feature
643      ('Dynamic SGA',
644       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
645       NULL,
646       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
647       'DBMS_FEATURE_DYN_SGA',
651 
648       'The Oracle SGA has been dynamically resized through an ' ||
649       'ALTER SYSTEM SET statement.');
650   end;
652   /*************************************************
653    * DMU - Database Migration Assistant for Unicode
654    *************************************************/
655 
656   begin
657     dbms_feature_usage.register_db_feature
658      ('Database Migration Assistant for Unicode',
659       dbms_feature_usage.DBU_INST_OBJECT,
660       'SYS.PROPS$',
661       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
662       'DBMS_FEATURE_DMU',
663       'Database Migration Assistant for Unicode has been used.');
664   end;
665 
666   /******************************
667    * Editions
668    *******************************/
669 
670   declare
671     DBFUS_EDITION_STR CONSTANT VARCHAR2(1000) :=
672       'select count(1), count(1), null from sys.edition$ e, sys.obj$ o ' ||
673       'where e.obj# = o.obj# and o.name != ''ORA$BASE''';
674 
675   begin
676     dbms_feature_usage.register_db_feature
677      ('Editions',
678       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
679       NULL,
680       dbms_feature_usage.DBU_DETECT_BY_SQL,
681       DBFUS_EDITION_STR,
682       'Editions is being used.');
683   end;
684 
685   /******************************
686    * Editioning Views
687    *******************************/
688 
689   declare
690     DBFUS_EDITION_STR CONSTANT VARCHAR2(1000) :=
691       'select count(1), count(1), null from sys.view$ v ' ||
692       'where bitand(v.property, 32) = 32';
693 
694   begin
695     dbms_feature_usage.register_db_feature
696      ('Editioning Views',
697       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
698       NULL,
699       dbms_feature_usage.DBU_DETECT_BY_SQL,
700       DBFUS_EDITION_STR,
701       'Editioning views is being used.');
702   end;
703 
704   /******************************
705    * EM - Cloud Control tracking
706    *******************************/
707 
708   declare
709     DBFUS_EM_GC_STR CONSTANT VARCHAR2(1000) :=
710       'select count(1), null, null from ' ||
711       'dbsnmp.mgmt_db_feature_log a ' ||
712       'where a.source=''GC'' and ' ||
713       'CAST(a.last_update_date AS DATE) ' ||
714       '>= ' || DBFUS_LAST_SAMPLE_DATE_STR;
715   begin
716     dbms_feature_usage.register_db_feature
717      ('EM Cloud Control',
718       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
719       NULL,
720       dbms_feature_usage.DBU_DETECT_BY_SQL,
721       DBFUS_EM_GC_STR,
722       'EM Cloud Control Database Home Page has been visited at least once.');
723   end;
724 
725   /******************************
726    * EM Performance Page  tracking
727    *******************************/
728 
729   declare
730     DBFUS_EM_DIAG_STR CONSTANT VARCHAR2(1000) :=
731       'select count(1), null, null from ' ||
732       'dbsnmp.mgmt_db_feature_log a ' ||
733       'where a.source=''Diagnostic'' and ' ||
734       'CAST(a.last_update_date AS DATE) ' ||
735       '>= ' || DBFUS_LAST_SAMPLE_DATE_STR;
736   begin
737     dbms_feature_usage.register_db_feature
738      ('EM Performance Page',
739       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
740       NULL,
741       dbms_feature_usage.DBU_DETECT_BY_SQL,
742       DBFUS_EM_DIAG_STR,
743       'EM Performance Page has been visited at least once.');
744   end;
745 
746   /******************************
747    * EM - SQL Monitoring and Tuning pages tracking
748    *******************************/
749 
750   declare
751     DBFUS_EM_TUNING_STR CONSTANT VARCHAR2(1000) :=
752       'select count(1), null, null from ' ||
753       'dbsnmp.mgmt_db_feature_log a ' ||
754       'where a.source=''Tuning'' and ' ||
755       'CAST(a.last_update_date AS DATE) ' ||
756       '>= ' || DBFUS_LAST_SAMPLE_DATE_STR;
757   begin
758     dbms_feature_usage.register_db_feature
759      ('SQL Monitoring and Tuning pages',
760       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
761       NULL,
762       dbms_feature_usage.DBU_DETECT_BY_SQL,
763       DBFUS_EM_TUNING_STR,
764       'EM SQL Monitoring and Tuning pages has been visited at least once.');
765   end;
766 
767   /**********************
768    * File Mapping
769    **********************/
770 
771   declare
772     DBFUS_FILE_MAPPING_STR CONSTANT VARCHAR2(1000) :=
773       'select count(*), NULL, NULL from v$system_parameter where ' ||
774         'name = ''file_mapping'' and upper(value) = ''TRUE'' and ' ||
775         'exists (select 1 from v$map_file)';
776 
777   begin
778     dbms_feature_usage.register_db_feature
779      ('File Mapping',
780       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
781       NULL,
782       dbms_feature_usage.DBU_DETECT_BY_SQL,
783       DBFUS_FILE_MAPPING_STR,
784       'File Mapping, the mechanism that shows a complete mapping ' ||
785       'of a file to logical volumes and physical devices, is ' ||
786       'being used.');
787   end;
788 
789 
790   /***************************
791    * Flashback Database
792    ***************************/
793 
794   declare
798 
795     DBFUS_FB_DB_STR CONSTANT VARCHAR2(1000) :=
796       'select count(*), NULL, NULL from v$database where ' ||
797         'flashback_on = ''YES''';
799   begin
800     dbms_feature_usage.register_db_feature
801      ('Flashback Database',
802       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
803       NULL,
804       dbms_feature_usage.DBU_DETECT_BY_SQL,
805       DBFUS_FB_DB_STR,
806       'Flashback Database, a rewind button for the database, is enabled');
807   end;
808 
809 
810   /***************************
811    * Flashback Data Archive
812    ***************************/
813 
814   declare
815     DBFUS_FDA_STR CONSTANT VARCHAR2(1000) :=
816       'select count(*), NULL, NULL from DBA_FLASHBACK_ARCHIVE_TABLES';
817 
818   begin
819     dbms_feature_usage.register_db_feature
820      ('Flashback Data Archive',
821       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
822       NULL,
823       dbms_feature_usage.DBU_DETECT_BY_SQL,
824       DBFUS_FDA_STR,
825       'Flashback Data Archive, a historical repository of changes to data ' ||
826       'contained in a table, is used ');
827   end;
828 
829 
830   /******************************
831    * Internode Parallel Execution
832    ******************************/
833 
834   declare
835     DBFUS_INODE_PRL_EXEC_STR CONSTANT VARCHAR2(1000) :=
836       'select sum(value), NULL, NULL from gv$pq_sysstat ' ||
837         'where statistic like ''%Initiated (IPQ)%''';
838 
839 
840   begin
841     dbms_feature_usage.register_db_feature
842      ('Internode Parallel Execution',
843       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
844       NULL,
845       dbms_feature_usage.DBU_DETECT_BY_SQL,
846       DBFUS_INODE_PRL_EXEC_STR,
847       'Internode Parallel Execution is being used.');
848   end;
849 
850   /**********************
851    * Label Security
852    **********************/
853 
854   declare
855     DBFUS_LABEL_SECURITY_PROC CONSTANT VARCHAR2(1000) :=
856       'dbms_feature_label_security';
857   begin
858     dbms_feature_usage.register_db_feature
859      ('Label Security',
860       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
861       NULL,
862       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
863       DBFUS_LABEL_SECURITY_PROC,
864       'Oracle Label Security is being used');
865   end;
866 
867   /**********************
868    * Oracle Database Vault
869    **********************/
870   declare
871      DBFUS_DATABASE_VAULT_PROC CONSTANT VARCHAR2(1000) :=
872        'DBMS_FEATURE_DATABASE_VAULT';
873   begin
874      dbms_feature_usage.register_db_feature
875      ('Oracle Database Vault',
876       dbms_feature_usage.DBU_INST_OBJECT,
877       'dvsys.realm$',
878       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
879       DBFUS_DATABASE_VAULT_PROC,
880       'Oracle Database Vault is being used');
881   end;
882 
883   /***************************************
884    * Deferred Segment Creation
885    ***************************************/
886 
887   declare
888     DBFUS_DEFERRED_SEG_CRT_PROC CONSTANT VARCHAR2(1000) :=
889       'DBMS_FEATURE_DEFERRED_SEG_CRT';
890   begin
891     dbms_feature_usage.register_db_feature
892      ('Deferred Segment Creation',
893       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
894       NULL,
895       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
896       DBFUS_DEFERRED_SEG_CRT_PROC,
897       'Deferred Segment Creation is being used');
898   end;
899 
900   /***************************************
901    * Locally Managed Tablespaces (system)
902    ***************************************/
903 
904   declare
905     DBFUS_LOCALLY_MANAGED_SYS_PROC CONSTANT VARCHAR2(1000) :=
906       'DBMS_FEATURE_LMT';
907 
908   begin
909     dbms_feature_usage.register_db_feature
910      ('Locally Managed Tablespaces (system)',
911       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
912       NULL,
913       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
914       DBFUS_LOCALLY_MANAGED_SYS_PROC,
915       'There exists tablespaces that are locally managed in ' ||
916       'the database.');
917   end;
918 
919   /*************************************
920    * Locally Managed Tablespaces (user)
921    *************************************/
922 
923   declare
924     DBFUS_LOCALLY_MANAGED_USER_STR CONSTANT VARCHAR2(1000) :=
925       'select count(*), NULL, NULL from dba_tablespaces where ' ||
926         'extent_management = ''LOCAL'' and ' ||
927         'tablespace_name not in ' ||
928           '(''SYSTEM'', ''SYSAUX'', ''TEMP'', ''USERS'', ''EXAMPLE'')';
929 
930   begin
931     dbms_feature_usage.register_db_feature
932      ('Locally Managed Tablespaces (user)',
933       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
934       NULL,
935       dbms_feature_usage.DBU_DETECT_BY_SQL,
936       DBFUS_LOCALLY_MANAGED_USER_STR,
937       'There exists user tablespaces that are locally managed in ' ||
938       'the database.');
939   end;
940 
941   /******************************
942    * Messaging Gateway
943    ******************************/
944 
945   declare
949         'exists (select 1 from mgw$_links)';
946     DBFUS_MSG_GATEWAY_STR CONSTANT VARCHAR2(1000) :=
947       'select count(*), NULL, NULL from dba_registry ' ||
948         'where comp_id = ''MGW'' and status != ''REMOVED'' and ' ||
950 
951   begin
952     dbms_feature_usage.register_db_feature
953      ('Messaging Gateway',
954       dbms_feature_usage.DBU_INST_OBJECT,
955       'SYS.MGW$_GATEWAY',
956       dbms_feature_usage.DBU_DETECT_BY_SQL,
957       DBFUS_MSG_GATEWAY_STR,
958       'Messaging Gateway, that enables communication between non-Oracle ' ||
959       'messaging systems and Advanced Queuing (AQ), link configured.');
960   end;
961 
962   /**********************
963    * VLM
964    **********************/
965 
966   declare
967     DBFUS_VLM_ADV_STR CONSTANT VARCHAR2(1000) :=
968       'select count(*), NULL, NULL from v$system_parameter where ' ||
969         'name like ''use_indirect_data_buffers'' and upper(value) != ''FALSE''';
970   begin
971     dbms_feature_usage.register_db_feature
972      ('Very Large Memory',
973       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
974       NULL,
975       dbms_feature_usage.DBU_DETECT_BY_SQL,
976       DBFUS_VLM_ADV_STR,
977       'Very Large Memory is enabled.');
978   end;
979 
980 
981   /**********************
982    * Automatic Memory Tuning
983    **********************/
984   begin
985     dbms_feature_usage.register_db_feature
986      ('Automatic Memory Tuning',
987       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
988       NULL,
989       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
990       'DBMS_FEATURE_AUTO_MEM',
991       'Automatic Memory Tuning is enabled.');
992   end;
993 
994   /**********************
995    * Automatic SGA Tuning
996    **********************/
997   begin
998     dbms_feature_usage.register_db_feature
999      ('Automatic SGA Tuning',
1000       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1001       NULL,
1002       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1003       'DBMS_FEATURE_AUTO_SGA',
1004       'Automatic SGA Tuning is enabled.');
1005   end;
1006 
1007 
1008   /**********************
1009    * ENCRYPTED Tablespace
1010    **********************/
1011   declare
1012     DBFUS_ENT_ADV_STR CONSTANT VARCHAR2(1000) :=
1013       'select count(*), NULL, NULL from v$encrypted_tablespaces';
1014   begin
1015     dbms_feature_usage.register_db_feature
1016      ('Encrypted Tablespaces',
1017       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1018       NULL,
1019       dbms_feature_usage.DBU_DETECT_BY_SQL,
1020       DBFUS_ENT_ADV_STR,
1021       'Encrypted Tablespaces is enabled.');
1022   end;
1023 
1024 
1025   /**********************
1026    * MTTR Advisor
1027    **********************/
1028 
1029   declare
1030     DBFUS_MTTR_ADV_STR CONSTANT VARCHAR2(1000) :=
1031       'select count(*), NULL, NULL from v$statistics_level where ' ||
1032         'statistics_name = ''MTTR Advice'' and ' ||
1033         'system_status = ''ENABLED'' and ' ||
1034         'exists (select 1 from v$instance_recovery ' ||
1035                   'where target_mttr != 0) and ' ||
1036         'exists (select 1 from v$mttr_target_advice ' ||
1037                   'where advice_status = ''ON'')';
1038 
1039   begin
1040     dbms_feature_usage.register_db_feature
1041      ('MTTR Advisor',
1042       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1043       NULL,
1044       dbms_feature_usage.DBU_DETECT_BY_SQL,
1045       DBFUS_MTTR_ADV_STR,
1046       'Mean Time to Recover Advisor is enabled.');
1047   end;
1048 
1049   /***********************
1050    * Multiple Block Sizes
1051    ***********************/
1052 
1053   declare
1054     DBFUS_MULT_BLOCK_SIZE_STR CONSTANT VARCHAR2(1000) :=
1055       'select count(*), NULL, NULL from v$system_parameter where ' ||
1056         'name like ''db_%_cache_size'' and value != ''0''';
1057 
1058   begin
1059     dbms_feature_usage.register_db_feature
1060      ('Multiple Block Sizes',
1061       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1062       NULL,
1063       dbms_feature_usage.DBU_DETECT_BY_SQL,
1064       DBFUS_MULT_BLOCK_SIZE_STR,
1065       'Multiple Block Sizes are being used with this database.');
1066   end;
1067 
1068   /*****************************
1069    * OLAP - Analytic Workspaces
1070    *****************************/
1071 
1072   declare
1073     DBFUS_OLAP_AW_STR CONSTANT VARCHAR2(1000) :=
1074       'select count(*), count(*), NULL from dba_aws where AW_NUMBER >= 1000' ||
1075         'and owner not in (''DM'',''OLAPTRAIN'',''GLOBAL'',''HR'',''OE'','||
1076         '''PM'',''SH'',''IX'',''BI'',''SCOTT'')';
1077 
1078   begin
1079     dbms_feature_usage.register_db_feature
1080      ('OLAP - Analytic Workspaces',
1081       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1082       NULL,
1083       dbms_feature_usage.DBU_DETECT_BY_SQL,
1084       DBFUS_OLAP_AW_STR,
1085       'OLAP - the analytic workspaces stored in the database.');
1086   end;
1087 
1088   /*****************************
1089    * OLAP - Cubes
1090    *****************************/
1091 
1092   declare
1093     DBFUS_OLAP_CUBE_STR CONSTANT VARCHAR2(1000) :=
1097 
1094       'select count(*), count(*), NULL from DBA_OLAP2_CUBES ' ||
1095         'where invalid != ''Y'' and OWNER = ''SYS'' ' ||
1096         'and CUBE_NAME = ''STKPRICE_TBL''';
1098   begin
1099     dbms_feature_usage.register_db_feature
1100      ('OLAP - Cubes',
1101       dbms_feature_usage.DBU_INST_OBJECT,
1102       'PUBLIC.DBA_OLAP2_CUBES',
1103       dbms_feature_usage.DBU_DETECT_BY_SQL,
1104       DBFUS_OLAP_CUBE_STR,
1105       'OLAP - number of cubes in the OLAP catalog that are fully ' ||
1106       'mapped and accessible by the OLAP API.');
1107   end;
1108 
1109   /***********************
1110    * Oracle Managed Files
1111    ***********************/
1112 
1113   declare
1114     DBFUS_OMF_STR CONSTANT VARCHAR2(1000) :=
1115       'select count(*), NULL, NULL from dba_data_files where ' ||
1116         'upper(file_name) like ''%O1_MF%''';
1117 
1118   begin
1119     dbms_feature_usage.register_db_feature
1120      ('Oracle Managed Files',
1121       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1122       NULL,
1123       dbms_feature_usage.DBU_DETECT_BY_SQL,
1124       DBFUS_OMF_STR,
1125       'Database files are being managed by Oracle.');
1126   end;
1127 
1128   /***********************
1129    * Oracle Secure Backup
1130    ***********************/
1131 
1132   /* This query returns the number of backup pieces created with
1133    * Oracle Secure Backup whose status is 'available'. */
1134 
1135   declare
1136     DBFUS_OSB_STR CONSTANT VARCHAR2(1000) :=
1137       'select count(*), NULL, NULL from x$kccbp where ' ||
1138       'bitand(bpext, 256) = 256 and '                   ||
1139       'bitand(bpflg,1+4096+8192) = 0';
1140 
1141   begin
1142     dbms_feature_usage.register_db_feature
1143      ('Oracle Secure Backup',
1144       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1145       NULL,
1146       dbms_feature_usage.DBU_DETECT_BY_SQL,
1147       DBFUS_OSB_STR,
1148       'Oracle Secure Backup is used for backups to tertiary storage.');
1149   end;
1150 
1151   /*******************************
1152    * Parallel SQL DDL Execution
1153    *******************************/
1154 
1155   declare
1156     DBFUS_PSQL_DDL_STR CONSTANT VARCHAR2(1000) :=
1157       'select value, NULL, NULL from v$pq_sysstat ' ||
1158         'where rtrim(statistic,'' '') = ''DDL Initiated''';
1159 
1160   begin
1161     dbms_feature_usage.register_db_feature
1162      ('Parallel SQL DDL Execution',
1163       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1164       NULL,
1165       dbms_feature_usage.DBU_DETECT_BY_SQL,
1166       DBFUS_PSQL_DDL_STR,
1167       'Parallel SQL DDL Execution is being used.');
1168   end;
1169 
1170   /*******************************
1171    * Parallel SQL DML Execution
1172    *******************************/
1173 
1174   declare
1175     DBFUS_PSQL_DML_STR CONSTANT VARCHAR2(1000) :=
1176       'select value, NULL, NULL from v$pq_sysstat ' ||
1177         'where rtrim(statistic,'' '') = ''DML Initiated''';
1178 
1179   begin
1180     dbms_feature_usage.register_db_feature
1181      ('Parallel SQL DML Execution',
1182       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1183       NULL,
1184       dbms_feature_usage.DBU_DETECT_BY_SQL,
1185       DBFUS_PSQL_DML_STR,
1186       'Parallel SQL DML Execution is being used.');
1187   end;
1188 
1189   /****************************
1190    * Oracle Pluggable Database
1191    ****************************/
1192 
1193   begin
1194     dbms_feature_usage.register_db_feature
1195      ('Oracle Pluggable Databases',
1196       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1197       NULL,
1198       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1199       'DBMS_PDB_NUM',
1200       'Oracle Pluggable Databases is being used.');
1201   end;
1202 
1203   /*******************************
1204    * Parallel SQL Query Execution
1205    *******************************/
1206 
1207   declare
1208     DBFUS_PSQL_QUERY_STR CONSTANT VARCHAR2(1000) :=
1209       'select value, NULL, NULL from v$pq_sysstat ' ||
1210         'where rtrim(statistic,'' '') = ''Queries Initiated''';
1211 
1212   begin
1213     dbms_feature_usage.register_db_feature
1214      ('Parallel SQL Query Execution',
1215       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1216       NULL,
1217       dbms_feature_usage.DBU_DETECT_BY_SQL,
1218       DBFUS_PSQL_QUERY_STR,
1219       'Parallel SQL Query Execution is being used.');
1220   end;
1221 
1222   /************************
1223    * Partitioning (system)
1224    ************************/
1225 
1226   declare
1227     DBFUS_PARTN_SYS_PROC CONSTANT VARCHAR2(1000) :=
1228       'DBMS_FEATURE_PARTITION_SYSTEM';
1229 
1230   begin
1231     dbms_feature_usage.register_db_feature
1232      ('Partitioning (system)',
1233       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1234       NULL,
1235       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1236       DBFUS_PARTN_SYS_PROC,
1237       'Oracle Partitioning option is being used - there is at ' ||
1238       'least one partitioned object created.');
1239   end;
1240 
1241   /**********************
1242    * Partitioning (user)
1246     DBFUS_PARTN_USER_PROC CONSTANT VARCHAR2(1000) :=
1243    **********************/
1244 
1245   declare
1247       'DBMS_FEATURE_PARTITION_USER';
1248 
1249   begin
1250     dbms_feature_usage.register_db_feature
1251      ('Partitioning (user)',
1252       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1253       NULL,
1254       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1255       DBFUS_PARTN_USER_PROC,
1256       'Oracle Partitioning option is being used - there is at ' ||
1257       'least one user partitioned object created.');
1258   end;
1259 
1260   /**********************
1261    * Zone Maps
1262    **********************/
1263 
1264   declare
1265     DBFUS_ZMAP_USER_PROC CONSTANT VARCHAR2(1000) := 'DBMS_FEATURE_ZMAP';
1266   begin
1267     dbms_feature_usage.register_db_feature
1268       ('Zone maps',
1269        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1270        NULL,
1271        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1272        DBFUS_ZMAP_USER_PROC,
1273        'Zone maps');
1274   end;
1275 
1276 
1277   /****************************
1278    * Oracle Text
1279    ****************************/
1280 
1281   declare
1282     DBFUS_TEXT_PROC CONSTANT VARCHAR2(1000) := 'ctxsys.drifeat.dr$feature_track';
1283 
1284   begin
1285     dbms_feature_usage.register_db_feature
1286      ('Oracle Text',
1287       dbms_feature_usage.DBU_INST_OBJECT,
1288       'ctxsys.drifeat',
1289       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1290       DBFUS_TEXT_PROC,
1291       'Oracle Text is being used - there is at least one oracle '||
1292       'text index');
1293   end;
1294 
1295   /****************************
1296    * PL/SQL Native Compilation
1297    ****************************/
1298 
1299   declare
1300     DBFUS_PLSQL_NATIVE_PROC CONSTANT VARCHAR2(1000) :=
1301       'DBMS_FEATURE_PLSQL_NATIVE';
1302 
1303   begin
1304     dbms_feature_usage.register_db_feature
1305      ('PL/SQL Native Compilation',
1306       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1307       NULL,
1308       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1309       DBFUS_PLSQL_NATIVE_PROC,
1310       'PL/SQL Native Compilation is being used - there is at least one ' ||
1311       'natively compiled PL/SQL library unit in the database.');
1312   end;
1313 
1314   /********************************
1315    * Quality of Service Management
1316    ********************************/
1317 
1318   declare
1319     DBFUS_QOSM_PROC CONSTANT VARCHAR2(1000) := 'DBMS_FEATURE_QOSM';
1320 
1321   begin
1322     dbms_feature_usage.register_db_feature
1323      ('Quality of Service Management',
1324       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1325       NULL,
1326       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1327       DBFUS_QOSM_PROC,
1328       'Quality of Service Management has been used.');
1329   end;
1330 
1331   /********************************
1332    * RAC One Node
1333    ********************************/
1334 
1335   declare
1336     DBFUS_ROND_PROC CONSTANT VARCHAR2(1000) := 'DBMS_FEATURE_ROND';
1337 
1338   begin
1339     dbms_feature_usage.register_db_feature
1340      ('Real Application Cluster One Node',
1341       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1342       NULL,
1343       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1344       DBFUS_ROND_PROC,
1345       'Real Application Cluster One Node is being used.');
1346   end;
1347 
1348   /****************************
1349    * Real Application Clusters
1350    ****************************/
1351 
1352   declare
1353     DBFUS_RAC_PROC CONSTANT VARCHAR2(1000) := 'DBMS_FEATURE_RAC';
1354 
1355   begin
1356     dbms_feature_usage.register_db_feature
1357      ('Real Application Clusters (RAC)',
1358       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1359       NULL,
1360       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1361       DBFUS_RAC_PROC,
1362       'Real Application Clusters (RAC) is configured.');
1363   end;
1364 
1365   /**********************
1366    * Recovery Area
1367    **********************/
1368 
1369   declare
1370     DBFUS_RECOVERY_AREA_STR CONSTANT VARCHAR2(1000) :=
1371       'select p, s, NULL from ' ||
1372         '(select count(*) p from v$parameter ' ||
1373          'where name = ''db_recovery_file_dest'' and value is not null), ' ||
1374         '(select to_number(value) s from v$parameter ' ||
1375          'where name = ''db_recovery_file_dest_size'')';
1376 
1377   begin
1378     dbms_feature_usage.register_db_feature
1379      ('Recovery Area',
1380       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1381       NULL,
1382       dbms_feature_usage.DBU_DETECT_BY_SQL,
1383       DBFUS_RECOVERY_AREA_STR,
1384       'The recovery area is configured.');
1385   end;
1386 
1387   /**************************
1388    * Recovery Manager (RMAN)
1389    **************************/
1390 
1391   begin
1392     dbms_feature_usage.register_db_feature
1393      ('Recovery Manager (RMAN)',
1394       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1395       NULL,
1396       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1397       'DBMS_FEATURE_RMAN_BACKUP',
1401   /**********************
1398       'Recovery Manager (RMAN) is being used to backup the database.');
1399   end;
1400 
1402    * RMAN - Disk Backup
1403    **********************/
1404 
1405   begin
1406     dbms_feature_usage.register_db_feature
1407      ('RMAN - Disk Backup',
1408       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1409       NULL,
1410       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1411       'DBMS_FEATURE_RMAN_DISK_BACKUP',
1412       'Recovery Manager (RMAN) is being used to backup the database to disk.');
1413   end;
1414 
1415   /**********************
1416    * RMAN - Tape Backup
1417    **********************/
1418 
1419   begin
1420     dbms_feature_usage.register_db_feature
1421      ('RMAN - Tape Backup',
1422       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1423       NULL,
1424       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1425       'DBMS_FEATURE_RMAN_TAPE_BACKUP',
1426       'Recovery Manager (RMAN) is being used to backup the database to tape.');
1427   end;
1428 
1429   /**********************************
1430    * RMAN - ZLIB compressed backups
1431    **********************************/
1432   begin
1433 
1434     dbms_feature_usage.register_db_feature
1435      ('Backup ZLIB Compression',
1436       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1437       NULL,
1438       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1439       'DBMS_FEATURE_RMAN_ZLIB',
1440       'ZLIB compressed backups are being used.');
1441   end;
1442 
1443   /**********************************
1444    * RMAN - BZIP2 compressed backups
1445    **********************************/
1446   begin
1447 
1448     dbms_feature_usage.register_db_feature
1449      ('Backup BZIP2 Compression',
1450       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1451       NULL,
1452       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1453       'DBMS_FEATURE_RMAN_BZIP2',
1454       'BZIP2 compressed backups are being used.');
1455   end;
1456 
1457   /**********************************
1458    * RMAN - BASIC compressed backups
1459    **********************************/
1460   begin
1461 
1462     dbms_feature_usage.register_db_feature
1463      ('Backup BASIC Compression',
1464       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1465       NULL,
1466       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1467       'DBMS_FEATURE_RMAN_BASIC',
1468       'BASIC compressed backups are being used.');
1469   end;
1470 
1471   /**********************************
1472    * RMAN - LOW compressed backups
1473    **********************************/
1474   begin
1475 
1476     dbms_feature_usage.register_db_feature
1477      ('Backup LOW Compression',
1478       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1479       NULL,
1480       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1481       'DBMS_FEATURE_RMAN_LOW',
1482       'LOW compressed backups are being used.');
1483   end;
1484 
1485   /**********************************
1486    * RMAN - MEDIUM compressed backups
1487    **********************************/
1488   begin
1489 
1490     dbms_feature_usage.register_db_feature
1491      ('Backup MEDIUM Compression',
1492       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1493       NULL,
1494       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1495       'DBMS_FEATURE_RMAN_MEDIUM',
1496       'MEDIUM compressed backups are being used.');
1497   end;
1498 
1499   /**********************************
1500    * RMAN - HIGH compressed backups
1501    **********************************/
1502   begin
1503 
1504     dbms_feature_usage.register_db_feature
1505      ('Backup HIGH Compression',
1506       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1507       NULL,
1508       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1509       'DBMS_FEATURE_RMAN_HIGH',
1510       'HIGH compressed backups are being used.');
1511   end;
1512 
1513   /****************************
1514   * Long-term archival backups
1515   *****************************/
1516 
1517   declare
1518   DBFUS_KEEP_BACKUP_STR CONSTANT VARCHAR2(1000) :=
1519     'select count(*), NULL, decode(min(keep_options), ''BACKUP_LOGS'',
1520     ''Consistent backups archived'') from v$backup_set where keep = ''YES''';
1521 
1522   begin
1523     dbms_feature_usage.register_db_feature
1524      ('Long-term Archival Backup',
1525       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1526       NULL,
1527       dbms_feature_usage.DBU_DETECT_BY_SQL,
1528       DBFUS_KEEP_BACKUP_STR,
1529       'Long-term archival backups are being used.');
1530   end;
1531 
1532   /****************************
1533   * Multi section backups
1534   *****************************/
1535 
1536   declare
1537   DBFUS_MULTI_SECTION_BACKUP_STR CONSTANT VARCHAR2(1000) :=
1538     'select count(*), NULL, NULL ' ||
1539     'from v$backup_set where multi_section = ''YES''';
1540 
1541   begin
1542     dbms_feature_usage.register_db_feature
1543      ('Multi Section Backup',
1544       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1545       NULL,
1546       dbms_feature_usage.DBU_DETECT_BY_SQL,
1547       DBFUS_MULTI_SECTION_BACKUP_STR,
1548       'Multi section backups are being used.');
1549   end;
1550 
1551   /***********************
1555   declare
1552    * Block Media Recovery
1553    ***********************/
1554 
1556     DBFUS_BLOCK_MEDIA_RCV_STR CONSTANT VARCHAR2(1000) :=
1557       'select p, NULL, NULL from ' ||
1558         '(select count(*) p from v$rman_status' ||
1559         '  where operation like ''BLOCK MEDIA RECOVERY%'')';
1560   begin
1561     dbms_feature_usage.register_db_feature
1562      ('Block Media Recovery',
1563       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1564       NULL,
1565       dbms_feature_usage.DBU_DETECT_BY_SQL,
1566       DBFUS_BLOCK_MEDIA_RCV_STR,
1567       'Block Media Recovery is being used to repair the database.');
1568   end;
1569 
1570 
1571   /***********************
1572    * Restore Point
1573    ***********************/
1574 
1575   declare
1576     DBFUS_RESTORE_POINT_STR CONSTANT VARCHAR2(1000) :=
1577       'select p, NULL, NULL from ' ||
1578         '(select count(*) p from v$restore_point)';
1579   begin
1580     dbms_feature_usage.register_db_feature
1581      ('Restore Point',
1582       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1583       NULL,
1584       dbms_feature_usage.DBU_DETECT_BY_SQL,
1585       DBFUS_RESTORE_POINT_STR,
1586       'Restore Points are being used as targets for Flashback');
1587   end;
1588 
1589   /***********************
1590    * Logfile Multiplexing
1591    ***********************/
1592 
1593   declare
1594     DBFUS_LOGFILE_MULTIPLEX_STR CONSTANT VARCHAR2(1000) :=
1595       'select p, NULL, NULL from ' ||
1596         '(select count(*) p from ' ||
1597         '  (select count(*) a from v$logfile group by group#)' ||
1598         '  where a>1)';
1599   begin
1600     dbms_feature_usage.register_db_feature
1601      ('Logfile Multiplexing',
1602       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1603       NULL,
1604       dbms_feature_usage.DBU_DETECT_BY_SQL,
1605       DBFUS_LOGFILE_MULTIPLEX_STR,
1606       'Multiple members are used in a single log file group');
1607   end;
1608 
1609 
1610   /***********************
1611    * Bigfile Tablespace
1612    ***********************/
1613 
1614   declare
1615     DBFUS_BIGFILE_TBS_STR CONSTANT VARCHAR2(1000) :=
1616       'select p, NULL, NULL from ' ||
1617         '(select count(*) p from v$tablespace' ||
1618         '  where bigfile = ''YES'')';
1619   begin
1620     dbms_feature_usage.register_db_feature
1621      ('Bigfile Tablespace',
1622       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1623       NULL,
1624       dbms_feature_usage.DBU_DETECT_BY_SQL,
1625       DBFUS_BIGFILE_TBS_STR,
1626       'Bigfile tablespace is being used');
1627   end;
1628 
1629 
1630   /**************************
1631    * Transportable Tablespace
1632    **************************/
1633 
1634   declare
1635     DBFUS_TRANSPORTABLE_TBS_STR CONSTANT VARCHAR2(1000) :=
1636       'select p, NULL, NULL from ' ||
1637         '(select count(*) p from v$datafile' ||
1638         '  where plugged_in = 1)';
1639   begin
1640     dbms_feature_usage.register_db_feature
1641      ('Transportable Tablespace',
1642       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1643       NULL,
1644       dbms_feature_usage.DBU_DETECT_BY_SQL,
1645       DBFUS_TRANSPORTABLE_TBS_STR,
1646       'Transportable tablespace is being used');
1647   end;
1648 
1649 
1650   /***********************
1651    * Read Only Tablespace
1652    ***********************/
1653 
1654   declare
1655     DBFUS_READONLY_TBS_STR CONSTANT VARCHAR2(1000) :=
1656       'select p, NULL, NULL from ' ||
1657         '(select count(*) p from v$datafile' ||
1658         '  where enabled = ''READ ONLY'')';
1659   begin
1660     dbms_feature_usage.register_db_feature
1661      ('Read Only Tablespace',
1662       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1663       NULL,
1664       dbms_feature_usage.DBU_DETECT_BY_SQL,
1665       DBFUS_READONLY_TBS_STR,
1666       'Read only tablespace is being used');
1667   end;
1668 
1669   /*************************
1670    * Read Only Open Delayed
1671    *************************/
1672 
1673   declare
1674     DBFUS_READOPEN_DELAY_STR CONSTANT VARCHAR2(1000) :=
1675       'select p, NULL, NULL from ' ||
1676         '(select count(*) p from v$parameter' ||
1677         '  where name = ''read_only_open_delayed'' and value = ''TRUE'')';
1678   begin
1679     dbms_feature_usage.register_db_feature
1680      ('Deferred Open Read Only',
1681       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1682       NULL,
1683       dbms_feature_usage.DBU_DETECT_BY_SQL,
1684       DBFUS_READOPEN_DELAY_STR,
1685       'Deferred open read only feature is enabled');
1686   end;
1687 
1688 
1689   /**********************
1690    * Active Data Guard
1691    **********************/
1692 
1693   begin
1694     dbms_feature_usage.register_db_feature
1695      ('Active Data Guard - Real-Time Query on Physical Standby',
1696       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1697       NULL,
1698       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1699       'DBMS_FEATURE_ACTIVE_DATA_GUARD',
1700       'Active Data Guard, a set of services, is being used to enhance ' ||
1701       'Data Guard');
1702   end;
1703 
1704 
1705   /**********************
1706    * Online Move Datafile
1707    **********************/
1711      ('Online Move Datafile',
1708 
1709   begin
1710     dbms_feature_usage.register_db_feature
1712       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1713       NULL,
1714       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1715       'DBMS_FEATURE_MOVE_DATAFILE',
1716       'Online Move Datafile is being used to move datafiles');
1717   end;
1718 
1719 
1720   /*********************
1721    * Backup Rollforward
1722    *********************/
1723 
1724   declare
1725     DBFUS_BACKUP_ROLLFORWARD_STR CONSTANT VARCHAR2(1000) :=
1726       'select p, NULL, NULL from ' ||
1727         '(select count(*) p from v$rman_status' ||
1728         '  where operation like ''BACKUP COPYROLLFORWARD%'')';
1729   begin
1730     dbms_feature_usage.register_db_feature
1731      ('Backup Rollforward',
1732       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1733       NULL,
1734       dbms_feature_usage.DBU_DETECT_BY_SQL,
1735       DBFUS_BACKUP_ROLLFORWARD_STR,
1736       'Backup Rollforward strategy is being used to backup the database.');
1737   end;
1738 
1739   /************************
1740    * Data Recovery Advisor
1741    ************************/
1742 
1743   declare
1744     DBFUS_DATA_RCV_ADVISOR_STR CONSTANT VARCHAR2(1000) :=
1745       'select p, NULL, NULL from ' ||
1746         '(select count(*) p from v$ir_repair' ||
1747         '  where rownum = 1)';
1748   begin
1749     dbms_feature_usage.register_db_feature
1750      ('Data Recovery Advisor',
1751       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1752       NULL,
1753       dbms_feature_usage.DBU_DETECT_BY_SQL,
1754       DBFUS_DATA_RCV_ADVISOR_STR,
1755       'Data Recovery Advisor (DRA) is being used to repair the database.');
1756   end;
1757 
1758   /***********************
1759    * Backup and Restore of plugged database
1760    ***********************/
1761 
1762   declare
1763     DBFUS_BR_PLUGGED_DB_STR CONSTANT VARCHAR2(1000) :=
1764       'select p, NULL, NULL from ' ||
1765         '(select count(*) p from v$rman_status' ||
1766         '  where operation like ''%PLUGGABLE DATABASE%'')';
1767   begin
1768     dbms_feature_usage.register_db_feature
1769      ('Backup and Restore of plugged database',
1770       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1771       NULL,
1772       dbms_feature_usage.DBU_DETECT_BY_SQL,
1773       DBFUS_BR_PLUGGED_DB_STR,
1774       'Backup and Restore of plugged database by RMAN is used.');
1775   end;
1776 
1777   /*********************
1778    * Recover Table, additional space after TABLE is intentional.
1779    *********************/
1780 
1781   declare
1782     DBFUS_RECOVER_TABLE_STR CONSTANT VARCHAR2(1000) :=
1783       'select p, NULL, NULL from ' ||
1784         '(select count(*) p from v$rman_status' ||
1785         '  where operation like ''RECOVER TABLE %'')';
1786   begin
1787     dbms_feature_usage.register_db_feature
1788      ('Recover Table',
1789       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1790       NULL,
1791       dbms_feature_usage.DBU_DETECT_BY_SQL,
1792       DBFUS_RECOVER_TABLE_STR,
1793       'Recover Table is used to recover a table in the database.');
1794   end;
1795 
1796   /*********************
1797    * Recover Until Snapshot
1798    *********************/
1799 
1800   declare
1801     DBFUS_RECOVER_STR CONSTANT VARCHAR2(1000) :=
1802       'select p, NULL, NULL from ' ||
1803         '(select count(*) p from v$rman_status' ||
1804         '  where operation like ''RECOVER UNTIL SNAPSHOT%'')';
1805   begin
1806     dbms_feature_usage.register_db_feature
1807      ('Recover Until Snapshot',
1808       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1809       NULL,
1810       dbms_feature_usage.DBU_DETECT_BY_SQL,
1811       DBFUS_RECOVER_STR,
1812       'Recover until snapshot is used to recover the database.');
1813   end;
1814 
1815   /*********************
1816    * TRANSPORT TABLESPACE command
1817    *********************/
1818 
1819   declare
1820     DBFUS_TRANSPORT_TBS_STR CONSTANT VARCHAR2(1000) :=
1821       'select p, NULL, NULL from ' ||
1822         '(select count(*) p from v$rman_status' ||
1823         '  where operation like ''TRANSPORT TABLESPACE%'')';
1824   begin
1825     dbms_feature_usage.register_db_feature
1826      ('TRANSPORT TABLESPACE command',
1827       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1828       NULL,
1829       dbms_feature_usage.DBU_DETECT_BY_SQL,
1830       DBFUS_TRANSPORT_TBS_STR,
1831       'RMAN''s TRANSPORT TABLESPACE command used by the database.');
1832   end;
1833 
1834   /*********************
1835    * CONVERT command
1836    *********************/
1837 
1838   declare
1839     DBFUS_CONVERT_STR CONSTANT VARCHAR2(1000) :=
1840       'select p, NULL, NULL from ' ||
1841         '(select count(*) p from v$rman_status' ||
1842         '  where operation like ''CONVERT%'')';
1843   begin
1844     dbms_feature_usage.register_db_feature
1845      ('CONVERT command',
1846       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1847       NULL,
1848       dbms_feature_usage.DBU_DETECT_BY_SQL,
1849       DBFUS_CONVERT_STR,
1850       'RMAN''s CONVERT command used by the database.');
1851   end;
1852 
1853   /*********************
1854    * Cross Platform Backup and Restore
1858     DBFUS_CROSS_PLATFORM_STR CONSTANT VARCHAR2(1000) :=
1855    *********************/
1856 
1857   declare
1859       'select p, NULL, NULL from ' ||
1860         '(select count(*) p from v$rman_status' ||
1861         '  where operation in '||
1862         '     (''RECOVER FROM PLATFORM'', ''BACKUP FOR TRANSPORT'', '||
1863         '      ''BACKUP FROM PLATFORM'', ''RESTORE FROM PLATFORM''))';
1864   begin
1865     dbms_feature_usage.register_db_feature
1866      ('Cross-Platform Backups',
1867       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1868       NULL,
1869       dbms_feature_usage.DBU_DETECT_BY_SQL,
1870       DBFUS_CROSS_PLATFORM_STR,
1871       'Cross-Platform Backup and Restore used by the database.');
1872   end;
1873 
1874   /*********************
1875    * Duplicate from Active Database using BackupSet
1876    *********************/
1877 
1878   declare
1879     DBFUS_DUPDB_USINGBCK_STR CONSTANT VARCHAR2(1000) :=
1880       'select p, NULL, NULL from ' ||
1881         '(select count(*) p from v$rman_status' ||
1882         '  where operation like ''DUPLICATE DB FROM ACTIVE USING B%'')';
1883   begin
1884     dbms_feature_usage.register_db_feature
1885      ('Duplicate Db from Active Db using BackupSet',
1886       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1887       NULL,
1888       dbms_feature_usage.DBU_DETECT_BY_SQL,
1889       DBFUS_DUPDB_USINGBCK_STR,
1890       'Duplicate from Active Database using BackupSet is used.');
1891   end;
1892 
1893   /**********************
1894    * Resource Manager
1895    **********************/
1896 
1897   begin
1898     dbms_feature_usage.register_db_feature
1899      ('Resource Manager',
1900       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1901       NULL,
1902       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
1903       'DBMS_FEATURE_RESOURCE_MANAGER',
1904       'Oracle Database Resource Manager is being used to manage ' ||
1905       'database resources.');
1906   end;
1907 
1908   /**********************
1909    * Instance Caging
1910    **********************/
1911 
1912   declare
1913     DBFUS_DATA_INSTANCE_CAGING_STR CONSTANT VARCHAR2(1000) :=
1914       'select count(*), NULL, NULL from v$rsrc_plan_history where ' ||
1915       'name != ''ORA$INTERNAL_CDB_PLAN'' and ' ||
1916       'name != ''INTERNAL_PLAN'' and name is not null and ' ||
1917       'instance_caging = ''ON'' and ' ||
1918       '(name != ''DEFAULT_MAINTENANCE_PLAN'' or ' ||
1919       '  (window_name is null or ' ||
1920       '   (window_name != ''MONDAY_WINDOW'' and ' ||
1921       '    window_name != ''TUESDAY_WINDOW'' and ' ||
1922       '    window_name != ''WEDNESDAY_WINDOW'' and ' ||
1923       '    window_name != ''THURSDAY_WINDOW'' and ' ||
1924       '    window_name != ''FRIDAY_WINDOW'' and ' ||
1925       '    window_name != ''SATURDAY_WINDOW'' and ' ||
1926       '    window_name != ''SUNDAY_WINDOW''))) ';
1927   begin
1928     dbms_feature_usage.register_db_feature
1929      ('Instance Caging',
1930       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1931       NULL,
1932       dbms_feature_usage.DBU_DETECT_BY_SQL,
1933       DBFUS_DATA_INSTANCE_CAGING_STR,
1934       'Instance Caging is being used to limit the CPU usage by the ' ||
1935       'database instance.');
1936   end;
1937 
1938   /**********************
1939    * dNFS
1940    **********************/
1941 
1942   declare
1943     DBFUS_DATA_DNFS_STR CONSTANT VARCHAR2(1000) :=
1944       'select count(*), NULL, NULL from v$dnfs_servers';
1945   begin
1946     dbms_feature_usage.register_db_feature
1947      ('Direct NFS',
1948       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1949       NULL,
1950       dbms_feature_usage.DBU_DETECT_BY_SQL,
1951       DBFUS_DATA_DNFS_STR,
1952       'Direct NFS is being used to connect to an NFS server');
1953   end;
1954 
1955   /***********************
1956    * Server Flash Cache
1957    ***********************/
1958 
1959   declare
1960     DBFUS_SRV_FLASH_CACHE_SIZE_STR CONSTANT VARCHAR2(1000) :=
1961       'select count(*), NULL, NULL from v$system_parameter where ' ||
1962         'name like ''%flash_cache_size'' and value != ''0''';
1963 
1964   begin
1965     dbms_feature_usage.register_db_feature
1966      ('Server Flash Cache',
1967       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1968       NULL,
1969       dbms_feature_usage.DBU_DETECT_BY_SQL,
1970       DBFUS_SRV_FLASH_CACHE_SIZE_STR,
1971       'Server Flash Cache is being used with this database.');
1972   end;
1973 
1974   /************************
1975    * Server Parameter File
1976    ************************/
1977 
1978   declare
1979     DBFUS_SPFILE_STR CONSTANT VARCHAR2(1000) :=
1980       'select count(*), NULL, NULL from v$system_parameter where ' ||
1981         'name = ''spfile'' and value is not null';
1982 
1983   begin
1984     dbms_feature_usage.register_db_feature
1985      ('Server Parameter File',
1986       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
1987       NULL,
1988       dbms_feature_usage.DBU_DETECT_BY_SQL,
1989       DBFUS_SPFILE_STR,
1990       'The server parameter file (SPFILE) was used to startup the database.');
1991   end;
1992 
1993   /**********************
1994    * Shared Server
1995    **********************/
1996 
2000         'where name = ''shared_servers'' and value != ''0'' and ' ||
1997   declare
1998     DBFUS_MTS_STR CONSTANT VARCHAR2(1000) :=
1999       'select count(*), NULL, NULL from v$system_parameter ' ||
2001         'exists (select 1 from v$shared_server where requests > 0)';
2002 
2003   begin
2004     dbms_feature_usage.register_db_feature
2005      ('Shared Server',
2006       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2007       NULL,
2008       dbms_feature_usage.DBU_DETECT_BY_SQL,
2009       DBFUS_MTS_STR,
2010       'The database is configured as Shared Server, where one server ' ||
2011       'process can service multiple client programs.');
2012   end;
2013 
2014   /**********************************************
2015    * Database Resident Connection Pooling  (DRCP)
2016    **********************************************/
2017 
2018   declare
2019     DBFUS_DRCP_STR CONSTANT VARCHAR2(1000) :=
2020       'select count(maxsize), nvl(sum(maxsize),0), NULL from dba_cpool_info '||
2021       'where status=''ACTIVE''';
2022 
2023   begin
2024     dbms_feature_usage.register_db_feature
2025      ('Database Resident Connection Pooling (DRCP)',
2026       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2027       NULL,
2028       dbms_feature_usage.DBU_DETECT_BY_SQL,
2029       DBFUS_DRCP_STR,
2030       'Active Database Resident Connection Pool has been detected');
2031   end;
2032 
2033   /**********************
2034    * Spatial
2035      If Spatial is installed then the second query returns 1;
2036      else it returns 0. So use that to multiply the metadata count
2037      to get only the Spatial install usage and not the Locator install
2038      usage.
2039    **********************/
2040 
2041   declare
2042     DBFUS_SPATIAL_STR CONSTANT VARCHAR2(1000) :=
2043      'select atc*ix, atc*ix, NULL from ' ||
2044        '(select count(*) atc ' ||
2045          'from mdsys.sdo_feature_usage '||
2046          'where used = ''Y'' and ' ||
2047          'feature_name in (''3D_FUNCTIONS'', ''AGGREGATES'', ''CSW'', ' ||
2048          ' ''GEOCODER'', ''GEORASTER'', ''LRS'', ''NDM'', ''OPEN_LS'', ' ||
2049          ' ''POINTCLOUD'', ''RELATE'', ''ROUTER'', ''SAM'', ''TIN'', ' ||
2050          ' ''TOPOLOGY'', ''UNION_INTERSECTION'', ''WFS'')), ' ||
2051        '(select count(*) ix ' ||
2052           'from  dba_registry where comp_id = ''SDO'')';
2053 
2054   begin
2055     dbms_feature_usage.register_db_feature
2056      ('Spatial',
2057       dbms_feature_usage.DBU_INST_OBJECT,
2058       'MDSYS.all_sdo_index_metadata',
2059       dbms_feature_usage.DBU_DETECT_BY_SQL,
2060       DBFUS_SPATIAL_STR,
2061       'There is at least one usage of the Oracle Spatial feature usage table.');
2062   end;
2063 
2064   /**********************
2065    * Locator
2066      If Locator is installed then the second query returns 1;
2067      else it returns 0. So use that to multiply the metadata count
2068      to get only the Locator install usage and not the Spatial install
2069      usage.
2070    **********************/
2071 
2072   declare
2073     DBFUS_LOCATOR_STR CONSTANT VARCHAR2(1000) :=
2074      'select atc*six, atc*six, NULL from ' ||
2075        '(select count(*) atc ' ||
2076          'from mdsys.sdo_feature_usage '||
2077          'where used = ''Y'' and ' ||
2078          'feature_name not in (''3D_FUNCTIONS'', ''AGGREGATES'', ''CSW'', ' ||
2079          ' ''GEOCODER'', ''GEORASTER'', ''LRS'', ''NDM'', ''OPEN_LS'', ' ||
2080          ' ''POINTCLOUD'', ''RELATE'', ''ROUTER'', ''SAM'', ''TIN'', ' ||
2081          ' ''TOPOLOGY'', ''UNION_INTERSECTION'', ''WFS'')), ' ||
2082      ' ( select decode(sx-ix, -1, 0, 0, 0, 1) six from ( ' ||
2083      ' select count(*) sx from  dba_registry where comp_id = ''ORDIM''), '||
2084      ' ( select count(*) ix from  dba_registry where comp_id = ''SDO'')) ';
2085 
2086   begin
2087     dbms_feature_usage.register_db_feature
2088      ('Locator',
2089       dbms_feature_usage.DBU_INST_OBJECT,
2090       'MDSYS.sdo_geom_metadata_table',
2091       dbms_feature_usage.DBU_DETECT_BY_SQL,
2092       DBFUS_LOCATOR_STR,
2093       'There is at least one usage of the Oracle Locator feature usage table.');
2094   end;
2095 
2096 
2097   /***********************************************************************
2098    * All advisors using the advisor framework. This includes all advisors
2099    * listed in DBA_ADVISOR_DEFINITIONS and DBA_ADVISOR_USAGE views.
2100    ************************************************************************/
2101   /* FIXME: Mike would like to use a pl/sql procedure instead of a query */
2102   declare
2103       dbu_detect_sql VARCHAR2(32767);
2104   begin
2105       FOR adv_rec IN (SELECT advisor_name, advisor_id
2106                       FROM dba_advisor_definitions
2107                       WHERE bitand(property, 64) != 64
2108                       ORDER BY advisor_id)
2109       LOOP
2110         -- build the query that will be executed to track an advisor usage
2111 
2112         -- clob column FEATURE_INFO will contain XML for advisor framework-
2113         -- level info, with advisor extra info sitting beneath the framework
2114         -- tag
2115         IF (adv_rec.advisor_name = 'ADDM') THEN
2116           dbu_detect_sql := ', xmltype(prvt_hdm.db_feature_clob) ';
2117         ELSE
2118           dbu_detect_sql := '';
2122           ' xmlelement("advisor_usage",
2119         END IF;
2120 
2121         dbu_detect_sql :=
2123               xmlelement("reports",
2124                 xmlelement("first_report_time",
2125                             to_char(first_report_time,
2126                                     ''dd-mon-yyyy hh24:mi:ss'')),
2127                 xmlelement("last_report_time",
2128                            to_char(last_report_time,
2129                                    ''dd-mon-yyyy hh24:mi:ss'')),
2130                 xmlelement("num_db_reports", num_db_reports))
2131                 ' || dbu_detect_sql || ').getClobVal(2,2) ';
2132 
2133         -- used:       1 if advisor executed since last sample
2134         -- sofar_exec: total # of executions since db create
2135         -- dbf_clob:   reporting, plus advisor-specific stuff
2136         dbu_detect_sql :=
2137           'SELECT used, sofar_exec, dbf_clob FROM
2138              (SELECT num_execs sofar_exec, ' || dbu_detect_sql || ' dbf_clob
2139               FROM   dba_advisor_usage u
2140               WHERE  u.advisor_name = ''' || adv_rec.advisor_name || '''), ' ||
2141             '(SELECT count(*) used
2142               FROM   dba_advisor_usage u
2143               WHERE u.advisor_name = ''' || adv_rec.advisor_name || ''' AND
2144                     (u.num_execs > 0 or u.num_db_reports > 0) and
2145                      greatest(nvl(u.last_exec_time, sysdate - 1000),
2146                               nvl(u.last_report_time, sysdate - 1000)) >=
2147                                        ' || DBFUS_LAST_SAMPLE_DATE_STR || ')';
2148 
2149         -- register the current advisor
2150         dbms_feature_usage.register_db_feature
2151           (adv_rec.advisor_name,
2152            dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2153            NULL,
2154            dbms_feature_usage.DBU_DETECT_BY_SQL,
2155            dbu_detect_sql,
2156            adv_rec.advisor_name || ' has been used.');
2157       END LOOP;
2158   end;
2159 
2160   /******************************
2161    * Real-Time SQL Monitoring
2162    ******************************/
2163   declare
2164       dbu_detect_sql VARCHAR2(32767);
2165   begin
2166       -- used:       1 if db report for monitoring details requested since
2167       --             last sample (list report is not tracked)
2168       -- sofar_exec: total # of db reports requested since db creation
2169       -- dbf_clob:   extra XML info
2170       dbu_detect_sql :=
2171         'SELECT used, sofar_exec, dbf_clob
2172          FROM   (SELECT count(*) used
2173                  FROM   dba_sql_monitor_usage
2174                  WHERE  num_db_reports > 0 AND
2175                         last_db_report_time >= ' || DBFUS_LAST_SAMPLE_DATE_STR
2176                 || '),
2177                 (SELECT num_db_reports sofar_exec,
2178                         xmlelement("sqlmon_usage",
2179                          xmlelement("num_em_reports", num_em_reports),
2180                          xmlelement("first_db_report_time",
2181                            to_char(first_db_report_time,
2182                                    ''dd-mon-yyyy hh24:mi:ss'')),
2183                          xmlelement("last_db_report_time",
2184                            to_char(last_db_report_time,
2185                                    ''dd-mon-yyyy hh24:mi:ss'')),
2186                          xmlelement("first_em_report_time",
2187                            to_char(first_em_report_time,
2188                                    ''dd-mon-yyyy hh24:mi:ss'')),
2189                          xmlelement("last_em_report_time",
2190                            to_char(last_em_report_time,
2191                                    ''dd-mon-yyyy hh24:mi:ss''))
2192                         ).getClobVal(2,2) dbf_clob
2193                 FROM dba_sql_monitor_usage)';
2194 
2195       -- register the feature
2196       dbms_feature_usage.register_db_feature
2197         ('Real-Time SQL Monitoring',
2198          dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2199          NULL,
2200          dbms_feature_usage.DBU_DETECT_BY_SQL,
2201          dbu_detect_sql,
2202          'Real-Time SQL Monitoring Usage.');
2203   end;
2204 
2205 
2206   /******************************
2207    * SQL Tuning Set
2208    ******************************/
2209   declare
2210     -- A 'user' SQL Tuning Set is one not owned by SYS, and a 'system' SQL
2211     -- Tuning Set is one that is owned by SYS.  This will cover the $$ STSes
2212     -- that Access Advisor creates, and users do not use EM as SYS, so it should
2213     -- be good enough for now.
2214     DBFUS_USER_SQL_TUNING_SET_STR CONSTANT VARCHAR2(1000) :=
2215       'select numss, numref, NULL from ' ||
2216         '(select count(*) numss ' ||
2217         ' from wri$_sqlset_definitions ' ||
2218         ' where owner <> ''SYS''), ' ||
2219         '(select count(*) numref ' ||
2220         ' from wri$_sqlset_references r, wri$_sqlset_definitions d ' ||
2221         ' where d.id = r.sqlset_id and d.owner <> ''SYS'')';
2222 
2223     DBFUS_SYS_SQL_TUNING_SET_STR CONSTANT VARCHAR2(1000) :=
2224       'select numss, numref, NULL from ' ||
2225         '(select count(*) numss ' ||
2226         ' from wri$_sqlset_definitions ' ||
2227         ' where owner = ''SYS''), ' ||
2228         '(select count(*) numref ' ||
2229         ' from wri$_sqlset_references r, wri$_sqlset_definitions d ' ||
2233      ('SQL Tuning Set (user)',
2230         ' where d.id = r.sqlset_id and d.owner = ''SYS'')';
2231   begin
2232     dbms_feature_usage.register_db_feature
2234       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2235       NULL,
2236       dbms_feature_usage.DBU_DETECT_BY_SQL,
2237       DBFUS_USER_SQL_TUNING_SET_STR,
2238       'A SQL Tuning Set has been created in the database in a user schema.');
2239 
2240 
2241     dbms_feature_usage.register_db_feature
2242      ('SQL Tuning Set (system)',
2243       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2244       NULL,
2245       dbms_feature_usage.DBU_DETECT_BY_SQL,
2246       DBFUS_SYS_SQL_TUNING_SET_STR,
2247       'A SQL Tuning Set has been created in the database in the SYS schema.');
2248   end;
2249 
2250   /******************************
2251    * Automatic SQL Tuning Advisor
2252    ******************************/
2253   declare
2254     DBFUS_AUTOSTA_PROC VARCHAR2(100) := 'DBMS_FEATURE_AUTOSTA';
2255   begin
2256     dbms_feature_usage.register_db_feature
2257      ('Automatic SQL Tuning Advisor',
2258       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2259       NULL,
2260       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2261       DBFUS_AUTOSTA_PROC,
2262       'Automatic SQL Tuning Advisor has been used.');
2263   end;
2264 
2265   /******************************
2266    * SQL Profiles
2267    ******************************/
2268   /* FIXME: Mike would like to use a pl/sql procedure instead of a query */
2269   declare
2270     DBFUS_SQLPROFILE_STR CONSTANT VARCHAR2(32767) :=
2271       q'#SELECT used,
2272                 prof_count,
2273                 profs || ', ' || manual || ', ' || auto || ', ' ||
2274                 enabl || ', ' || cat as details
2275          FROM (SELECT sum(decode(status, 'ENABLED', 1, 0)) used,
2276                       sum(1) prof_count,
2277                      'Total so far: ' || sum(1) profs,
2278                      'Enabled: ' || sum(decode(status, 'ENABLED', 1, 0)) enabl,
2279                      'Manual: ' || sum(decode(type, 'MANUAL', 1, 0)) manual,
2280                      'Auto: ' || sum(decode(type, 'AUTO', 1, 0)) auto,
2281                      'Category count: ' || count(unique category) cat
2282                FROM dba_sql_profiles)#';
2283   begin
2284     dbms_feature_usage.register_db_feature
2285      ('SQL Profile',
2286       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2287       NULL,
2288       dbms_feature_usage.DBU_DETECT_BY_SQL,
2289       DBFUS_SQLPROFILE_STR,
2290       'SQL profiles have been used.');
2291   end;
2292 
2293   /************************************************
2294    * Database Replay: Workload Capture and Replay *
2295    ************************************************/
2296   declare
2297     prev_sample_count     NUMBER;
2298     prev_sample_date      NUMBER;
2299 
2300     DBFUS_WCR_CAPTURE_PROC VARCHAR2(1000) := 'DBMS_FEATURE_WCR_CAPTURE';
2301     DBFUS_WCR_REPLAY_PROC  VARCHAR2(1000) := 'DBMS_FEATURE_WCR_REPLAY';
2302   begin
2303     dbms_feature_usage.register_db_feature
2304      ('Database Replay: Workload Capture',
2305       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2306       NULL,
2307       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2308       DBFUS_WCR_CAPTURE_PROC,
2309       'Database Replay: Workload was ever captured.');
2310 
2311     dbms_feature_usage.register_db_feature
2312      ('Database Replay: Workload Replay',
2313       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2314       NULL,
2315       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2316       DBFUS_WCR_REPLAY_PROC,
2317       'Database Replay: Workload was ever replayed.');
2318   end;
2319 
2320   /**********************
2321    * Streams (system)
2322    **********************/
2323 
2324   declare
2325     DBFUS_STREAMS_SYS_PROC CONSTANT VARCHAR2(1000) :=
2326        'dbms_feature_streams';
2327 
2328   begin
2329     dbms_feature_usage.register_db_feature
2330      ('Streams (system)',
2331       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2332       NULL,
2333       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2334       DBFUS_STREAMS_SYS_PROC,
2335       'Oracle Streams processes have been configured');
2336   end;
2337 
2338   /**********************
2339    * Streams (user)
2340    **********************/
2341 
2342   declare
2343     DBFUS_STREAMS_USER_STR CONSTANT VARCHAR2(1000) :=
2344     -- for AQ, there are default queues in the sys, system, ix,
2345     -- wmsys, sysman, and gsmdamin_internal
2346     -- schemas which we do not want to count towards Streams user feature usage
2347     -- for Streams messaging these consumers are in db by default
2348      'select decode(strmsg + aq, 0, 0, 1), 0, NULL from ' ||
2349      '(select decode(count(*), 0, 0, 1) strmsg ' ||
2350      '  from dba_streams_message_consumers ' ||
2351      '  where streams_name != ''SCHEDULER_COORDINATOR'' and ' ||
2352      '  streams_name != ''SCHEDULER_PICKUP''),' ||
2353      '(select decode (count(*), 0, 0, 1) aq ' ||
2354      '  from system.aq$_queue_tables where schema not in ' ||
2355      '  (''SYS'', ''SYSTEM'', ''IX'', ''WMSYS'', ''SYSMAN'', ' ||
2356      '''GSMADMIN_INTERNAL''))';
2357 
2358   begin
2359     dbms_feature_usage.register_db_feature
2360      ('Streams (user)',
2364       DBFUS_STREAMS_USER_STR,
2361       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2362       NULL,
2363       dbms_feature_usage.DBU_DETECT_BY_SQL,
2365       'Users have configured Oracle Streams AQ');
2366   end;
2367 
2368   /**********************
2369    * XStream In
2370    **********************/
2371 
2372   declare
2373     DBFUS_XSTREAM_IN_PROC CONSTANT VARCHAR2(1000) :=
2374        'dbms_feature_xstream_in';
2375 
2376   begin
2377     dbms_feature_usage.register_db_feature
2378      ('XStream In',
2379       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2380       NULL,
2381       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2382       DBFUS_XSTREAM_IN_PROC,
2383       'Oracle XStream Inbound servers have been configured');
2384   end;
2385 
2386   /**********************
2387    * XStream Out
2388    **********************/
2389 
2390   declare
2391     DBFUS_XSTREAM_OUT_PROC CONSTANT VARCHAR2(1000) :=
2392        'dbms_feature_xstream_out';
2393 
2394   begin
2395     dbms_feature_usage.register_db_feature
2396      ('XStream Out',
2397       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2398       NULL,
2399       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2400       DBFUS_XSTREAM_OUT_PROC,
2401       'Oracle XStream Outbound servers have been configured');
2402   end;
2403 
2404   /**********************
2405    * XStream Streams
2406    **********************/
2407 
2408   declare
2409     DBFUS_XSTREAM_STREAMS_PROC CONSTANT VARCHAR2(1000) :=
2410        'dbms_feature_xstream_streams';
2411 
2412   begin
2413     dbms_feature_usage.register_db_feature
2414      ('XStream Streams',
2415       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2416       NULL,
2417       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2418       DBFUS_XSTREAM_STREAMS_PROC,
2419       'Oracle Streams with XStream functionality has been configured');
2420   end;
2421 
2422   /**********************
2423    * GoldenGate
2424    **********************/
2425 
2426   declare
2427     DBFUS_GOLDENGATE_PROC CONSTANT VARCHAR2(1000) :=
2428     'dbms_feature_goldengate';
2429 
2430   begin
2431     dbms_feature_usage.register_db_feature
2432      ('GoldenGate',
2433       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2434       NULL,
2435       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2436       DBFUS_GOLDENGATE_PROC,
2437       'Oracle GoldenGate Capabilities are in use.');
2438   end;
2439 
2440   /**********************
2441    * Transparent Gateway
2442    **********************/
2443 
2444   declare
2445     DBFUS_GATEWAYS_STR CONSTANT VARCHAR2(1000) :=
2446       'select count(*), NULL, NULL from hs_fds_class_date ' ||
2447         'where fds_class_name != ''BITE''';
2448 
2449   begin
2450     dbms_feature_usage.register_db_feature
2451      ('Transparent Gateway',
2452       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2453       NULL,
2454       dbms_feature_usage.DBU_DETECT_BY_SQL,
2455       DBFUS_GATEWAYS_STR,
2456       'Heterogeneous Connectivity, access to a non-Oracle system, has ' ||
2457       'been configured.');
2458   end;
2459 
2460   /***************************
2461    * Virtual Private Database
2462    ***************************/
2463 
2464   declare
2465     DBFUS_VPD_STR CONSTANT VARCHAR2(1000) :=
2466       'select count(*), NULL, NULL from DBA_POLICIES where OBJECT_OWNER ' ||
2467       'NOT IN (''SYSMAN'',''MDSYS'',''SYSMAN_MDS'',''XDB'',''CTXSYS'',' ||
2468       '''OE'',''LBACSYS'', ''GSMADMIN_INTERNAL'', ''SYSTEM'')';
2469 
2470   begin
2471     dbms_feature_usage.register_db_feature
2472      ('Virtual Private Database (VPD)',
2473       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2474       NULL,
2475       dbms_feature_usage.DBU_DETECT_BY_SQL,
2476       DBFUS_VPD_STR,
2477       'Virtual Private Database (VPD) policies are being used.');
2478   end;
2479 
2480   /**********************
2481    * Workspace Manager
2482    **********************/
2483 
2484   declare
2485     DBFUS_OWM_STR CONSTANT VARCHAR2(1000) :=
2486      'select count(*), count(*), NULL ' ||
2487      'from wmsys.wm$versioned_tables';
2488 
2489   begin
2490     dbms_feature_usage.register_db_feature
2491      ('Workspace Manager',
2492       dbms_feature_usage.DBU_INST_OBJECT,
2493       'WMSYS.wm$versioned_tables',
2494       dbms_feature_usage.DBU_DETECT_BY_SQL,
2495       DBFUS_OWM_STR,
2496       'There is at least one version enabled table.');
2497   end;
2498 
2499   /**************************
2500    * XDB
2501    **************************/
2502 
2503   begin
2504     dbms_feature_usage.register_db_feature
2505      ('XDB',
2506       dbms_feature_usage.DBU_INST_OBJECT,
2507       'XDB.Resource_View',
2508       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2509       'DBMS_FEATURE_XDB',
2510       'XDB feature is being used.');
2511   end;
2512 
2513   /*****************************
2514    * JSON
2515    *****************************/
2516 
2517   begin
2518     dbms_feature_usage.register_db_feature
2519      ('JSON',
2523       'DBMS_FEATURE_JSON',
2520       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2521       NULL,
2522       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2524       'JSON feature is being used.');
2525   end;
2526 
2527   /*****************************
2528    * Application Express (APEX)
2529    *****************************/
2530   begin
2531     dbms_feature_usage.register_db_feature
2532     ( 'Application Express',
2533       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2534       NULL,
2535       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2536       'DBMS_FEATURE_APEX',
2537       'Application Express feature is being used.');
2538   end;
2539 
2540   /***************************
2541    * LOB
2542    ***************************/
2543 
2544   declare
2545     DBMS_FEATURE_LOB CONSTANT VARCHAR2(1000) :=
2546       'select count(*), NULL, NULL from sys.lob$ l, sys.obj$ o, sys.user$ u ' ||
2547        'where l.obj# = o.obj# ' ||
2548          'and o.owner# = u.user# ' ||
2549          'and u.name not in (select schema_name from v$sysaux_occupants) ' ||
2550          'and u.name not in (''OUTLN'', ''OE'', ''IX'', ''PM'', ''SH'',
2551                              ''OJVMSYS'', ''DVSYS'', ''GSMADMIN_INTERNAL'') ' ||
2552          'and u.name not like ''APEX_% '' ' ||
2553          'and u.name not like ''FLOWS_%''';
2554 
2555   begin
2556     dbms_feature_usage.register_db_feature
2557      ('LOB',
2558       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2559       NULL,
2560       dbms_feature_usage.DBU_DETECT_BY_SQL,
2561       DBMS_FEATURE_LOB,
2562       'Persistent LOBs are being used.');
2563   end;
2564 
2565   /***************************
2566    * OBJECT
2567    ***************************/
2568 
2569   begin
2570     dbms_feature_usage.register_db_feature
2571      ('Object',
2572       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2573       NULL,
2574       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2575       'DBMS_FEATURE_OBJECT',
2576       'Object feature is being used.');
2577   end;
2578 
2579   /***************************
2580    * EXTENSIBILITY
2581    ***************************/
2582 
2583   begin
2584     dbms_feature_usage.register_db_feature
2585      ('Extensibility',
2586       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2587       NULL,
2588       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2589       'DBMS_FEATURE_EXTENSIBILITY',
2590       'Extensibility feature is being used.');
2591   end;
2592 
2593   /******************************
2594    * SQL Plan Management
2595    ******************************/
2596 
2597   declare
2598     DBFUS_SQL_PLAN_MANAGEMENT_STR CONSTANT VARCHAR2(2000) :=
2599       q'#SELECT nvl(total_count, 0) total_count,
2600                 nvl(enabled_count, 0) enabled_count,
2601                 decode(total_count, null, null,
2602                                     0, null,
2603                                     (manual_load || ', ' ||
2604                                      auto_capture || ', ' ||
2605                                      manual_sqltune || ', ' ||
2606                                      auto_sqltune || ', ' ||
2607                                      stored_outline || ', ' ||
2608                                      evolve_advisor || ', ' ||
2609                                      accepted_count || ', ' ||
2610                                      fixed_count || ', ' ||
2611                                      reproduced_count)) as details
2612          FROM (SELECT
2613                  sum(1) total_count,
2614                  sum(decode(enabled, 'YES', 1, 0)) enabled_count,
2615                  'Manual-load: ' ||
2616                    sum(decode(origin, 'MANUAL-LOAD', 1, 0)) manual_load,
2617                  'Auto-capture: ' ||
2618                    sum(decode(origin, 'AUTO-CAPTURE', 1, 0)) auto_capture,
2619                  'Manual-sqltune: ' ||
2620                    sum(decode(origin, 'MANUAL-SQLTUNE', 1, 0)) manual_sqltune,
2621                  'Auto-sqltune: ' ||
2622                    sum(decode(origin, 'AUTO-SQLTUNE', 1, 0)) auto_sqltune,
2623                  'Stored-outline: ' ||
2624                    sum(decode(origin, 'STORED-OUTLINE', 1, 0)) stored_outline,
2625                  'Evolve-advisor: ' ||
2626                    sum(decode(origin, 'EVOLVE-ADVISOR', 1, 0)) evolve_advisor,
2627                  'Accepted: ' ||
2628                    sum(decode(accepted, 'YES', 1, 0)) accepted_count,
2629                  'Fixed: ' ||
2630                    sum(decode(fixed, 'YES', 1, 0)) fixed_count,
2631                  'Reproduced: ' ||
2632                    sum(decode(reproduced, 'YES', 1, 0)) reproduced_count
2633                FROM dba_sql_plan_baselines)#';
2634   begin
2635     dbms_feature_usage.register_db_feature
2636      ('SQL Plan Management',
2637       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2638       NULL,
2639       dbms_feature_usage.DBU_DETECT_BY_SQL,
2640       DBFUS_SQL_PLAN_MANAGEMENT_STR,
2641       'SQL Plan Management has been used.');
2642   end;
2643 
2644   /******************************
2645    * DBMS_FEATURE_ADAPTIVE_PLANS
2646    ******************************/
2647   begin
2648     dbms_feature_usage.register_db_feature
2649      ('Adaptive Plans',
2650       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2654       'Adaptive Plans have been used');
2651       NULL,
2652       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2653       'DBMS_FEATURE_ADAPTIVE_PLANS',
2655   end;
2656 
2657   /**********************************
2658    * DBMS_FEATURE_AUTO_REOPT
2659    **********************************/
2660   begin
2661     dbms_feature_usage.register_db_feature
2662      ('Automatic Reoptimization',
2663       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2664       NULL,
2665       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2666       'DBMS_FEATURE_AUTO_REOPT',
2667       'Automatic Reoptimization have been used');
2668   end;
2669 
2670   begin
2671     dbms_feature_usage.register_db_feature
2672      ('SQL Plan Directive',
2673       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2674       NULL,
2675       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2676       'DBMS_FEATURE_SPD',
2677       'Sql plan directive has been used');
2678   end;
2679 
2680   /******************************
2681    * DBMS_FEATURE_STATS_CONCURRENT
2682    ******************************/
2683   begin
2684     dbms_feature_usage.register_db_feature
2685      ('Concurrent Statistics Gathering',
2686       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2687       NULL,
2688       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2689       'DBMS_FEATURE_CONCURRENT_STATS',
2690       'Concurrent Statistics Gathering has been used');
2691   end;
2692 
2693   /******************************
2694    * DBMS_FEATURE_STATS_INCREMENTAL
2695    ******************************/
2696   begin
2697     dbms_feature_usage.register_db_feature
2698      ('DBMS_STATS Incremental Maintenance',
2699       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2700       NULL,
2701       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2702       'DBMS_FEATURE_STATS_INCREMENTAL',
2703       'DBMS_STATS Incremental Maintenance has been used.');
2704   end;
2705 
2706 
2707   /***************************
2708    * RULES MANAGER and EXPRESSION FILTER
2709    ***************************/
2710   begin
2711     dbms_feature_usage.register_db_feature
2712         ('Rules Manager',
2713           dbms_feature_usage.DBU_INST_OBJECT,
2714           'EXFSYS.exf$attrset',
2715           dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2716           'DBMS_FEATURE_RULESMANAGER',
2717            'Rules Manager and Expression Filter');
2718   end;
2719 
2720   /***************************************************************
2721    *  DATABASE UTILITY: ORACLE DATAPUMP EXPORT
2722    ***************************************************************/
2723   declare
2724   begin
2725    dbms_feature_usage.register_db_feature
2726       ('Oracle Utility Datapump (Export)',
2727        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2728        NULL,
2729        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2730        'dbms_feature_utilities1',
2731        'Oracle Utility Datapump (Export) has been used.');
2732   end;
2733 
2734   /***************************************************************
2735    *  DATABASE UTILITY: ORACLE DATAPUMP IMPORT
2736    ***************************************************************/
2737   declare
2738   begin
2739    dbms_feature_usage.register_db_feature
2740       ('Oracle Utility Datapump (Import)',
2741        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2742        NULL,
2743        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2744        'dbms_feature_utilities2',
2745        'Oracle Utility Datapump (Import) has been used.');
2746   end;
2747 
2748   /***************************************************************
2749    *  DATABASE UTILITY: SQL*LOADER (DIRECT PATH LOAD)
2750    ***************************************************************/
2751   declare
2752    DBFUS_UTL_SQLLOADER_STR CONSTANT VARCHAR2(1000) :=
2753        'select usecnt, NULL, NULL from sys.ku_utluse                      ' ||
2754        ' where utlname = ''Oracle Utility SQL Loader (Direct Path Load)'' ' ||
2755        ' and   (last_used >=                                              ' ||
2756        '       (SELECT nvl(max(last_sample_date), sysdate-7)              ' ||
2757        '          FROM dba_feature_usage_statistics))';
2758 
2759   begin
2760    dbms_feature_usage.register_db_feature
2761       ('Oracle Utility SQL Loader (Direct Path Load)',
2762        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2763        NULL,
2764        dbms_feature_usage.DBU_DETECT_BY_SQL,
2765        DBFUS_UTL_SQLLOADER_STR,
2766        'Oracle Utility SQL Loader (Direct Path Load) has been used.');
2767   end;
2768 
2769   /***************************************************************
2770    *  DATABASE UTILITY: METADATA API
2771    ***************************************************************/
2772   declare
2773   begin
2774    dbms_feature_usage.register_db_feature
2775       ('Oracle Utility Metadata API',
2776        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2777        NULL,
2778        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2779        'dbms_feature_utilities3',
2780        'Oracle Utility (Metadata API) has been used.');
2781   end;
2782 
2783   /***************************************************************
2784    *  DATABASE UTILITY: EXTERNAL TABLE
2788    dbms_feature_usage.register_db_feature
2785    ***************************************************************/
2786   declare
2787   begin
2789       ('Oracle Utility External Table',
2790        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2791        NULL,
2792        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2793        'dbms_feature_utilities4',
2794        'Oracle Utility External Table has been used.');
2795   end;
2796 
2797   /***************************************************************
2798    *  RESULT CACHE
2799    ***************************************************************/
2800   declare
2801    DBFUS_RESULT_CACHE_STR CONSTANT VARCHAR2(1000) :=
2802        'select (select value from v$result_cache_statistics ' ||
2803        '        where name = ''Block Count Current''), '      ||
2804        '       (select value from v$result_cache_statistics ' ||
2805        '        where name = ''Find Count''), null '          ||
2806        'from dual';
2807 
2808   begin
2809    dbms_feature_usage.register_db_feature
2810       ('Result Cache',
2811        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2812        NULL,
2813        dbms_feature_usage.DBU_DETECT_BY_SQL,
2814        DBFUS_RESULT_CACHE_STR,
2815        'The Result Cache feature has been used.');
2816   end;
2817 
2818   /**************************************
2819    * TDE - Transparent Data Encryption
2820    **************************************/
2821 
2822   declare
2823     DBFUS_TDE_STR CONSTANT VARCHAR2(1000) :=
2824       'SELECT (T1.A + T2.B) IsFeatureUsed, ' ||
2825              '(T1.A + T2.B) AUX_COUNT, ' ||
2826              '''Encryption TABLESPACE Count = '' || T1.A || '','||
2827                'Encryption COLUMN Count = '' || T2.B REMARK ' ||
2828       'FROM   (SELECT count(*) A FROM DBA_TABLESPACES WHERE ' ||
2829                     ' UPPER(ENCRYPTED) = ''YES'') T1, ' ||
2830              '(SELECT count(*) B FROM DBA_ENCRYPTED_COLUMNS) T2 ' ;
2831   begin
2832     dbms_feature_usage.register_db_feature
2833      ('Transparent Data Encryption',
2834       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2835       NULL,
2836       dbms_feature_usage.DBU_DETECT_BY_SQL,
2837       DBFUS_TDE_STR,
2838       'Transparent Database Encryption is being used. There is' ||
2839       ' atleast one column or tablespace that is encrypted.');
2840   end;
2841 
2842   /*******************
2843    * Data Redaction
2844    *******************/
2845 
2846   /* Bug# 13888340: Data redaction feature usage tracking
2847    * Related test files are tmfudru.tsc and tmfudr.tsc.
2848    */
2849   begin
2850     dbms_feature_usage.register_db_feature
2851      ('Data Redaction',
2852       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2853       NULL,
2854       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2855       'DBMS_FEATURE_DATA_REDACTION',
2856       'Data redaction is being used. There is' ||
2857       ' at least one policy that is defined.');
2858   end;
2859 
2860   /**********************
2861    * Oracle Multimedia
2862    **********************/
2863 
2864   declare
2865     DBFUS_MULTIMEDIA_STR CONSTANT VARCHAR2(1000) :=
2866       'ordsys.CARTRIDGE.dbms_feature_multimedia';
2867 
2868   begin
2869     dbms_feature_usage.register_db_feature
2870      ('Oracle Multimedia',
2871       dbms_feature_usage.DBU_INST_OBJECT,
2872       'ORDSYS.ORDIMERRORCODES',
2873       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2874       DBFUS_MULTIMEDIA_STR,
2875       'Oracle Multimedia has been used');
2876   end;
2877 
2878   /*****************************************************************
2879    * Oracle Multimedia DICOM: medical imaging
2880    * DICOM stands for Digital Imaging and COmmunications in Medicine
2881    *****************************************************************/
2882 
2883   declare
2884     DBFUS_DICOM_STR CONSTANT VARCHAR2(1000) :=
2885       'ordsys.CARTRIDGE.dbms_feature_dicom';
2886 
2887   begin
2888     dbms_feature_usage.register_db_feature
2889      ('Oracle Multimedia DICOM',
2890       dbms_feature_usage.DBU_INST_OBJECT,
2891       'ORDSYS.ORDDICOM',
2892       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2893       DBFUS_DICOM_STR,
2894       'Oracle Multimedia DICOM (Digital Imaging and COmmunications in Medicine) has been used');
2895   end;
2896 
2897   /****************************
2898    * Materialized Views (User)
2899    ****************************/
2900 
2901   declare
2902     DBFUS_USER_MVS CONSTANT VARCHAR2(1000) := 'DBMS_FEATURE_USER_MVS';
2903 
2904   begin
2905     dbms_feature_usage.register_db_feature
2906      ('Materialized Views (User)',
2907       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2908       NULL,
2909       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2910       DBFUS_USER_MVS,
2911       'User Materialized Views exist in the database');
2912   end;
2913 
2914   /***************************
2915    * Change Data Capture (CDC)
2916    ***************************/
2917   begin
2918     dbms_feature_usage.register_db_feature
2919         ('Change Data Capture',
2920           dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2921           NULL,
2922           dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2923           'DBMS_FEATURE_CDC',
2927   /********************************
2924            'Change Data Capture exit in the database');
2925   end;
2926 
2928    * Services
2929    *********************************/
2930   declare
2931     DBFUS_SERVICES_PROC CONSTANT VARCHAR2(1000) := 'DBMS_FEATURE_SERVICES';
2932   begin
2933     dbms_feature_usage.register_db_feature
2934      ('Services',
2935       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2936       NULL,
2937       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2938       DBFUS_SERVICES_PROC,
2939       'Oracle Services.');
2940   end;
2941 
2942   /***********************
2943    * Semantics/RDF/OWL
2944    ***********************/
2945 
2946    declare
2947      DBFUS_SEMANTICS_RDF_STR CONSTANT VARCHAR2(1000) :=
2948         'select cnt, cnt, null from ' ||
2949         ' (select count(*) cnt from mdsys.rdf_model$)';
2950 
2951    begin
2952      dbms_feature_usage.register_db_feature
2953        ('Semantics/RDF',
2954          dbms_feature_usage.DBU_INST_OBJECT,
2955          'MDSYS.RDF_Models',
2956          dbms_feature_usage.DBU_DETECT_BY_SQL,
2957          DBFUS_SEMANTICS_RDF_STR,
2958          'A semantic network has been created indicating usage of the ' ||
2959          'Oracle Semantics Feature.');
2960     end;
2961 
2962   /***********************
2963    * SecureFiles (user)
2964    ***********************/
2965 
2966   begin
2967    dbms_feature_usage.register_db_feature
2968       ('SecureFiles (user)',
2969         dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2970         NULL,
2971         dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2972        'DBMS_FEATURE_SECUREFILES_USR',
2973        'SecureFiles is being used');
2974   end;
2975 
2976   /***********************
2977    * SecureFiles (system)
2978    ***********************/
2979 
2980   begin
2981    dbms_feature_usage.register_db_feature
2982       ('SecureFiles (system)',
2983         dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2984         NULL,
2985         dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
2986        'DBMS_FEATURE_SECUREFILES_SYS',
2987        'SecureFiles is being used by system users');
2988   end;
2989 
2990   /*********************************
2991    * SecureFile Encryption (user)
2992    *********************************/
2993 
2994   begin
2995    dbms_feature_usage.register_db_feature
2996       ('SecureFile Encryption (user)',
2997         dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
2998         NULL,
2999         dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3000        'DBMS_FEATURE_SFENCRYPT_USR',
3001        'SecureFile Encryption is being used');
3002   end;
3003 
3004   /*********************************
3005    * SecureFile Encryption (system)
3006    *********************************/
3007 
3008   begin
3009    dbms_feature_usage.register_db_feature
3010       ('SecureFile Encryption (system)',
3011         dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3012         NULL,
3013         dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3014        'DBMS_FEATURE_SFENCRYPT_SYS',
3015        'SecureFile Encryption is being used by system users');
3016   end;
3017 
3018   /*********************************
3019    * SecureFile Compression (user)
3020    *********************************/
3021 
3022   begin
3023    dbms_feature_usage.register_db_feature
3024       ('SecureFile Compression (user)',
3025         dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3026         NULL,
3027         dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3028        'DBMS_FEATURE_SFCOMPRESS_USR',
3029        'SecureFile Compression is being used');
3030   end;
3031 
3032   /*********************************
3033    * SecureFile Compression (system)
3034    *********************************/
3035 
3036   begin
3037    dbms_feature_usage.register_db_feature
3038       ('SecureFile Compression (system)',
3039         dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3040         NULL,
3041         dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3042        'DBMS_FEATURE_SFCOMPRESS_SYS',
3043        'SecureFile Compression is being used by system users');
3044   end;
3045 
3046   /*********************************
3047    * SecureFile Deduplication (user)
3048    *********************************/
3049 
3050   begin
3051     dbms_feature_usage.register_db_feature
3052      ('SecureFile Deduplication (user)',
3053        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3054        NULL,
3055        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3056       'DBMS_FEATURE_SFDEDUP_USR',
3057       'SecureFile Deduplication is being used');
3058   end;
3059 
3060   /*********************************
3061    * SecureFile Deduplication (system)
3062    *********************************/
3063 
3064   begin
3065     dbms_feature_usage.register_db_feature
3066      ('SecureFile Deduplication (system)',
3067        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3068        NULL,
3069        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3070       'DBMS_FEATURE_SFDEDUP_SYS',
3071       'SecureFile Deduplication is being used by system users');
3072   end;
3073 
3074   /******************************
3078   declare
3075    * Segment Advisor
3076    ******************************/
3077 
3079     DBFUS_SEGADV_USER_PROC CONSTANT VARCHAR2(100) := 'DBMS_FEATURE_SEGADV_USER';
3080   begin
3081     dbms_feature_usage.register_db_feature
3082      ('Segment Advisor (user)',
3083       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3084       NULL,
3085       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3086       DBFUS_SEGADV_USER_PROC,
3087       'Segment Advisor has been used. There is at least one user task executed.');
3088   end;
3089 
3090   /***********************
3091    * Compression
3092    ***********************/
3093 
3094   begin
3095    dbms_feature_usage.register_db_feature
3096       ('HeapCompression',
3097        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3098        NULL,
3099        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3100        'DBMS_FEATURE_ADV_TABCMP',
3101        'Heap Compression is being used');
3102   end;
3103 
3104  /******************************
3105    * Advanced Index Compression
3106    *****************************/
3107   begin
3108     dbms_feature_usage.register_db_feature
3109      ('Advanced Index Compression',
3110       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3111       NULL,
3112       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3113       'DBMS_FEATURE_ADV_IDXCMP',
3114       'Advanced Index Compression is used');
3115   end;
3116 
3117 /******************************
3118    * Index Organized Tables
3119    *****************************/
3120   begin
3121     dbms_feature_usage.register_db_feature
3122      ('Index Organized Tables',
3123       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3124       NULL,
3125       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3126       'DBMS_FEATURE_IOT',
3127       'Index Organized Tables are being used');
3128   end;
3129 
3130 /******************************
3131    * In-Memory Column Store
3132    *****************************/
3133   begin
3134     dbms_feature_usage.register_db_feature
3135      ('In-Memory Column Store',
3136       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3137       NULL,
3138       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3139       'DBMS_FEATURE_IMC',
3140       'In-Memory Column Store is being used');
3141   end;
3142 
3143 
3144  /******************************
3145    * Hybrid Columnar Compression
3146    *****************************/
3147 
3148   begin
3149     dbms_feature_usage.register_db_feature
3150      ('Hybrid Columnar Compression',
3151       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3152       NULL,
3153       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3154       'DBMS_FEATURE_HCC',
3155       'Hybrid Columnar Compression is used');
3156   end;
3157 
3158  /************************************************
3159    * Hybrid Columnar Compression Row Level Locking
3160    **********************************************/
3161 
3162   begin
3163     dbms_feature_usage.register_db_feature
3164      ('Hybrid Columnar Compression Row Level Locking',
3165       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3166       NULL,
3167       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3168       'DBMS_FEATURE_HCCRLL',
3169       'Hybrid Columnar Compression Row Level Locking is used');
3170   end;
3171 
3172   /*****************************************
3173     * Information Lifecycle Management (ILM)
3174     ****************************************/
3175 
3176   begin
3177     dbms_feature_usage.register_db_feature
3178       ('Information Lifecycle Management',
3179        dbms_feature_usage.DBU_INST_OBJECT,
3180        'SYS.ilm$',
3181        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3182        'DBMS_FEATURE_ILM',
3183        'Information Lifecycle Management is used');
3184   end;
3185 
3186   /*****************************************
3187     * Heat Map
3188     ****************************************/
3189 
3190   begin
3191     dbms_feature_usage.register_db_feature
3192       ('Heat Map',
3193        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3194        NULL,
3195        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3196        'DBMS_FEATURE_HEATMAP',
3197        'Heat Map is used');
3198   end;
3199 
3200 
3201   /******************************
3202     * ZFS Storage
3203     ******************************/
3204   begin
3205     dbms_feature_usage.register_db_feature
3206       ('ZFS Storage',
3207        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3208        NULL,
3209        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3210        'DBMS_FEATURE_ZFS_STORAGE',
3211        'Tablespaces stored on Oracles Sun ZFS Storage');
3212   end;
3213 
3214   /******************************
3215     * Pillar Storage
3216     ******************************/
3217   begin
3218     dbms_feature_usage.register_db_feature
3219       ('Pillar Storage',
3220        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3221        NULL,
3222        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3223        'DBMS_FEATURE_PILLAR_STORAGE',
3224        'Tablespaces stored on Oracles Pillar Axiom Storage');
3225   end;
3226 
3227   /******************************
3228     * ZFS Storage + EHCC
3232       ('Sun ZFS with EHCC',
3229     *****************************/
3230   begin
3231     dbms_feature_usage.register_db_feature
3233        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3234        NULL,
3235        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3236        'DBMS_FEATURE_ZFS_EHCC',
3237        'EHCC used on tablespaces stored on Oracles Sun ZFS Storage');
3238   end;
3239 
3240   /******************************
3241     * Pillar Storage + EHCC
3242     *****************************/
3243   begin
3244     dbms_feature_usage.register_db_feature
3245       ('Pillar Storage with EHCC',
3246        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3247        NULL,
3248        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3249        'DBMS_FEATURE_PILLAR_EHCC',
3250        'EHCC used on tablespaces stored on Oracles Pillar Axiom Storage');
3251   end;
3252 
3253   /******************************
3254    * Segment Shrink
3255    ******************************/
3256 
3257   declare
3258     DBFUS_SEG_SHRINK_STR CONSTANT VARCHAR2(1000) :=
3259       'select  count(*), 0, null ' ||
3260         'from  sys.seg$ s ' ||
3261         'where s.scanhint != 0 and ' ||
3262               'bitand(s.spare1, 65793) = 257 and ' ||
3263               's.type# in (5, 6,8) ';
3264   begin
3265     dbms_feature_usage.register_db_feature
3266      ('Segment Shrink',
3267       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3268       NULL,
3269       dbms_feature_usage.DBU_DETECT_BY_SQL,
3270       DBFUS_SEG_SHRINK_STR,
3271       'Segment Shrink has been used.');
3272   end;
3273 
3274   /***************************
3275    * Job Scheduler
3276    ***************************/
3277 
3278   begin
3279     dbms_feature_usage.register_db_feature
3280      ('Job Scheduler',
3281       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3282       NULL,
3283       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3284       'DBMS_FEATURE_JOB_SCHEDULER',
3285       'Job Scheduler feature is being used.');
3286   end;
3287 
3288   /***************************
3289    * Orcle Gateways
3290    ***************************/
3291 
3292   begin
3293     dbms_feature_usage.register_db_feature
3294      ('Gateways',
3295       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3296       NULL,
3297       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3298       'DBMS_FEATURE_GATEWAYS',
3299       'Gateways feature is being used.');
3300   end;
3301 
3302   /*******************************
3303    * Java Virtual Machine (user)
3304    *******************************/
3305 
3306   declare
3307     DBFUS_OJVM_STR CONSTANT VARCHAR2(1000) :=
3308       'sys.dbms_java.dbms_feature_ojvm';
3309 
3310   begin
3311     dbms_feature_usage.register_db_feature
3312      ('Oracle Java Virtual Machine (user)',
3313       dbms_feature_usage.DBU_INST_OBJECT,
3314       'SYS.JAVA$POLICY$',
3315       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3316       DBFUS_OJVM_STR,
3317       'OJVM has been used by at least one non-system user');
3318   end;
3319 
3320   /*********************************
3321    * Java Virtual Machine (system)
3322    *********************************/
3323 
3324   declare
3325     DBFUS_OJVM_SYS_STR CONSTANT VARCHAR2(1000) :=
3326       'sys.dbms_java.dbms_feature_system_ojvm';
3327 
3328   begin
3329     dbms_feature_usage.register_db_feature
3330      ('Oracle Java Virtual Machine (system)',
3331       dbms_feature_usage.DBU_INST_OBJECT,
3332       'SYS.JAVA$POLICY$',
3333       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3334       DBFUS_OJVM_SYS_STR,
3335       'OJVM default system users');
3336   end;
3337 
3338   /**********************
3339    * In-Database Hadoop
3340    **********************/
3341 
3342   begin
3343     dbms_feature_usage.register_db_feature
3344      ('Oracle In-Database Hadoop',
3345       dbms_feature_usage.DBU_INST_OBJECT,
3346       'SYS.JAVA$POLICY$',
3347       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3348       'DBMS_FEATURE_IDH',
3349       'In-Database Hadoop for running MapReduce in java');
3350   end;
3351 
3352 
3353   /************************
3354    * DBFS Content
3355    ************************/
3356 
3357   declare
3358     DBFUS_DBFS_CONTENT_PROC CONSTANT VARCHAR2(1000) :=
3359       'sys.dbms_feature_dbfs_content';
3360 
3361   begin
3362     dbms_feature_usage.register_db_feature
3363      ('DBFS Content',
3364       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3365       NULL,
3366       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3367       DBFUS_DBFS_CONTENT_PROC,
3368       'Oracle Database FileSystem Content feature is being used');
3369   end;
3370 
3371   /************************
3372    * DBFS SecureFile Store
3373    ************************/
3374 
3375   declare
3376     DBFUS_DBFS_SFS_PROC CONSTANT VARCHAR2(1000) :=
3377       'sys.dbms_feature_dbfs_sfs';
3378 
3379   begin
3380     dbms_feature_usage.register_db_feature
3381      ('DBFS SFS',
3382       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3383       NULL,
3384       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3385       DBFUS_DBFS_SFS_PROC,
3389   /**************************
3386       'Oracle Database FileSystem SecureFile Store feature is being used');
3387   end;
3388 
3390    * DBFS Hierarchical Store
3391    **************************/
3392 
3393   declare
3394     DBFUS_DBFS_HS_PROC CONSTANT VARCHAR2(1000) :=
3395       'sys.dbms_feature_dbfs_hs';
3396 
3397   begin
3398     dbms_feature_usage.register_db_feature
3399      ('DBFS HS',
3400       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3401       NULL,
3402       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3403       DBFUS_DBFS_HS_PROC,
3404       'Oracle Database FileSystem Hierarchical Store feature is being used');
3405   end;
3406 
3407   /******************************
3408    * EXADATA
3409    ******************************/
3410 
3411   declare
3412     DBFUS_EXADATA_PROC CONSTANT VARCHAR2(1000) := 'DBMS_FEATURE_EXADATA';
3413 
3414   begin
3415     dbms_feature_usage.register_db_feature
3416      ('Exadata',
3417       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3418       NULL,
3419       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3420       DBFUS_EXADATA_PROC,
3421       'Exadata is being used');
3422   end;
3423 
3424   /**************************
3425    * GSM CATALOG
3426    *************************/
3427 
3428    declare
3429      DBFUS_GSMCAT_STR CONSTANT VARCHAR2(1000) :=
3430         'select count(*), 0, NULL from gsmadmin_internal.cloud';
3431 
3432    begin
3433     dbms_feature_usage.register_db_feature
3434      ('GDS Catalog',
3435       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3436       NULL,
3437       dbms_feature_usage.DBU_DETECT_BY_SQL,
3438       DBFUS_GSMCAT_STR,
3439       'Database is a GDS catalog database.');
3440    end;
3441 
3442   /**************************
3443    * GSM GLOBAL SERVICES
3444    *************************/
3445 
3446    declare
3447      DBFUS_GSMGLOB_STR CONSTANT VARCHAR2(1000) :=
3448         'select count(*), 0, NULL from dba_services ' ||
3449         'where global_service = ''YES''';
3450 
3451    begin
3452     dbms_feature_usage.register_db_feature
3453      ('Global Data Services',
3454       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3455       NULL,
3456       dbms_feature_usage.DBU_DETECT_BY_SQL,
3457       DBFUS_GSMGLOB_STR,
3458       'Database contains global services.');
3459    end;
3460 
3461 
3462   /*************************************
3463    * Real Application Security
3464    *************************************/
3465 
3466   declare
3467     DBFUS_RAS_STR CONSTANT VARCHAR2(1000) := 'SYS.DBMS_FEATURE_RAS';
3468 
3469   begin
3470     dbms_feature_usage.register_db_feature
3471      ('Real Application Security',
3472       dbms_feature_usage.DBU_INST_OBJECT,
3473       'SYS.XS$OBJ',
3474       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3475       DBFUS_RAS_STR,
3476       'Oracle Real Application Security is being used');
3477   end;
3478 
3479   /**********************
3480    * Privilege Capture  *
3481    **********************/
3482 
3483   declare
3484     DBFUS_PRIV_CAPTURE_PROC CONSTANT VARCHAR2(1000) :=
3485       'SYS.DBMS_FEATURE_PRIV_CAPTURE';
3486 
3487   begin
3488     dbms_feature_usage.register_db_feature
3489      ('Privilege Capture',
3490       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3491       NULL,
3492       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3493       DBFUS_PRIV_CAPTURE_PROC,
3494       'Privilege Capture is being used');
3495   end;
3496 
3497  /****************************
3498    * Online Redefintion
3499    ****************************/
3500 
3501   declare
3502     DBFUS_ONLINE_REDEF CONSTANT VARCHAR2(1000) :=
3503       'DBMS_FEATURE_ONLINE_REDEF';
3504 
3505   begin
3506     dbms_feature_usage.register_db_feature
3507      ('Online Redefinition',
3508        dbms_feature_usage.DBU_INST_OBJECT,
3509       'SYS.REDEF$',
3510       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3511       DBFUS_ONLINE_REDEF,
3512       'Online Redefinition is being used');
3513   end;
3514 
3515   /***************************************************************
3516    *  In-Memory Aggregation
3517    ***************************************************************/
3518 
3519   begin
3520    dbms_feature_usage.register_db_feature
3521       ('In-Memory Aggregation',
3522        dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3523        NULL,
3524        dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3525        'DBMS_FEATURE_IMA',
3526        'In-Memory Aggregation is being used.');
3527   end;
3528 
3529   /*********************************************
3530    * TEST features to test the infrastructure
3531    *********************************************/
3532 
3533   dbms_feature_usage.register_db_feature
3534      ('_DBFUS_TEST_SQL_1',
3535       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3536       dbms_feature_usage.DBU_INST_TEST,
3537       NULL,
3538       dbms_feature_usage.DBU_DETECT_BY_SQL,
3539       'select 1, 0, NULL from dual',
3540       'Test sql 1');
3541 
3542   dbms_feature_usage.register_db_feature
3543      ('_DBFUS_TEST_SQL_2',
3544       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3545       dbms_feature_usage.DBU_INST_TEST,
3549       'Test sql 2');
3546       NULL,
3547       dbms_feature_usage.DBU_DETECT_BY_SQL,
3548       'select 0, 10, to_clob(''hi, mike'') from dual',
3550 
3551   dbms_feature_usage.register_db_feature
3552      ('_DBFUS_TEST_SQL_3',
3553       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3554       dbms_feature_usage.DBU_INST_TEST,
3555       NULL,
3556       dbms_feature_usage.DBU_DETECT_BY_SQL,
3557       'select 13, NULL, to_clob(''hello, mike'') from dual',
3558       'Test sql 3');
3559 
3560   dbms_feature_usage.register_db_feature
3561      ('_DBFUS_TEST_SQL_4',
3562       dbms_feature_usage.DBU_INST_OBJECT +
3563       dbms_feature_usage.DBU_INST_TEST,
3564       'sys.tab$',
3565       dbms_feature_usage.DBU_DETECT_BY_SQL,
3566       'select 11, 11, to_clob(''test sql 4 check tab$'') from dual',
3567       'Test sql 4');
3568 
3569   dbms_feature_usage.register_db_feature
3570      ('_DBFUS_TEST_SQL_5',
3571       dbms_feature_usage.DBU_INST_OBJECT +
3572       dbms_feature_usage.DBU_INST_TEST,
3573       'sys.foo',
3574       dbms_feature_usage.DBU_DETECT_BY_SQL,
3575       'select 2, 0, to_clob(''check foo'') from dual',
3576       'Test sql 5');
3577 
3578   dbms_feature_usage.register_db_feature
3579      ('_DBFUS_TEST_SQL_6',
3580       dbms_feature_usage.DBU_INST_OBJECT +
3581       dbms_feature_usage.DBU_INST_TEST,
3582       'sys.tab$',
3583       dbms_feature_usage.DBU_DETECT_BY_SQL,
3584       'select 0, 0, to_clob(''should not see'') from dual',
3585       'Test sql 6');
3586 
3587   dbms_feature_usage.register_db_feature
3588      ('_DBFUS_TEST_SQL_7',
3589       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3590       dbms_feature_usage.DBU_INST_TEST,
3591       NULL,
3592       dbms_feature_usage.DBU_DETECT_NULL,
3593       'junk',
3594       'Test sql 7');
3595 
3596   dbms_feature_usage.register_db_feature
3597      ('_DBFUS_TEST_SQL_8',
3598       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3599       dbms_feature_usage.DBU_INST_TEST,
3600       NULL,
3601       dbms_feature_usage.DBU_DETECT_BY_SQL,
3602       'select junk from foo',
3603       'Test sql 8 - Test error case');
3604 
3605   dbms_feature_usage.register_db_feature
3606      ('_DBFUS_TEST_SQL_9',
3607       dbms_feature_usage.DBU_INST_OBJECT +
3608       dbms_feature_usage.DBU_INST_TEST,
3609       'test.test',
3610       dbms_feature_usage.DBU_DETECT_BY_SQL,
3611       'select junk from foo',
3612       'Test sql 9 - Test error case for install');
3613 
3614   dbms_feature_usage.register_db_feature
3615      ('_DBFUS_TEST_SQL_10',
3616       dbms_feature_usage.DBU_INST_OBJECT +
3617       dbms_feature_usage.DBU_INST_TEST,
3618       'sys.dbu_test_table',
3619       dbms_feature_usage.DBU_DETECT_BY_SQL,
3620       'select count(*), count(*), max(letter) from dbu_test_table',
3621       'Test sql 10 - Test infrastructure');
3622 
3623   dbms_feature_usage.register_db_feature
3624      ('_DBFUS_TEST_PROC_1',
3625       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3626       dbms_feature_usage.DBU_INST_TEST,
3627       NULL,
3628       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3629       'DBMS_FEATURE_TEST_PROC_1',
3630       'Test feature 1');
3631 
3632   dbms_feature_usage.register_db_feature
3633      ('_DBFUS_TEST_PROC_2',
3634       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3635       dbms_feature_usage.DBU_INST_TEST,
3636       NULL,
3637       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3638       'DBMS_FEATURE_TEST_PROC_2',
3639       'Test feature 2');
3640 
3641   dbms_feature_usage.register_db_feature
3642      ('_DBFUS_TEST_PROC_3',
3643       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3644       dbms_feature_usage.DBU_INST_TEST,
3645       NULL,
3646       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3647       'Junk Procedure',
3648       'Test feature 3 - Bad procedure name');
3649 
3650   dbms_feature_usage.register_db_feature
3651      ('_DBFUS_TEST_PROC_4',
3652       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3653       dbms_feature_usage.DBU_INST_TEST,
3654       NULL,
3655       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3656       'DBMS_FEATURE_TEST_PROC_4',
3657       'Test feature 4');
3658 
3659   dbms_feature_usage.register_db_feature
3660      ('_DBFUS_TEST_PROC_5',
3661       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED +
3662       dbms_feature_usage.DBU_INST_TEST,
3663       NULL,
3664       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3665       'DBMS_FEATURE_TEST_PROC_5',
3666       'Test feature 5');
3667 
3668   /*********************************************
3669    * Transparent Sensitive Data Protection (TSDP)
3670    ********************************************/
3671   begin
3672     dbms_feature_usage.register_db_feature
3673      ('Transparent Sensitive Data Protection',
3674       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3675       NULL,
3676       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3677       'DBMS_FEATURE_TSDP',
3678       'Transparent Sensitive Data Protection (TSDP)');
3679   end;
3680 
3681   /*********************************************
3682    * Segment Maintenance Online Compress
3683    ********************************************/
3684   begin
3685     dbms_feature_usage.register_db_feature
3686      ('Segment Maintenance Online Compress',
3687       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3688       NULL,
3689       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3690       'DBMS_FEATURE_SEG_MAIN_ONL_COMP',
3691       'Segment Maintenance Online Compress');
3692   end;
3693 
3694   /**************************
3695    * EM Express
3696    **************************/
3697   begin
3698     dbms_feature_usage.register_db_feature
3699      ('EM Express',
3700       dbms_feature_usage.DBU_INST_OBJECT,
3701       'sys.wri$_emx_files',
3702       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3703       'DBMS_FEATURE_EMX',
3704       'EM Database Express has been used');
3705   end;
3706 
3707   /*********************************************
3708    * RA Owner
3709    ********************************************/
3710   declare
3711     DBMS_FEATURE_RA_OWNER_STR CONSTANT VARCHAR2(1000) :=
3712        'DBMS_FEATURE_RA_OWNER';
3713   begin
3714     dbms_feature_usage.register_db_feature
3715      ('RA Owner',
3716       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3717       NULL,
3718       dbms_feature_usage.DBU_DETECT_BY_PROCEDURE,
3719       DBMS_FEATURE_RA_OWNER_STR,
3720       'RA OWNER');
3721    end;
3722 
3723   /******************************
3724    * INSTANT RESTORE command
3725    *********************************/
3726   declare
3727     DBFUS_INSTANT_RES_STR CONSTANT VARCHAR2(1000) :=
3728       'select p, NULL, NULL from ' ||
3729         '(select count(*) p from v$rman_status' ||
3730         '  where operation like ''RESTORE INSTANT%'')';
3731   begin
3732     dbms_feature_usage.register_db_feature
3733      ('INSTANT RESTORE command',
3734       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3735       NULL,
3736       dbms_feature_usage.DBU_DETECT_BY_SQL,
3737       DBFUS_INSTANT_RES_STR,
3738       'RMAN''s INSTANT RESTORE command used by the database.');
3739   end;
3740 
3741   /******************************
3742    * Container Usage
3743    *********************************/
3744   declare
3745     DBFUS_CONTAINER_STR CONSTANT VARCHAR2(1000) :=
3746       'select p, NULL, NULL from ' ||
3747         '(select count(*) p from sys.amgrp$)';
3748   begin
3749     dbms_feature_usage.register_db_feature
3750      ('Container Usage',
3751       dbms_feature_usage.DBU_INST_ALWAYS_INSTALLED,
3752       NULL,
3753       dbms_feature_usage.DBU_DETECT_BY_SQL,
3754       DBFUS_CONTAINER_STR,
3755       'CONTAINER FILES used by backup appliance.');
3756   end;
3757 
3758 end;